Convert .proto file to header-only RapidJSON based c++ code
Project description
Proto2RapidJSON
简介
本工具旨在利用proto文件生成基于RapidJSON的JSON文件解析与序列化的C++工具。
- 本工具只会支持最基本的类proto语法,但保证其强类型属性;
- 本工具生成的C++代码只依赖RapidJSON与C++11 STL;
- 本工具支持//注释。
本工具使用MIT协议。
基本格式
package test;
message B {
bool isok;
}
message A {
double x;
int32 y;
repeated B b;
}
对应的JSON文件(message A对应的)为
{
"x": 1.24,
"y": 123,
"b": [
{
"isok": true
},
{
"isok": false
}
]
}
注:暂不允许可选属性,但允许额外的属性(不会被解析)。
生成的C++文件应该包含结构体与接口如下
struct B {
bool isok;
B& FromString(const char* str);
B& FromValue(const rapidjson::Value& v);
std::string ToString(int maxDecimalPlaces = 6);
std::string ToPrettyString(int maxDecimalPlaces = 6);
rapidjson::Value ToValue(rapidjson::Document::AllocatorType& allocator, bool copy = false);
}
struct A {
double x;
int y;
std::vector<B> b;
A& FromString(const char* str);
A& FromValue(const rapidjson::Value& v);
std::string ToString(int maxDecimalPlaces = 6);
std::string ToPrettyString(int maxDecimalPlaces = 6);
rapidjson::Value ToValue(rapidjson::Document::AllocatorType& allocator, bool copy = false);
}
功能如下:
函数签名 | 功能 |
---|---|
A& FromString(const char* str); |
从JSON格式字符串str 解析数据,写入结构体 |
A& FromValue(const rapidjson::Value& v); |
从rapidjson::Value 中获取数据,写入结构体 |
std::string ToString(int maxDecimalPlaces = 6); |
将结构体中数据序列化为字符串(紧凑),浮点数小数部分长度为maxDecimalPlaces |
std::string ToPrettyString(int maxDecimalPlaces = 6); |
将结构体中数据序列化为字符串(适合阅读),浮点数小数部分长度为maxDecimalPlaces |
rapidjson::Value ToValue(rapidjson::Document::AllocatorType& allocator, bool copy = false); |
将结构体中数据转化为rapidjson::Value ,对于array<string> ,copy 用于控制是否采用copy-string 策略(默认为const-string 策略)注:这里可能有未发现的潜在问题 |
保留字
message, package, {}, ;, repeated, double, int32, int64, uint32, uint64, float, bool, string, //
语法
Program -> Package Message*
Package -> "package" id ";"
Message -> "message" id "{" Element* "}"
Element -> Type id ("=" num) ";" | "repeated" Type id ("=" num) ;"
Type -> id | "double" | "float" | "int32" | "uint32" | "int64" | "uint64" | "bool" | "string"
注1:("=" num)
仅用于兼容proto
文件格式,不起任何作用
注2:id
允许包含数字与下划线,且不允许数字开头
安装
pip install proto2rapidjson
使用
在完成安装pip install .
后,可以使用如下指令执行:
python -m proto2rapidjson -i <INPUT> -o <OUTPUT>
计划
- 添加序列化的模板
- 编写CLI,生成二进制文件并支持
pip install .
- 完善测试与代码覆盖率测试
- 禁止相同id
- 允许在package处使用A.B.C生成C++中A::B::C的namespace
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
proto2rapidjson-1.1.3.tar.gz
(10.2 kB
view details)
Built Distribution
File details
Details for the file proto2rapidjson-1.1.3.tar.gz
.
File metadata
- Download URL: proto2rapidjson-1.1.3.tar.gz
- Upload date:
- Size: 10.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e92f8fc0e0f416f9333644497b0d0c23b3c145266b403fc3f509b2cd739570bc |
|
MD5 | d1c871f5a2ff61b989887051601e359d |
|
BLAKE2b-256 | 8790d889123d5fe6e17a6d52cf4d9e21a0ad051d6ec2ac0c33d0464f87d20c2b |
File details
Details for the file proto2rapidjson-1.1.3-py3-none-any.whl
.
File metadata
- Download URL: proto2rapidjson-1.1.3-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.8.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b0388f2814f8c80413be8a712f203520c4b14dfbbe6f458c2e481b31613020d |
|
MD5 | 5632fb1053aeef4ac09be73bca2cc628 |
|
BLAKE2b-256 | 8c65c17970a19836b48675c479e4bed4cce268e04030730a909a1c6fb2f44ea6 |