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 从网上抄来的

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

相关推荐

  1. skynet 使用protobuf

    2024-01-20 06:48:02       40 阅读
  2. <span style='color:red;'>protobuf</span>

    protobuf

    2024-01-20 06:48:02      54 阅读
  3. IO系列-2 Protobuf使用说明

    2024-01-20 06:48:02       37 阅读
  4. C#中数组ProtoBuf使用问题

    2024-01-20 06:48:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-20 06:48:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-20 06:48:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-20 06:48:02       82 阅读
  4. Python语言-面向对象

    2024-01-20 06:48:02       91 阅读

热门阅读

  1. 驱动开发--多路复用-信号

    2024-01-20 06:48:02       47 阅读
  2. C++入门【31-C++ 基本的输入输出】

    2024-01-20 06:48:02       48 阅读
  3. c语言字符串分割函数strtok_s和strtok

    2024-01-20 06:48:02       53 阅读
  4. 编码风格之(4)GNU软件标准风格(2)

    2024-01-20 06:48:02       44 阅读
  5. Python中的循环语句

    2024-01-20 06:48:02       46 阅读
  6. 小知识分享3

    2024-01-20 06:48:02       47 阅读
  7. 鸿蒙harmony--线程间处理和发送事件Emitter

    2024-01-20 06:48:02       43 阅读
  8. Vue2:用ref方式绑定自定义事件的注意事项

    2024-01-20 06:48:02       59 阅读
  9. python通过函数和常规类编写元类

    2024-01-20 06:48:02       39 阅读
  10. 前端vue2生成二维码并可保存

    2024-01-20 06:48:02       56 阅读
  11. docker 的 Dockerfile 简单使用

    2024-01-20 06:48:02       54 阅读