前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust 中使用protouf序列化、反序列化

Rust 中使用protouf序列化、反序列化

原创
作者头像
8菠萝
发布2022-06-12 22:25:05
1.8K0
发布2022-06-12 22:25:05
举报
文章被收录于专栏:菠萝上市没有菠萝上市没有

目的

在Rust中读取其他系统(C++)生产的Protouf格式的数据文件。

  1. rust 1.58
  2. tonic
  3. prost

Cargo.toml

代码语言:txt
复制
[dependencies]
tonic = "0.7.2"
prost = "0.10"
[build-dependencies]
tonic-build = {version="0.7.2", features=["prost", "compression"]}

project tree

代码语言:txt
复制
├── Cargo.lock
├── Cargo.toml
├── build.rs
├── proto
│   ├── dsystemtopo.proto
│   └── test.proto
├── src
│   └── main.rs
├── system.bin
└── target
    ├── CACHEDIR.TAG
    └── debug

build.rs 用于编译Protobuf文件

代码语言:txt
复制
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 测试

代码语言:txt
复制
  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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目的
  • Cargo.toml
  • project tree
  • build.rs 用于编译Protobuf文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档