代码拉取完成,页面将自动刷新
同步操作将从 Plato/rpc-repo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import json
import sys
import os
def json_has_attr(json_obj, attr_name):
if json_obj is None:
return False
if attr_name is None:
return False
return (attr_name in json_obj) and (json_obj[attr_name] is not None)
class FileGenerator:
def __init__(self, file_name, pb_json = None, base_package=""):
self.file_name = file_name
self.file_name_split = file_name.split(".")
self.pb_json = pb_json
self.base_package = base_package
self.gen_struct_pb_file()
def gen_struct_pb_file(self):
file = open(self.file_name_split[0] + ".message.proto", "w")
package_name = self.base_package + '.' + self.file_name_split[0];
file.write("// Machine generated code\n\n")
file.write('syntax = "proto3";\n\n')
file.write("package " + package_name + ";\n\n")
file.write('option java_package="'+package_name+'";\n\n')
self.gen_enum_pb_file(file)
if json_has_attr(self.pb_json, "structs"):
for struct in self.pb_json["structs"]:
file.write("message " + struct["name"] + " {\n")
n = 1
if json_has_attr(struct, "fields"):
for field in struct["fields"]:
if field["IdlType"] == "dict":
file.write(" " + field["type"] + "<" + field["key"]["type"] + "," + field["value"]["type"] + "> " + field["name"] + " = " + str(n) + ";\n")
elif field["IdlType"] == "seq" or field["IdlType"] == "set":
file.write(" " + field["type"] + " " + field["key"]["type"] + " " + field["name"] + " = " + str(n) + ";\n")
else:
file.write(" " + field["type"] + " " + field["name"] + " = " + str(n) + ";\n")
n += 1
file.write("}\n\n")
self.gen_method_pb_file(file)
self.gen_method_ret_pb(file)
file.close()
def gen_method_ret_pb(self, file):
for service in self.pb_json["services"]:
for method in service["methods"]:
file.write("message " + service["name"] + "_" + method["name"] + "_ret {\n")
if method["retType"]["IdlType"] == "dict":
file.write(" " + method["retType"]["type"] + "<" + method["retType"]["key"]["type"] + "," + method["retType"]["value"]["type"] + "> " + " ret1 = 1;\n")
elif method["retType"]["IdlType"] == "seq" or method["retType"]["IdlType"] == "set":
file.write(" " + method["retType"]["type"] + " " + method["retType"]["key"]["type"] + " ret1 = 1;\n")
elif method["retType"]["IdlType"] == "void":
pass
else:
file.write(" " + method["retType"]["type"] + " ret1 = 1;\n")
file.write("}\n\n")
def gen_enum_pb_file(self, file):
if not json_has_attr(self.pb_json, "enums"):
return
for enum in self.pb_json["enums"]:
file.write('enum {ename} {{\n default_{ename}=0;\n'.format(ename=enum["name"]));
if "fields" in enum:
for filed in enum["fields"]:
file.write(' {fname}={fvalue};\n'.format(fname=filed["name"], fvalue=filed["value"]))
file.write('}\n\n')
def gen_method_pb_file(self, file):
for service in self.pb_json["services"]:
for method in service["methods"]:
file.write("message " + service["name"] + "_" + method["name"] + "_args {\n")
n = 1
for arg in method["arguments"]:
if arg["IdlType"] == "dict":
file.write(" " + arg["type"] + "<" + arg["key"]["type"] + "," + arg["value"]["type"] + ">")
elif arg["IdlType"] == "seq" or arg["IdlType"] == "set":
file.write(" " + arg["type"] + " " + arg["key"]["type"])
elif arg["IdlType"] == "void":
continue
else:
file.write(" " + arg["type"])
file.write(" arg" + str(n) + " = " + str(n) + ";\n")
n += 1
file.write("}\n\n")
if __name__ == "__main__":
pbjson = json.load(open(sys.argv[1]))
FileGenerator(sys.argv[1], pbjson, sys.argv[2])
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。