Rust中Protobuf使用详解

 更新时间:2025年11月11日 09:38:04   作者:alwaysrun  
本文介绍了如何在Rust中使用Protobuf进行序列化和反序列化,并介绍了如何在项目中使用生成的Rust代码,通过include!宏和mod.rs文件的配置,可以方便地在Rust项目中使用Protobuf,感兴趣的朋友跟随小编一起看看吧

Protobuf(Protocol Buffers)是 Google 推出的高效序列化协议;Rust中,prost 是最主流的 Protobuf 实现,提供了编译期代码生成和运行时序列化/反序列化能力。

工具与环境

必备工具:

  • protoc:Protobuf 官方编译器(负责解析 .proto 文件)
  • prost:Rust 的 Protobuf 运行时库(提供序列化 / 反序列化逻辑)
  • prost-build:Rust 的 Protobuf 编译工具(集成 protoc,生成 Rust 代码)

windows下protoc安装(winget方式):

  1. winget search protoc
  2. winget install Google.Protobuf
  3. protoc --version:# 输出 libprotoc 33.0 或更高版本即可

项目中使用

配置Cargo.toml

添加prost与prost-build的依赖,

[dependencies]
prost = "0.14.1"
[build-dependencies]
prost-build = "0.14.1"

proto文件

在项目中添加proto/hello.proto文件:

syntax = "proto3";
package hello;
message MyMessage {
  string name = 1;
  int32 id = 2;
}

build脚本

在项目根目录添加build.rs用于把proto文件编译为rs文件:

  • out_dir:设定编译rs文件存放位置(如"src/pb"下);
  • compile_protos:编译
    • 第一个参数为要编译proto文件(包含相对目录);可以指定多个proto文件
    • 第二个参数proto所在路径
use prost_build;
fn main() {
    println!("cargo:rerun-if-changed=hello.proto");
    // try create the output folder
    std::fs::create_dir_all("src/pb").expect("Failed to create output directory");
    // compile the proto file
    prost_build::Config::new()
        .out_dir("src/pb")
        .compile_protos(&["proto/hello.proto"], &["proto/"])
        .expect("Failed to compile proto files");
}

build成功后,会在src/pb下创建hello.rs(与proto文件中的package名称相同)文件。

使用proto

生成rs文件后,即可使用:

  • 通过include!宏,直接包含对应rs文件
  • 通过use引入
    • 在pb下创建mod.rs,并添加pub mod hello;
    • 在main中引入:mod pb; use pb::hello::MyMessage;
// include!("pb/hello.rs");
mod pb;
use pb::hello::MyMessage;
use prost::Message;
fn main() {
    let msg = MyMessage {
        name: "Protobuff example".to_string(),
        id: 123,
    };
    let encoded = msg.encode_to_vec();
    println!("Encoded Msg: {:?}", encoded);
    let decoded = MyMessage::decode(&encoded[..]).unwrap();
    println!("Decoded Msg: {:?}", decoded);
}

到此这篇关于Rust中Protobuf使用简介的文章就介绍到这了,更多相关Rust Protobuf使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Rust 中引用模式与值模式的对比实践指南

    Rust 中引用模式与值模式的对比实践指南

    文章详细介绍了Rust中的引用模式和值模式的区别,包括它们在所有权、生命周期、性能、内存影响以及实际应用中的选择建议,通过对比和实际代码示例,帮助读者理解如何根据具体需求选择合适的模式,从而写出高效且正确的Rust代码,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • rust 如何使用文件锁防止应用多开

    rust 如何使用文件锁防止应用多开

    这篇文章主要介绍了rust 如何使用文件锁防止应用多开,本文给出了进程只能单开的方法,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • vscode搭建rust开发环境的图文教程

    vscode搭建rust开发环境的图文教程

    Rust 是一种系统编程语言,它专注于内存安全、并发和性能,本文主要介绍了vscode搭建rust开发环境的图文教程,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 深入了解Rust中的枚举和模式匹配

    深入了解Rust中的枚举和模式匹配

    这篇文章主要为大家详细介绍了Rust中的枚举和模式匹配的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • Rust并发之异步编程应用教程

    Rust并发之异步编程应用教程

    这篇文章主要介绍了Rust并发之异步编程应用教程,Rust的异步编程是一种强大的并发编程范式,它允许我们编写高效、响应迅速的应用程序,通过掌握异步编程的高级应用,我们可以充分利用系统资源,提高应用程序的性能,需要的朋友可以参考下
    2026-05-05
  • 一文带你掌握Rust中的字符串与切片

    一文带你掌握Rust中的字符串与切片

    字符串与切片是所有新手遇到的第一个门槛,不同于 Java、Python 等语言对字符串的高度封装,Rust 的字符串与切片深度绑定了所有权、借用、生命周期与 UTF-8 编码,下面小编就和大家详细介绍一下吧
    2026-03-03
  • 详解Rust语言中anyhow的使用

    详解Rust语言中anyhow的使用

    anyhow是一个Rust库,用于简化错误处理和提供更好的错误报告,这个库适合用于应用程序,而不是用于创建库,因为它提供了一个非结构化的,方便使用的错误类型,本文就给大家讲讲Rust语言中anyhow的使用,需要的朋友可以参考下
    2023-08-08
  • Rust 连接 PostgreSQL 数据库的详细过程

    Rust 连接 PostgreSQL 数据库的详细过程

    这篇文章主要介绍了Rust 连接 PostgreSQL 数据库的完整代码,本文图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Rust获取命令行参数及IO操作方法

    Rust获取命令行参数及IO操作方法

    Rust作为一门系统编程语言,提供了强大且安全的I/O操作支持,本文给大家介绍Rust获取命令行参数以及IO操作,感兴趣的朋友一起看看吧
    2025-06-06
  • 从入门到精通详解Rust错误处理完全指南

    从入门到精通详解Rust错误处理完全指南

    这篇文章主要为大家详细介绍了Rust中错误处理的相关方法和技巧,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一
    2025-12-12

最新评论