-- Code generated by protoc-gen-tarantool. DO NOT EDIT.
-- source: hello.proto
-- syntax: proto3
-- package: hello
local pb = require("pb")
local wire = pb.wire
local M = {}
-- Enum: hello.Status
M.Status_descriptor = pb.enum("hello.Status", {
UNKNOWN = 0,
OK = 1,
ERROR = 2,
})
M.Status = M.Status_descriptor.by_name
-- Pre-declare message descriptors so cross-references resolve.
M.Result_descriptor = {name = "hello.Result"}
M.HelloRequest_descriptor = {name = "hello.HelloRequest"}
M.HelloReply_descriptor = {name = "hello.HelloReply"}
M.Event_descriptor = {name = "hello.Event"}
M.Address_descriptor = {name = "hello.Address"}
M.Person_descriptor = {name = "hello.Person"}
-- Message: hello.Result
M.Result_descriptor.fields = {
{name="id", id=1, kind='scalar', proto_type="int32"},
{name="text", id=2, kind='scalar', proto_type="string", oneof="outcome"},
{name="code", id=3, kind='scalar', proto_type="int32", oneof="outcome"},
{name="details", id=4, kind='message', message=M.Address_descriptor, oneof="outcome"},
}
M.Result_descriptor.oneofs = {
outcome = {"text", "code", "details"},
}
pb.finalize_message(M.Result_descriptor)
-- Message: hello.HelloRequest
M.HelloRequest_descriptor.fields = {
{name="name", id=1, kind='scalar', proto_type="string"},
}
pb.finalize_message(M.HelloRequest_descriptor)
-- Message: hello.HelloReply
M.HelloReply_descriptor.fields = {
{name="greeting", id=1, kind='scalar', proto_type="string"},
}
pb.finalize_message(M.HelloReply_descriptor)
-- Message: hello.Event
M.Event_descriptor.fields = {
{name="title", id=1, kind='scalar', proto_type="string"},
{name="created_at", id=2, kind='message', message=pb.wkt.Timestamp_descriptor},
{name="duration", id=3, kind='message', message=pb.wkt.Duration_descriptor},
{name="ack", id=4, kind='message', message=pb.wkt.Empty_descriptor},
{name="retry_count", id=5, kind='message', message=pb.wkt.Int32Value_descriptor},
{name="note", id=6, kind='message', message=pb.wkt.StringValue_descriptor},
{name="is_admin", id=7, kind='message', message=pb.wkt.BoolValue_descriptor},
{name="payload", id=8, kind='message', message=pb.wkt.Struct_descriptor},
{name="attribute", id=9, kind='message', message=pb.wkt.Value_descriptor},
{name="tags", id=10, kind='message', message=pb.wkt.ListValue_descriptor},
{name="extension", id=11, kind='message', message=pb.wkt.Any_descriptor},
{name="update_mask", id=12, kind='message', message=pb.wkt.FieldMask_descriptor},
}
pb.finalize_message(M.Event_descriptor)
-- Message: hello.Address
M.Address_descriptor.fields = {
{name="street", id=1, kind='scalar', proto_type="string"},
{name="city", id=2, kind='scalar', proto_type="string"},
{name="zip", id=3, kind='scalar', proto_type="int32"},
{name="apartment", id=4, kind='scalar', proto_type="string", optional=true},
}
pb.finalize_message(M.Address_descriptor)
-- Message: hello.Person
M.Person_descriptor.fields = {
{name="name", id=1, kind='scalar', proto_type="string"},
{name="age", id=2, kind='scalar', proto_type="int32"},
{name="emails", id=3, kind='scalar', proto_type="string", repeated=true},
{name="status", id=4, kind='enum', enum=M.Status_descriptor},
{name="address", id=5, kind='message', message=M.Address_descriptor},
{name="friends", id=6, kind='message', message=M.Person_descriptor, repeated=true},
{name="lucky_numbers", id=7, kind='scalar', proto_type="int32", repeated=true, packed=true},
{name="avatar", id=8, kind='scalar', proto_type="bytes"},
{name="user_id", id=9, kind='scalar', proto_type="fixed64"},
{name="balance", id=10, kind='scalar', proto_type="sint32"},
{name="weight_kg", id=11, kind='scalar', proto_type="double"},
{name="ages_by_nickname", id=13, kind='map', key={kind='scalar', proto_type="string"}, value={kind='scalar', proto_type="int32"}},
{name="nickname_by_age", id=14, kind='map', key={kind='scalar', proto_type="int32"}, value={kind='scalar', proto_type="string"}},
{name="addresses_by_label", id=15, kind='map', key={kind='scalar', proto_type="string"}, value={kind='message', message=M.Address_descriptor}},
}
pb.finalize_message(M.Person_descriptor)
-- EmmyLua / lua-language-server type annotations.
-- These are comments — no runtime effect. They give editors
-- autocomplete and type-checking for the generated wrappers.
---@alias hello.Status integer
---@class hello.Result
---@field id integer
---@field text? string
---@field code? integer
---@field details? hello.Address
---@class hello.HelloRequest
---@field name string
---@class hello.HelloReply
---@field greeting string
---@class hello.Event
---@field title string
---@field created_at google.protobuf.Timestamp
---@field duration google.protobuf.Duration
---@field ack google.protobuf.Empty
---@field retry_count google.protobuf.Int32Value
---@field note google.protobuf.StringValue
---@field is_admin google.protobuf.BoolValue
---@field payload google.protobuf.Struct
---@field attribute google.protobuf.Value
---@field tags google.protobuf.ListValue
---@field extension google.protobuf.Any
---@field update_mask google.protobuf.FieldMask
---@class hello.Address
---@field street string
---@field city string
---@field zip integer
---@field apartment? string
---@class hello.Person
---@field name string
---@field age integer
---@field emails string[]
---@field status hello.Status
---@field address hello.Address
---@field friends hello.Person[]
---@field lucky_numbers integer[]
---@field avatar string
---@field user_id integer
---@field balance integer
---@field weight_kg number
---@field ages_by_nickname table<string, integer>
---@field nickname_by_age table<integer, string>
---@field addresses_by_label table<string, hello.Address>
---@param t? hello.Result
---@return hello.Result
function M.Result_new(t) return t or {} end
---@param t hello.Result
---@return string
function M.Result_encode(t)
if type(t) ~= 'table' then
error("expected table for hello.Result, got " .. type(t), 0)
end
local out, n = {}, 0
local v
local _of_outcome
if t.text ~= nil then _of_outcome = "text" end
if t.code ~= nil then _of_outcome = "code" end
if t.details ~= nil then _of_outcome = "details" end
-- field 1: id
v = t.id
if v ~= nil and v ~= 0 then
n = n + 1; out[n] = "\x08"
n = n + 1; out[n] = wire.encode_int32(v)
end
-- field 2: text
v = t.text
if _of_outcome == "text" then
n = n + 1; out[n] = "\x12"
n = n + 1; out[n] = wire.encode_string(v)
end
-- field 3: code
v = t.code
if _of_outcome == "code" then
n = n + 1; out[n] = "\x18"
n = n + 1; out[n] = wire.encode_int32(v)
end
-- field 4: details
v = t.details
if _of_outcome == "details" then
n = n + 1; out[n] = "\x22"
n = n + 1; out[n] = wire.encode_len(M.Address_encode(v))
end
local _uf = t._unknown_fields
if _uf ~= nil and _uf ~= '' then n = n + 1; out[n] = _uf end
return table.concat(out)
end
---@param b string
---@return hello.Result
function M.Result_decode(buf)
if type(buf) ~= 'string' then
error("expected string for hello.Result decode, got " .. type(buf), 0)
end
local result = {}
local pos, len = 1, #buf
local _uf
while pos <= len do
local _tag_start = pos
local id, wt
id, wt, pos = wire.decode_tag(buf, pos)
if id == 1 then
local val
val, pos = wire.decode_int32(buf, pos)
result.id = val
elseif id == 2 then
local val
val, pos = wire.decode_string(buf, pos)
result.text = val
result.code = nil
result.details = nil
elseif id == 3 then
local val
val, pos = wire.decode_int32(buf, pos)
result.code = val
result.text = nil
result.details = nil
elseif id == 4 then
local payload
payload, pos = wire.decode_len(buf, pos)
local prev = result.details
if prev == nil then
result.details = M.Address_decode(payload)
else
pb.codec.merge_message(M.Address_descriptor, prev, M.Address_decode(payload))
end
result.text = nil
result.code = nil
else
pos = wire.skip_field(buf, pos, wt)
if _uf == nil then _uf = {} end
_uf[#_uf + 1] = buf:sub(_tag_start, pos - 1)
end
end
if _uf ~= nil then result._unknown_fields = table.concat(_uf) end
return result
end
---@param b string
---@return pb.MessageView
function M.Result_decode_lazy(b) return pb.decode_lazy(M.Result_descriptor, b) end
---@param t hello.Result
---@param opts? {single_line: boolean?, indent: string?}
---@return string
function M.Result_text(t, opts) return pb.text.encode(M.Result_descriptor, t, opts) end
---@param t? hello.HelloRequest
---@return hello.HelloRequest
function M.HelloRequest_new(t) return t or {} end
---@param t hello.HelloRequest
---@return string
function M.HelloRequest_encode(t)
if type(t) ~= 'table' then
error("expected table for hello.HelloRequest, got " .. type(t), 0)
end
local out, n = {}, 0
local v
-- field 1: name
v = t.name
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x0a"
n = n + 1; out[n] = wire.encode_string(v)
end
local _uf = t._unknown_fields
if _uf ~= nil and _uf ~= '' then n = n + 1; out[n] = _uf end
return table.concat(out)
end
---@param b string
---@return hello.HelloRequest
function M.HelloRequest_decode(buf)
if type(buf) ~= 'string' then
error("expected string for hello.HelloRequest decode, got " .. type(buf), 0)
end
local result = {}
local pos, len = 1, #buf
local _uf
while pos <= len do
local _tag_start = pos
local id, wt
id, wt, pos = wire.decode_tag(buf, pos)
if id == 1 then
local val
val, pos = wire.decode_string(buf, pos)
result.name = val
else
pos = wire.skip_field(buf, pos, wt)
if _uf == nil then _uf = {} end
_uf[#_uf + 1] = buf:sub(_tag_start, pos - 1)
end
end
if _uf ~= nil then result._unknown_fields = table.concat(_uf) end
return result
end
---@param b string
---@return pb.MessageView
function M.HelloRequest_decode_lazy(b) return pb.decode_lazy(M.HelloRequest_descriptor, b) end
---@param t hello.HelloRequest
---@param opts? {single_line: boolean?, indent: string?}
---@return string
function M.HelloRequest_text(t, opts) return pb.text.encode(M.HelloRequest_descriptor, t, opts) end
---@param t? hello.HelloReply
---@return hello.HelloReply
function M.HelloReply_new(t) return t or {} end
---@param t hello.HelloReply
---@return string
function M.HelloReply_encode(t)
if type(t) ~= 'table' then
error("expected table for hello.HelloReply, got " .. type(t), 0)
end
local out, n = {}, 0
local v
-- field 1: greeting
v = t.greeting
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x0a"
n = n + 1; out[n] = wire.encode_string(v)
end
local _uf = t._unknown_fields
if _uf ~= nil and _uf ~= '' then n = n + 1; out[n] = _uf end
return table.concat(out)
end
---@param b string
---@return hello.HelloReply
function M.HelloReply_decode(buf)
if type(buf) ~= 'string' then
error("expected string for hello.HelloReply decode, got " .. type(buf), 0)
end
local result = {}
local pos, len = 1, #buf
local _uf
while pos <= len do
local _tag_start = pos
local id, wt
id, wt, pos = wire.decode_tag(buf, pos)
if id == 1 then
local val
val, pos = wire.decode_string(buf, pos)
result.greeting = val
else
pos = wire.skip_field(buf, pos, wt)
if _uf == nil then _uf = {} end
_uf[#_uf + 1] = buf:sub(_tag_start, pos - 1)
end
end
if _uf ~= nil then result._unknown_fields = table.concat(_uf) end
return result
end
---@param b string
---@return pb.MessageView
function M.HelloReply_decode_lazy(b) return pb.decode_lazy(M.HelloReply_descriptor, b) end
---@param t hello.HelloReply
---@param opts? {single_line: boolean?, indent: string?}
---@return string
function M.HelloReply_text(t, opts) return pb.text.encode(M.HelloReply_descriptor, t, opts) end
---@param t? hello.Event
---@return hello.Event
function M.Event_new(t) return t or {} end
---@param t hello.Event
---@return string
function M.Event_encode(t)
if type(t) ~= 'table' then
error("expected table for hello.Event, got " .. type(t), 0)
end
local out, n = {}, 0
local v
-- field 1: title
v = t.title
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x0a"
n = n + 1; out[n] = wire.encode_string(v)
end
-- field 2: created_at
v = t.created_at
if v ~= nil then
n = n + 1; out[n] = "\x12"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Timestamp_encode(v))
end
-- field 3: duration
v = t.duration
if v ~= nil then
n = n + 1; out[n] = "\x1a"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Duration_encode(v))
end
-- field 4: ack
v = t.ack
if v ~= nil then
n = n + 1; out[n] = "\x22"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Empty_encode(v))
end
-- field 5: retry_count
v = t.retry_count
if v ~= nil then
n = n + 1; out[n] = "\x2a"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Int32Value_encode(v))
end
-- field 6: note
v = t.note
if v ~= nil then
n = n + 1; out[n] = "\x32"
n = n + 1; out[n] = wire.encode_len(pb.wkt.StringValue_encode(v))
end
-- field 7: is_admin
v = t.is_admin
if v ~= nil then
n = n + 1; out[n] = "\x3a"
n = n + 1; out[n] = wire.encode_len(pb.wkt.BoolValue_encode(v))
end
-- field 8: payload
v = t.payload
if v ~= nil then
n = n + 1; out[n] = "\x42"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Struct_encode(v))
end
-- field 9: attribute
v = t.attribute
if v ~= nil then
n = n + 1; out[n] = "\x4a"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Value_encode(v))
end
-- field 10: tags
v = t.tags
if v ~= nil then
n = n + 1; out[n] = "\x52"
n = n + 1; out[n] = wire.encode_len(pb.wkt.ListValue_encode(v))
end
-- field 11: extension
v = t.extension
if v ~= nil then
n = n + 1; out[n] = "\x5a"
n = n + 1; out[n] = wire.encode_len(pb.wkt.Any_encode(v))
end
-- field 12: update_mask
v = t.update_mask
if v ~= nil then
n = n + 1; out[n] = "\x62"
n = n + 1; out[n] = wire.encode_len(pb.wkt.FieldMask_encode(v))
end
local _uf = t._unknown_fields
if _uf ~= nil and _uf ~= '' then n = n + 1; out[n] = _uf end
return table.concat(out)
end
---@param b string
---@return hello.Event
function M.Event_decode(buf)
if type(buf) ~= 'string' then
error("expected string for hello.Event decode, got " .. type(buf), 0)
end
local result = {}
local pos, len = 1, #buf
local _uf
while pos <= len do
local _tag_start = pos
local id, wt
id, wt, pos = wire.decode_tag(buf, pos)
if id == 1 then
local val
val, pos = wire.decode_string(buf, pos)
result.title = val
elseif id == 2 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.created_at = pb.wkt.Timestamp_decode(payload)
elseif id == 3 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.duration = pb.wkt.Duration_decode(payload)
elseif id == 4 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.ack = pb.wkt.Empty_decode(payload)
elseif id == 5 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.retry_count = pb.wkt.Int32Value_decode(payload)
elseif id == 6 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.note = pb.wkt.StringValue_decode(payload)
elseif id == 7 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.is_admin = pb.wkt.BoolValue_decode(payload)
elseif id == 8 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.payload = pb.wkt.Struct_decode(payload)
elseif id == 9 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.attribute = pb.wkt.Value_decode(payload)
elseif id == 10 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.tags = pb.wkt.ListValue_decode(payload)
elseif id == 11 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.extension = pb.wkt.Any_decode(payload)
elseif id == 12 then
local payload
payload, pos = wire.decode_len(buf, pos)
result.update_mask = pb.wkt.FieldMask_decode(payload)
else
pos = wire.skip_field(buf, pos, wt)
if _uf == nil then _uf = {} end
_uf[#_uf + 1] = buf:sub(_tag_start, pos - 1)
end
end
if _uf ~= nil then result._unknown_fields = table.concat(_uf) end
return result
end
---@param b string
---@return pb.MessageView
function M.Event_decode_lazy(b) return pb.decode_lazy(M.Event_descriptor, b) end
---@param t hello.Event
---@param opts? {single_line: boolean?, indent: string?}
---@return string
function M.Event_text(t, opts) return pb.text.encode(M.Event_descriptor, t, opts) end
---@param t? hello.Address
---@return hello.Address
function M.Address_new(t) return t or {} end
---@param t hello.Address
---@return string
function M.Address_encode(t)
if type(t) ~= 'table' then
error("expected table for hello.Address, got " .. type(t), 0)
end
local out, n = {}, 0
local v
-- field 1: street
v = t.street
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x0a"
n = n + 1; out[n] = wire.encode_string(v)
end
-- field 2: city
v = t.city
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x12"
n = n + 1; out[n] = wire.encode_string(v)
end
-- field 3: zip
v = t.zip
if v ~= nil and v ~= 0 then
n = n + 1; out[n] = "\x18"
n = n + 1; out[n] = wire.encode_int32(v)
end
-- field 4: apartment
v = t.apartment
if v ~= nil then
n = n + 1; out[n] = "\x22"
n = n + 1; out[n] = wire.encode_string(v)
end
local _uf = t._unknown_fields
if _uf ~= nil and _uf ~= '' then n = n + 1; out[n] = _uf end
return table.concat(out)
end
---@param b string
---@return hello.Address
function M.Address_decode(buf)
if type(buf) ~= 'string' then
error("expected string for hello.Address decode, got " .. type(buf), 0)
end
local result = {}
local pos, len = 1, #buf
local _uf
while pos <= len do
local _tag_start = pos
local id, wt
id, wt, pos = wire.decode_tag(buf, pos)
if id == 1 then
local val
val, pos = wire.decode_string(buf, pos)
result.street = val
elseif id == 2 then
local val
val, pos = wire.decode_string(buf, pos)
result.city = val
elseif id == 3 then
local val
val, pos = wire.decode_int32(buf, pos)
result.zip = val
elseif id == 4 then
local val
val, pos = wire.decode_string(buf, pos)
result.apartment = val
else
pos = wire.skip_field(buf, pos, wt)
if _uf == nil then _uf = {} end
_uf[#_uf + 1] = buf:sub(_tag_start, pos - 1)
end
end
if _uf ~= nil then result._unknown_fields = table.concat(_uf) end
return result
end
---@param b string
---@return pb.MessageView
function M.Address_decode_lazy(b) return pb.decode_lazy(M.Address_descriptor, b) end
---@param t hello.Address
---@param opts? {single_line: boolean?, indent: string?}
---@return string
function M.Address_text(t, opts) return pb.text.encode(M.Address_descriptor, t, opts) end
---@param t hello.Address
---@return boolean
function M.Address_has_apartment(t) return t.apartment ~= nil end
---@param t hello.Address
function M.Address_clear_apartment(t) t.apartment = nil end
---@param t? hello.Person
---@return hello.Person
function M.Person_new(t) return t or {} end
---@param t hello.Person
---@return string
function M.Person_encode(t)
if type(t) ~= 'table' then
error("expected table for hello.Person, got " .. type(t), 0)
end
local out, n = {}, 0
local v
-- field 1: name
v = t.name
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x0a"
n = n + 1; out[n] = wire.encode_string(v)
end
-- field 2: age
v = t.age
if v ~= nil and v ~= 0 then
n = n + 1; out[n] = "\x10"
n = n + 1; out[n] = wire.encode_int32(v)
end
-- field 3: emails
v = t.emails
if v ~= nil and #v > 0 then
local _tag = "\x1a"
for _i = 1, #v do
n = n + 1; out[n] = _tag
n = n + 1; out[n] = wire.encode_string(v[_i])
end
end
-- field 4: status
v = t.status
if v ~= nil then
local nv = v
if type(v) == 'string' then
nv = M.Status[v]
if nv == nil then error("unknown enum value '" .. v .. "' for hello.Status", 0) end
end
if nv ~= 0 then
n = n + 1; out[n] = "\x20"
n = n + 1; out[n] = wire.encode_int32(nv)
end
end
-- field 5: address
v = t.address
if v ~= nil then
n = n + 1; out[n] = "\x2a"
n = n + 1; out[n] = wire.encode_len(M.Address_encode(v))
end
-- field 6: friends
v = t.friends
if v ~= nil and #v > 0 then
local _tag = "\x32"
for _i = 1, #v do
n = n + 1; out[n] = _tag
n = n + 1; out[n] = wire.encode_len(M.Person_encode(v[_i]))
end
end
-- field 7: lucky_numbers
v = t.lucky_numbers
if v ~= nil and #v > 0 then
local parts, m = {}, 0
for _i = 1, #v do
m = m + 1; parts[m] = wire.encode_int32(v[_i])
end
n = n + 1; out[n] = "\x3a"
n = n + 1; out[n] = wire.encode_len(table.concat(parts))
end
-- field 8: avatar
v = t.avatar
if v ~= nil and v ~= '' then
n = n + 1; out[n] = "\x42"
n = n + 1; out[n] = wire.encode_bytes(v)
end
-- field 9: user_id
v = t.user_id
if v ~= nil and v ~= 0 then
n = n + 1; out[n] = "\x49"
n = n + 1; out[n] = wire.encode_fixed64(v)
end
-- field 10: balance
v = t.balance
if v ~= nil and v ~= 0 then
n = n + 1; out[n] = "\x50"
n = n + 1; out[n] = wire.encode_sint32(v)
end
-- field 11: weight_kg
v = t.weight_kg
if v ~= nil and v ~= 0 then
n = n + 1; out[n] = "\x59"
n = n + 1; out[n] = wire.encode_double(v)
end
-- field 13: ages_by_nickname
v = t.ages_by_nickname
if v ~= nil and next(v) ~= nil then
local _tag, _ktag, _vtag = "\x6a", "\x0a", "\x10"
for _k, _val in pairs(v) do
local entry, _m = {}, 0
if _k ~= '' then
_m = _m + 1; entry[_m] = _ktag
_m = _m + 1; entry[_m] = wire.encode_string(_k)
end
if _val ~= 0 then
_m = _m + 1; entry[_m] = _vtag
_m = _m + 1; entry[_m] = wire.encode_int32(_val)
end
n = n + 1; out[n] = _tag
n = n + 1; out[n] = wire.encode_len(table.concat(entry))
end
end
-- field 14: nickname_by_age
v = t.nickname_by_age
if v ~= nil and next(v) ~= nil then
local _tag, _ktag, _vtag = "\x72", "\x08", "\x12"
for _k, _val in pairs(v) do
local entry, _m = {}, 0
if _k ~= 0 then
_m = _m + 1; entry[_m] = _ktag
_m = _m + 1; entry[_m] = wire.encode_int32(_k)
end
if _val ~= '' then
_m = _m + 1; entry[_m] = _vtag
_m = _m + 1; entry[_m] = wire.encode_string(_val)
end
n = n + 1; out[n] = _tag
n = n + 1; out[n] = wire.encode_len(table.concat(entry))
end
end
-- field 15: addresses_by_label
v = t.addresses_by_label
if v ~= nil and next(v) ~= nil then
local _tag, _ktag, _vtag = "\x7a", "\x0a", "\x12"
for _k, _val in pairs(v) do
local entry, _m = {}, 0
if _k ~= '' then
_m = _m + 1; entry[_m] = _ktag
_m = _m + 1; entry[_m] = wire.encode_string(_k)
end
if _val ~= nil then
_m = _m + 1; entry[_m] = _vtag
_m = _m + 1; entry[_m] = wire.encode_len(M.Address_encode(_val))
end
n = n + 1; out[n] = _tag
n = n + 1; out[n] = wire.encode_len(table.concat(entry))
end
end
local _uf = t._unknown_fields
if _uf ~= nil and _uf ~= '' then n = n + 1; out[n] = _uf end
return table.concat(out)
end
---@param b string
---@return hello.Person
function M.Person_decode(buf)
if type(buf) ~= 'string' then
error("expected string for hello.Person decode, got " .. type(buf), 0)
end
local result = {}
local pos, len = 1, #buf
local _uf
while pos <= len do
local _tag_start = pos
local id, wt
id, wt, pos = wire.decode_tag(buf, pos)
if id == 1 then
local val
val, pos = wire.decode_string(buf, pos)
result.name = val
elseif id == 2 then
local val
val, pos = wire.decode_int32(buf, pos)
result.age = val
elseif id == 3 then
local list = result.emails
if list == nil then list = {}; result.emails = list end
local val
val, pos = wire.decode_string(buf, pos)
list[#list + 1] = val
elseif id == 4 then
local u
u, pos = wire.decode_varint(buf, pos)
result.status = wire.varint_to_int32(u)
elseif id == 5 then
local payload
payload, pos = wire.decode_len(buf, pos)
local prev = result.address
if prev == nil then
result.address = M.Address_decode(payload)
else
pb.codec.merge_message(M.Address_descriptor, prev, M.Address_decode(payload))
end
elseif id == 6 then
local list = result.friends
if list == nil then list = {}; result.friends = list end
local payload
payload, pos = wire.decode_len(buf, pos)
list[#list + 1] = M.Person_decode(payload)
elseif id == 7 then
local list = result.lucky_numbers
if list == nil then list = {}; result.lucky_numbers = list end
if wt == 2 then
local payload
payload, pos = wire.decode_len(buf, pos)
local p2, lim = 1, #payload
while p2 <= lim do
local val
val, p2 = wire.decode_int32(payload, p2)
list[#list + 1] = val
end
else
local val
val, pos = wire.decode_int32(buf, pos)
list[#list + 1] = val
end
elseif id == 8 then
local val
val, pos = wire.decode_bytes(buf, pos)
result.avatar = val
elseif id == 9 then
local val
val, pos = wire.decode_fixed64(buf, pos)
result.user_id = val
elseif id == 10 then
local val
val, pos = wire.decode_sint32(buf, pos)
result.balance = val
elseif id == 11 then
local val
val, pos = wire.decode_double(buf, pos)
result.weight_kg = val
elseif id == 13 then
local map = result.ages_by_nickname
if map == nil then map = {}; result.ages_by_nickname = map end
local payload
payload, pos = wire.decode_len(buf, pos)
local _ep, _elim = 1, #payload
local _key, _val = '', 0
while _ep <= _elim do
local eid, ewt
eid, ewt, _ep = wire.decode_tag(payload, _ep)
if eid == 1 then
_key, _ep = wire.decode_string(payload, _ep)
elseif eid == 2 then
_val, _ep = wire.decode_int32(payload, _ep)
else
_ep = wire.skip_field(payload, _ep, ewt)
end
end
map[_key] = _val
elseif id == 14 then
local map = result.nickname_by_age
if map == nil then map = {}; result.nickname_by_age = map end
local payload
payload, pos = wire.decode_len(buf, pos)
local _ep, _elim = 1, #payload
local _key, _val = 0, ''
while _ep <= _elim do
local eid, ewt
eid, ewt, _ep = wire.decode_tag(payload, _ep)
if eid == 1 then
_key, _ep = wire.decode_int32(payload, _ep)
elseif eid == 2 then
_val, _ep = wire.decode_string(payload, _ep)
else
_ep = wire.skip_field(payload, _ep, ewt)
end
end
map[_key] = _val
elseif id == 15 then
local map = result.addresses_by_label
if map == nil then map = {}; result.addresses_by_label = map end
local payload
payload, pos = wire.decode_len(buf, pos)
local _ep, _elim = 1, #payload
local _key, _val = '', {}
while _ep <= _elim do
local eid, ewt
eid, ewt, _ep = wire.decode_tag(payload, _ep)
if eid == 1 then
_key, _ep = wire.decode_string(payload, _ep)
elseif eid == 2 then
local _payload
_payload, _ep = wire.decode_len(payload, _ep)
_val = M.Address_decode(_payload)
else
_ep = wire.skip_field(payload, _ep, ewt)
end
end
map[_key] = _val
else
pos = wire.skip_field(buf, pos, wt)
if _uf == nil then _uf = {} end
_uf[#_uf + 1] = buf:sub(_tag_start, pos - 1)
end
end
if _uf ~= nil then result._unknown_fields = table.concat(_uf) end
return result
end
---@param b string
---@return pb.MessageView
function M.Person_decode_lazy(b) return pb.decode_lazy(M.Person_descriptor, b) end
---@param t hello.Person
---@param opts? {single_line: boolean?, indent: string?}
---@return string
function M.Person_text(t, opts) return pb.text.encode(M.Person_descriptor, t, opts) end
-- Service: hello.Greeter
M.Greeter_service = {
name = "hello.Greeter",
full_name = "/hello.Greeter",
methods = {
SayHello = {
name = "SayHello",
full_name = "/hello.Greeter/SayHello",
input = M.HelloRequest_descriptor,
output = M.HelloReply_descriptor,
},
Echo = {
name = "Echo",
full_name = "/hello.Greeter/Echo",
input = M.HelloRequest_descriptor,
output = M.HelloRequest_descriptor,
},
StreamHellos = {
name = "StreamHellos",
full_name = "/hello.Greeter/StreamHellos",
input = M.HelloRequest_descriptor,
output = M.HelloReply_descriptor,
server_streaming = true,
},
CollectHellos = {
name = "CollectHellos",
full_name = "/hello.Greeter/CollectHellos",
input = M.HelloRequest_descriptor,
output = M.HelloReply_descriptor,
client_streaming = true,
},
Chat = {
name = "Chat",
full_name = "/hello.Greeter/Chat",
input = M.HelloRequest_descriptor,
output = M.HelloReply_descriptor,
client_streaming = true,
server_streaming = true,
},
},
}
function M.Greeter_client(transport)
if transport == nil then error("Greeter_client: transport is required", 0) end
return {
SayHello = function(req, ctx)
local req_bytes = M.HelloRequest_encode(req)
local resp_bytes = transport:unary("/hello.Greeter/SayHello", req_bytes, ctx)
return M.HelloReply_decode(resp_bytes)
end,
Echo = function(req, ctx)
local req_bytes = M.HelloRequest_encode(req)
local resp_bytes = transport:unary("/hello.Greeter/Echo", req_bytes, ctx)
return M.HelloRequest_decode(resp_bytes)
end,
StreamHellos = function(req, ctx)
local req_bytes = M.HelloRequest_encode(req)
local raw = transport:server_stream("/hello.Greeter/StreamHellos", req_bytes, ctx)
return pb.grpc.wrap_server_stream(raw, M.HelloReply_decode)
end,
CollectHellos = function(ctx)
local raw = transport:client_stream("/hello.Greeter/CollectHellos", ctx)
return pb.grpc.wrap_call(raw, M.HelloRequest_encode, M.HelloReply_decode)
end,
Chat = function(ctx)
local raw = transport:bidi("/hello.Greeter/Chat", ctx)
return pb.grpc.wrap_call(raw, M.HelloRequest_encode, M.HelloReply_decode)
end,
}
end
function M.Greeter_server(impl)
if type(impl) ~= 'table' then error("Greeter_server: impl table is required", 0) end
return {
service = M.Greeter_service,
methods = {
["/hello.Greeter/SayHello"] = function(req_bytes, ctx)
local handler = impl.SayHello
if handler == nil then error("Greeter.SayHello: handler missing", 0) end
local req = M.HelloRequest_decode(req_bytes)
local resp = handler(req, ctx)
return M.HelloReply_encode(resp)
end,
["/hello.Greeter/Echo"] = function(req_bytes, ctx)
local handler = impl.Echo
if handler == nil then error("Greeter.Echo: handler missing", 0) end
local req = M.HelloRequest_decode(req_bytes)
local resp = handler(req, ctx)
return M.HelloRequest_encode(resp)
end,
},
streams = {
["/hello.Greeter/StreamHellos"] = {
kind = 'server_stream',
handler = function(req_bytes, server_view, ctx)
local handler = impl.StreamHellos
if handler == nil then error("Greeter.StreamHellos: handler missing", 0) end
local req = M.HelloRequest_decode(req_bytes)
local wrapped = pb.grpc.wrap_server_view(server_view, nil, M.HelloReply_encode)
handler(req, wrapped, ctx)
end,
},
["/hello.Greeter/CollectHellos"] = {
kind = 'client_stream',
handler = function(_, server_view, ctx)
local handler = impl.CollectHellos
if handler == nil then error("Greeter.CollectHellos: handler missing", 0) end
local wrapped = pb.grpc.wrap_server_view(server_view, M.HelloRequest_decode, nil)
local resp = handler(wrapped, ctx)
if resp == nil then error("Greeter.CollectHellos: handler returned nil response", 0) end
server_view:send(M.HelloReply_encode(resp))
end,
},
["/hello.Greeter/Chat"] = {
kind = 'bidi',
handler = function(_, server_view, ctx)
local handler = impl.Chat
if handler == nil then error("Greeter.Chat: handler missing", 0) end
local wrapped = pb.grpc.wrap_server_view(server_view, M.HelloRequest_decode, M.HelloReply_encode)
handler(wrapped, ctx)
end,
},
},
}
end
return M