#[ MyGame.Example.Stat
  Automatically generated by the FlatBuffers compiler, do not modify.
  Or modify. I'm a message, not a cop.

  flatc version: 24.3.25

  Declared by  : 
  Rooting type : MyGame.Example.Monster ()
]#

import flatbuffers
import std/options

type Stat* = object of FlatObj
func id*(self: Stat): Option[string] =
  let o = self.tab.Offset(4)
  if o != 0:
    return some(self.tab.String(self.tab.Pos + o))
func val*(self: Stat): int64 =
  let o = self.tab.Offset(6)
  if o != 0:
    return Get[int64](self.tab, self.tab.Pos + o)
  return 0
func `val=`*(self: var Stat, n: int64): bool =
  return self.tab.MutateSlot(6, n)
func count*(self: Stat): uint16 =
  let o = self.tab.Offset(8)
  if o != 0:
    return Get[uint16](self.tab, self.tab.Pos + o)
  return 0
func `count=`*(self: var Stat, n: uint16): bool =
  return self.tab.MutateSlot(8, n)
proc StatStart*(builder: var Builder) =
  builder.StartObject(3)
proc StatAddid*(builder: var Builder, id: uoffset) =
  builder.PrependSlot(0, id, default(uoffset))
proc StatAddval*(builder: var Builder, val: int64) =
  builder.PrependSlot(1, val, default(int64))
proc StatAddcount*(builder: var Builder, count: uint16) =
  builder.PrependSlot(2, count, default(uint16))
proc StatEnd*(builder: var Builder): uoffset =
  return builder.EndObject()
