在Rust中读取其他系统(C++)生产的Protouf格式的数据文件。
[dependencies]
tonic = "0.7.2"
prost = "0.10"
[build-dependencies]
tonic-build = {version="0.7.2", features=["prost", "compression"]}
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── proto
│ ├── dsystemtopo.proto
│ └── test.proto
├── src
│ └── main.rs
├── system.bin
└── target
├── CACHEDIR.TAG
└── debug
extern crate tonic_build;
fn main() {
tonic_build::configure()
.compile(
&["/root/test-tonic/proto/test.proto"],
&["/root/test-tonic/proto"],
)
.unwrap();
tonic_build::configure()
.compile(
&["/root/test-tonic/proto/dsystemtopo.proto"],
&["/root/test-tonic/proto"],
)
.unwrap();
}
main.rs 测试
extern crate prost;
use std::io::Read;
pub mod test {
tonic::include_proto!("test2");
}
pub mod model {
tonic::include_proto!("zdpower");
}
use prost::Message;
use model::PCalcSystem;
use model::*;
fn main() {
// 读取C++ Protobuf格式二进制数据
let mut stream = std::fs::OpenOptions::new()
.read(true)
.open("system.bin")
.expect("read fail.");
let mut data: Vec<u8> = Vec::new();
stream.read_to_end(&mut data);
// 解码
let psystem: PCalcSystem = Message::decode(&*data).expect("decode fail!");
println!("nodes:{}", psystem.system_nodes.len());
// 编码
let mut encode_data: Vec<u8> = Vec::new();
psystem.encode(&mut encode_data);
println!("encode_size:{}", encode_data.len());
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。