#[ 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.7

  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()
