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