在rust使用protobuf

2020-12-14  本文已影响0人  guonaihong

前言

最近打算熟悉下rust,先使用tcp stream+protobuf写个简单的TLV服务。发现rust处理生成代码的方式和go还有点不一样。比较符合rust的做法是写个build.rs脚本。

protobuf 配置

protobuf 是google开发的协议序列化,反序列化器,具备很高的性能。在内网的rpc通信中比较流行。message 定义数据结构用的,rfc定义应用层的数据包使用message术语,所以protobuf取名还是挺讲究的。

syntax = "proto3";

message HotWordRequest {
    string hot_word_text=1;
    string session_id = 2;
}

message HotWordResponse {
    int64 errcode = 1;
    string errmsg = 2;
    string session_id = 3;
    bytes hot_word_model=4;
}

build.rs内容

fn main() {
    protobuf_codegen_pure::Codegen::new()
        .out_dir("src/protos")
        .inputs(&["protos/small-model.proto"])
        .include("protos")
        .run()
        .expect("Codegen failed.");
}

依赖配置

rust 里面使用toml格式配置依赖,toml是一种很基础和广泛使用的配置文件格式,toml格式比较简单,一个比较基础的解析器用c可能40行可以实现。比较好奇的是为什么不使用yaml?唯一能想到的是,可能是想大家的依赖配置玩的不要那么花哨。

[build-dependencies]
protobuf-codegen-pure = "2.14"

运行命令

cargo build运行如果没有报错就大功告成。

cargo build

最后的目录结构

.
├── build.rs
├── Cargo.toml
├── protos
│   └── small-model.proto
└── src
    ├── main.rs
    └── protos
        └── small_model.rs
上一篇下一篇

猜你喜欢

热点阅读