#[ MyGame.Example.Test
  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

type Test* = object of FlatObj
func a*(self: Test): int16 =
  return Get[int16](self.tab, self.tab.Pos + 0)
func `a=`*(self: var Test, n: int16): bool =
  return self.tab.Mutate(self.tab.Pos + 0, n)
func b*(self: Test): int8 =
  return Get[int8](self.tab, self.tab.Pos + 2)
func `b=`*(self: var Test, n: int8): bool =
  return self.tab.Mutate(self.tab.Pos + 2, n)
proc TestCreate*(self: var Builder, a: int16, b: int8): uoffset =
  self.Prep(2, 4)
  self.Pad(1)
  self.Prepend(b)
  self.Prepend(a)
  return self.Offset()
