80 lines
2.4 KiB
Lua
80 lines
2.4 KiB
Lua
--
|
|
--------------------------------------------------------------------------------
|
|
-- FILE: text_format.lua
|
|
-- DESCRIPTION: protoc-gen-lua
|
|
-- Google's Protocol Buffers project, ported to lua.
|
|
-- https://code.google.com/p/protoc-gen-lua/
|
|
--
|
|
-- Copyright (c) 2010 , 林卓毅 (Zhuoyi Lin) netsnail@gmail.com
|
|
-- All rights reserved.
|
|
--
|
|
-- Use, modification and distribution are subject to the "New BSD License"
|
|
-- as listed at <url: http://www.opensource.org/licenses/bsd-license.php >.
|
|
-- COMPANY: NetEase
|
|
-- CREATED: 2010年08月05日 15时14分13秒 CST
|
|
--------------------------------------------------------------------------------
|
|
--
|
|
local string = string
|
|
local math = math
|
|
local print = print
|
|
local getmetatable = getmetatable
|
|
local table = table
|
|
local ipairs = ipairs
|
|
local tostring = tostring
|
|
|
|
local descriptor = require "protobuf.descriptor"
|
|
|
|
module "protobuf.text_format"
|
|
|
|
function format(buffer)
|
|
local len = string.len( buffer )
|
|
for i = 1, len, 16 do
|
|
local text = ""
|
|
for j = i, math.min( i + 16 - 1, len ) do
|
|
text = string.format( "%s %02x", text, string.byte( buffer, j ) )
|
|
end
|
|
print( text )
|
|
end
|
|
end
|
|
|
|
local FieldDescriptor = descriptor.FieldDescriptor
|
|
|
|
msg_format_indent = function(write, msg, indent)
|
|
for field, value in msg:ListFields() do
|
|
local print_field = function(field_value)
|
|
local name = field.name
|
|
write(string.rep(" ", indent))
|
|
if field.type == FieldDescriptor.TYPE_MESSAGE then
|
|
local extensions = getmetatable(msg)._extensions_by_name
|
|
if extensions[field.full_name] then
|
|
write("[" .. name .. "] {\n")
|
|
else
|
|
write(name .. " {\n")
|
|
end
|
|
msg_format_indent(write, field_value, indent + 4)
|
|
write(string.rep(" ", indent))
|
|
write("}\n")
|
|
else
|
|
write(string.format("%s: %s\n", name, tostring(field_value)))
|
|
end
|
|
end
|
|
if field.label == FieldDescriptor.LABEL_REPEATED then
|
|
for _, k in ipairs(value) do
|
|
print_field(k)
|
|
end
|
|
else
|
|
print_field(value)
|
|
end
|
|
end
|
|
end
|
|
|
|
function msg_format(msg)
|
|
local out = {}
|
|
local write = function(value)
|
|
out[#out + 1] = value
|
|
end
|
|
msg_format_indent(write, msg, 0)
|
|
return table.concat(out)
|
|
end
|
|
|