当前位置: 首页 > news >正文

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 folderstd::fs::create_dir_all("src/pb").expect("Failed to create output directory");// compile the proto fileprost_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);
}
http://www.dtcms.com/a/589827.html

相关文章:

  • 【ISO8601库】日期时间解析器测试套件详解(tests.rs)
  • 游戏手柄遥控越疆协作机器人[三]
  • 怎样搭建免费网站一个网站怎么做镜像站
  • 专业网站建设套餐深圳西乡网站建设
  • 35.linux的定时器使用
  • 网站建设最好的公司哪家好太原的网站搭建公司
  • 【开题答辩全过程】以 基于SpringBoot的中央厨房系统的设计与实现为例,包含答辩的问题和答案
  • 如何做到30分钟可完成企业网站建设
  • 自己做的美食分享到网站用wordpress做网站页面显示404
  • 打工人日报#20251109
  • 沃森 | 科学突破与争议并存 / “与智者为伍” 的人生启示
  • zmaiFy自研排版与格式优化介绍
  • ESLint 是什么?
  • 车联网UDS诊断:0x22,0x2E,0x11,0x2F,0x31,0x28请求数据分析实战.
  • Python字符串详解
  • STL中容器vector -- 讲解超详细
  • 线性代数 - 特征值和特征向量可视化是什么样的
  • 不用下载劰网站的片你懂的荷塘网站建设
  • 网站优化推广软件建立微信小程序
  • 【Java Web学习 | 第七篇】JavaScript(1) 基础知识1
  • ERROR: Failed building wheel for dlib
  • 【Cursor AI编程】Cursor安装与初始化
  • 网站建设规划书的目的做两个阿里网站吗
  • 正交频分复用技术
  • 【Android】活动的生命周期、启动模式及标记位
  • 建站案例系统小说
  • 招聘网站建设维护广西城乡建设部网站
  • 多线程编程:从日志到单例模式全解析
  • 邢台市建设局网站定制网站开发的目的是什么
  • 还在自制工作标准品或对照品吗?标准物质供应商推荐