rust使用protobuf

前言

c++,java,go 等直接是用 ,具体就不说了,这章主要讲述rust 使用protobuf

这章主要讲述2种

1 > protoc + protoc-gen-rust plugin

2> protoc + prost-build

1:环境

win10

rustrover64

25-2 下载地址 https://github.com/protocolbuffers/protobuf/releases

25-2 是rust 实验性的

纯粹用这个 出错了,这里先不讨论了,由解决的麻烦留个言我

3.3.0 golang编译的


2:安装 测试

1> protoc + protoc-gen-rust plugin

安装插件

cargo install protobuf-codegen 生成protoc-gen-rust

或 用源码生成

执行

protoc --rust_out=. *.proto

生成

编译测试

toml 增加

dependencies

protobuf="3.3"

2>protoc + prost-build

dependencies

prost="0.12"

prost-types = "0.12"

build-dependencies

prost-build = { version = "0.12"}#,features = "cleanup-markdown"

build.rs 从网上抄来的

rust 复制代码
use std::process::Command;

fn main() {
    //std::env::set_var("PROTOC", protobuf_src::protoc());
    //不增加下面一句 老是提示没权限,所以直接把环境变量写到这里
    std::env::set_var("PROTOC", "E:/work/protobuf/protobuf_proto/protoc"); //protoc_25_2 
    let mut config = prost_build::Config::new();
    config.bytes(&["."]);
    // 表示给生成的数据结构加上额外的trait,比如这里的: PartialOrd,表示对象实现排序trait
    config.type_attribute(".", "#[derive(PartialOrd)]");  //如果去掉这个比较属性,就没上面的比较重复的问题了
    config
        .out_dir("src/pb") //指定输出的目录
        .compile_protos(&["chat.proto"], &["."]) // 列举需要编译的文件
        .unwrap();

    // 下面表示调用系统cargo命令,并使用fmt进行标准代码格式化
    Command::new("cargo")
        .args(&["fmt", "--", "src/*.rs"])
        .status()
        .expect("cargo fmt failed");

    println!("proto files build finish.");
}

一个重复错误,手动修改下(因为加了 config.type_attribute(".", "#derive(PartialOrd)"); 这句,这个地方重复了)

编译运行

3:2种proto生成的 rs内容真不一样

4:DEMO工程 后续如有需要再上传
如果觉得有用,麻烦点个赞,加个收藏

相关推荐
蜗牛互联网3 分钟前
Gemini 4 Argon的1M输出窗口与长程Agent工程边界
java·人工智能·后端
蜗牛互联网44 分钟前
从GitHub动态工作流理解确定性编排与Agent判断边界
java·人工智能·后端·github
鶴哥只手遮天1 小时前
深入理解OpenSceneGraph(五):插件生态与最佳实践
后端
进击的雷神2 小时前
OpenClaw 太重、启动太慢?我试了试这个 Rust 重写的轻量版 AI 助手网关
开发语言·人工智能·rust·zeroclaw
.道阻且长.2 小时前
C++11 :新的类功能,lambda,包装器
开发语言·c++·后端
leo在掘金2 小时前
google/ax单日涨1379星:Agent编排运行时到底难在哪?
后端·架构
王中阳Go2 小时前
简历写「QPS 提升 3 倍」,面试官问「怎么压测的」,我卡在并发数怎么定
人工智能·后端·面试
柠檬味拥抱2 小时前
植物气孔开闭检测数据集 | 3600张YOLO植物生理数据集
后端
136096757232 小时前
宿主机路径与容器路径
后端
量化分析码农2 小时前
【Python量化系统工程实战 #01】数据存哪里不崩?CSV/SQLite/MySQL 量化存储方案对比与 SQLite 实战建库
后端