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"));
}