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

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,表示对象实现排序traitconfig.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工程 后续如有需要再上传
如果觉得有用,麻烦点个赞,加个收藏

相关文章:

  • 【C++】C++ 入门 — 命名空间,输入输出,函数新特性
  • SQL - 数据操作语句
  • 【Docker】Docker学习⑧ - Docker仓库之分布式Harbor
  • C语言常见面试题:什么是枚举,枚举的作用是什么?
  • [NISACTF 2022]sign-ezc++
  • 解析dapp:铸造虚拟钱包新概念
  • SpringBoot自定义全局异常处理器
  • 基础算法--搜索与图论(2)
  • 盘古信息IMS OS 数垒制造操作系统+ 产品及生态部正式营运
  • 黑马程序员-瑞吉外卖-day5
  • SpringBoot中从HikariCP迁移到Oracle UCP指南
  • STM32 PWM驱动设计
  • OJ_阶乘的和
  • 【重点问题】攻击面发现及管理
  • SpringBoot 整合RabbitMQ 之延迟队列实验
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • Cookie 在前端中的实践
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JS函数式编程 数组部分风格 ES6版
  • PaddlePaddle-GitHub的正确打开姿势
  • Windows Containers 大冒险: 容器网络
  • 分享一份非常强势的Android面试题
  • 使用docker-compose进行多节点部署
  • 事件委托的小应用
  • 探索 JS 中的模块化
  • 限制Java线程池运行线程以及等待线程数量的策略
  • #100天计划# 2013年9月29日
  • #预处理和函数的对比以及条件编译
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一) springboot详细介绍
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .php文件都打不开,打不开php文件怎么办
  • .pyc文件是什么?
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @RequestMapping 的作用是什么?
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [INSTALL_FAILED_TEST_ONLY],Android开发出现应用未安装
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
  • [POJ2728] Desert King
  • [pytorch入门] 3. torchvision中的transforms
  • [Redis]Redis的数据类型
  • [Spring Cloud Task]3 框架配置详解
  • [SpringBoot系列]缓存解决方案
  • [SystemC]Primitive Channels and the Kernel
  • [uni-app]记录APP端跳转页面自动滚动到底部的bug
  • [Unity]关于iOS申请因为Advertising Identifier问题被拒绝的解决方法