--[[ MyGame.Example.Referrable

  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  : //monster_test.fbs
  Rooting type : MyGame.Example.Monster (//monster_test.fbs)

--]]

local flatbuffers = require('flatbuffers')

local Referrable = {}
local mt = {}

function Referrable.New()
  local o = {}
  setmetatable(o, {__index = mt})
  return o
end

function mt:Init(buf, pos)
  self.view = flatbuffers.view.New(buf, pos)
end

function mt:Id()
  local o = self.view:Offset(4)
  if o ~= 0 then
    return self.view:Get(flatbuffers.N.Uint64, self.view.pos + o)
  end
  return 0
end

function Referrable.Start(builder)
  builder:StartObject(1)
end

function Referrable.AddId(builder, id)
  builder:PrependUint64Slot(0, id, 0)
end

function Referrable.End(builder)
  return builder:EndObject()
end

return Referrable