Prost 是一个用于序列化和反序列化 Google Protocol Buffers 协议的 Rust 库,支持消息嵌套、默认值、枚举类型等。
简介
建议同时使用 build.rs 和 prost build 自动生成文件。
$ cargo add --build prost-build
$ cargo add prost
编译过程依赖 protoc 命令,可通过如下方式安装。
----- Debain 系统
# apt-get -y install protobuf-compiler
然后编辑 build.rs 文件,如下。
use std::io::Result;
fn main() -> Result<()> {
prost_build::compile_protos(&["src/foobar.proto"], &["src/"])?;
Ok(())
}
其中 compile_protos() 两个入参分别为协议文件和输出目录,如果让生成代码支持 serde::Serialize 实现,可以在编译配置中添加 type_attribute 即可。
use std::io::Result;
fn main() -> Result<()> {
let mut config = prost_build::Config::new();
config.type_attribute(".", "#[derive(serde::Serialize,serde::Deserialize)]");
config.compile_protos(&["src/foobar.proto"], &["src/"])?;
Ok(())
}
会生成 package 指定的文件,例如 package foo.bar 则会生成 foo.bar.rs 文件,如果是 package foobar 则对应了 foobar.rs 文件,在源码中可以通过如下方式使用。
pub mod foobar {
include!(concat!(env!("OUT_DIR"), "/foobar.rs"));
}