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工程 后续如有需要再上传
如果觉得有用,麻烦点个赞,加个收藏

相关推荐
丘山子16 分钟前
一些鲜为人知的 IP 地址怪异写法
前端·后端·tcp/ip
CopyLower40 分钟前
在 Spring Boot 中实现 WebSockets
spring boot·后端·iphone
.生产的驴2 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
景天科技苑2 小时前
【Rust】Rust中的枚举与模式匹配,原理解析与应用实战
开发语言·后端·rust·match·enum·枚举与模式匹配·rust枚举与模式匹配
红尘散仙2 小时前
七、WebGPU 基础入门——Texture 纹理
前端·rust·gpu
红尘散仙2 小时前
八、WebGPU 基础入门——加载图像纹理
前端·rust·gpu
w4ngzhen2 小时前
关于Bevy中的原型Archetypes
rust·游戏开发
追逐时光者2 小时前
MongoDB从入门到实战之Docker快速安装MongoDB
后端·mongodb
方圆想当图灵3 小时前
深入理解 AOP:使用 AspectJ 实现对 Maven 依赖中 Jar 包类的织入
后端·maven
豌豆花下猫3 小时前
Python 潮流周刊#99:如何在生产环境中运行 Python?(摘要)
后端·python·ai