Protobuf Rust 语言使用介绍

2024-11-21 linux network

Prost 是一个用于序列化和反序列化 Google Protocol Buffers 协议的 Rust 库,支持消息嵌套、默认值、枚举类型等。

简介

建议同时使用 build.rsprost 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"));
}