# idl2lang **Repository Path**: zy704599894/idl2lang ## Basic Information - **Project Name**: idl2lang - **Description**: idl2lang工具,输入json,读取对应的模板,输出出对应的文件 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2023-07-20 - **Last Updated**: 2023-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # idl2lang ## 介绍 idl2lang工具,输入json,读取对应的模板,输出出对应的文件 ## 使用说明 **命令行查看** : idl2lang help ```shell NAME: idl2lang - Plato 协议生成工具 USAGE: _____ _ _ ___ _ |_ _| | | |__ \| | | | __| | | ) | | __ _ _ __ __ _ | | / _· | | / /| |/ _· | ·_ \ / _· | _| || (_| | |/ /_| | (_| | | | | (_| | |_____\__,_|_|____|_|\__,_|_| |_|\__, | __/ | |___/ COMMANDS: help, h idl2lang helper code, c 生成rpc框架代码相关代码,参数[template1,template2] data, d 生成rpc数据层struct代码,参数[template1,template2] enum, e 生成rpc数据层enum代码,参数[template1,template2] sdk, 生成sdk版本代码模板 --proxy 模式不生成服务 pubgo, 生成pubgo 模板代码生成 GLOBAL OPTIONS: --source value, -s value 读取frontend生成的json,解析代码生成信息 --out value, -o value 设置输出目录 --limit value, -l value 限制只生成某种服务 --proxy, -p 是否生成proxy模式 (default: false) --file value, -f value 输出文件名字 ``` ## 命令说明 > 输入顺序, 先option 后 command idl2lang -s sdk ### 公共参数 - s json源文件, idlname.idl.lang.json 文件 - o 输出目录,不同命令会有不同的子文件夹创建 - proxy 是否以proxy 模式生成 - file 输出文件命名前缀,如果没有会使用服务名+temple名字 ### code command > 生成rpc 框架代码,例如proxy stub 等 - out 会输出为 一个服务一个新文件夹 - 传入的数据结构为 | 名字 | 类型 | 描述 | | --------- | ------------ | ------------------------------ | | Name | string | 服务名字 | | Service | *ServiceNode | 解析出来的服务节点 | | HasStruct | bool | 是否有公共文件结构体 | | Idlname | string | idl 包名字用于管理公共的结构体 | ### data&enum command > 生成data数据结构相关代码, - out 不会创建子文件夹 | 名字 | 类型 | 描述 | | ------- | ----------- | ------------------------------ | | Struct | *StructNode | 结构体信息 data 命令时候才赋值 | | Enum | *EnumNode | 枚举信息,enum 命令时候才赋值 | | Idlname | string | idl名字 | ## 公共数据结构 ### ComplexNode > set dict 这种复合结构的key value 信息 | 名字 | 类型 | 描述 | | -------- | ------ | ------------------------- | | IdlType | string | idl中的类型,如i32 | | Type | string | 对应语言中的类型, 如int32 | | IsStruct | bool | 是否是结构体 | ### ArgNode > 方法参数结构 | 名字 | 类型 | 描述 | | -------- | ------------ | ------------------------------------- | | IdlType | string | idl中的类型,如i32 | | Type | string | 对应语言中的类型, 如int32 | | IsStruct | bool | 是否是结构体 | | IsEnum | bool | 是否为枚举 | | DeclName | string | 自定义的名字 | | Index | uint32 | 参数序号 | | Key | *ComplexNode | key 如果是dic 或者 set 或 seq 的key | | Value | *ComplexNode | value 如果是dic 或者 set 或 seq 的key | ### FieldNode > 结构体字段描述结构 | 名字 | 类型 | 描述 | | -------- | ------------ | ------------------------------------- | | IdlType | string | idl中的类型,如i32 | | Type | string | 对应语言中的类型, 如int32 | | IsStruct | bool | 是否是结构体 | | IsEnum | bool | 是否为枚举 | | Name | string | 字段名字 | | Index | uint32 | 字段序号 | | Key | *ComplexNode | key 如果是dic 或者 set 或 seq 的key | | Value | *ComplexNode | value 如果是dic 或者 set 或 seq 的key | ### MethodNode > 方法描述结构体 | 名字 | 类型 | 描述 | | --------- | ---------- | --------------------- | | Arguments | []*ArgNode | 参数数组 | | Oneway | bool | idl中是否被oneway修饰 | | RetType | *ArgNode | 返回值类型 | | Noexcept | bool | 是否被noexcept修饰 | | Name | string | 方法名字 | | Event | bool | 是否为事件 | | Index | uint32 | 方法序号 | | Retry | uint32 | 重试次数 | | TimeOut | uint32 | 超时时间 单位毫秒 | ### ServiceNode > 服务节点结构体描述 | 名字 | 类型 | 描述 | | -------- | ------------- | ------------------------- | | LoadType | string | 加载类型dynamic or static | | MaxInst | uint32 | 最大服务实例数量 | | Methods | []*MethodNode | 方法集合 | | Name | string | 服务名 | | Type | string | 服务类型single, reentrant, multiple | | Uuid | string | 服务uuid | ### EnumFieldNode > 枚举字段描述结构 | 名字 | 类型 | 描述 | | ----- | ------ | :----------: | | Name | string | 枚举字段名字 | | Value | int32 | 枚举字段值 | ### EnumNode > 枚举相关的json结构 | 名字 | 类型 | 描述 | | ------ | ---------------- | :----------: | | Name | string | 枚举名字 | | Fields | []*EnumFieldNode | 枚举字段集合 | ### StructNode > 结构体描述结构 | 名字 | 类型 | 描述 | | ------ | ---------------- | :------------: | | Name | string | 结构体名字 | | Fields | []*FieldNode | 结构体字段集合 |