Rust 编程——prost-build 使用

Prost是一个用于生成Rust语言中的Protocol Buffers定义的库。而prost-build是Prost库的一个工具,用于生成Rust代码。Protocol Buffers是由Google开发的一种轻量级、高效的数据交换格式,可以用于结构化数据的序列化,特别适用于通信协议和数据存储等领域。

prost-build工具通过读取Protobuf文件(.proto文件)并根据文件中定义的消息类型、服务等生成相应的Rust代码。这些生成的Rust代码可用于在Rust项目中使用Protocol Buffers定义的数据结构和服务。

要使用prost-build,首先需要在Rust项目的Cargo.toml文件中添加相应的依赖:

[dependencies]
bytes = "0.4"
prost = "0.5"[build-dependencies]
prost-build = "0.5"

然后,创建一个build.rs文件,用于配置和运行prost-build工具:
build.rs文件与Cargo.toml同级

extern crate prost_build;fn main() {// prost_build::compile_protos(&["src/items.proto"], &["src/"]).unwrap();prost_build::Config::new().out_dir("src/pb").compile_protos(&["src/abi.proto"], &["src/"]).unwrap();
}

在src下创建pb文件夹,用于输出结果。
创建abi.proto文件:

syntax = "proto3";package snazzy.items;// A snazzy new shirt!
message Shirt {enum Size {SMALL = 0;MEDIUM = 1;LARGE = 2;}string color = 1;Size size = 2;
}

其中,src/abi.proto是你的Protobuf文件的路径,src/pb是生成的Rust代码的输出目录。

运行cargo build时,prost-build工具会自动读取Protobuf文件并生成相应的Rust代码,并将生成的代码放置在指定的输出目录中。

注意坑点

1.build.rs文件是否与Cargo.toml同级
2.是否在项目跟目录下运行cargo build
3.是否安装protoc并配置环境变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电调, GPS与飞塔

电调油门行程校准: 断电-----油门推到最高-------电调上电-------滴滴------油门推到最低---滴滴滴---校准完成。 http://【【教程】油门行程校准(航模,电机,电调)】https://www.bilibili.com/video/BV1yJ411J7aX?v…

Spring之bean的生命周期

Spring之Bean的生命周期详解 在Spring框架中,Bean的创建和管理是通过Spring容器来完成的。Spring Bean生命周期包括实例化、属性填充、初始化、销毁等多个步骤。本文将详细解析Spring中Bean的生命周期,并重点介绍AbstractAutowireCapableBeanFactory类中…

SinoDB数据库隔离级别

本文主要对SinoDB数据库隔离级别及其设置进行介绍。 1. ANSI SQL-92事务隔离 ANSI 委员会定义了以下级别的事务隔离(SQL-92): Read uncommittedRead committedRepeatable readSerializable read 查询的隔离级别决定了查询与其他并发执行的…

独立游戏之路 -- 获取OAID提升广告收益

Unity 之 获取手机:OAID、IMEI、ClientId、GUID 前言一、Oaid 介绍1.1 Oaid 说明1.2 移动安全联盟(MSA) 二、站在巨人的肩膀上2.1 本文实现参考2.2 本文实现效果2.3 本文相关插件 三、Unity 中获取Oaid3.1 查看实现源码3.2 工程配置3.3 代码实现3.4 场景搭建 四、总…

6.6SSH的运用

ssh远程管理 ssh是一种安全通道协议,用来实现字符界面的远程登录。远程复制,远程文本传输。 ssh对通信双方的数据进行了加密 用户名和密码登录 密钥对认证方式(可以实现免密登录) ssh 22 网络层 传输层 数据传输的过程中是加密的 …

【一百零五】【算法分析与设计】分解质因数,952. 按公因数计算最大组件大小,204. 计数质数,分解质因数,埃式筛

分解质因数 题目&#xff1a;分解质因数 题目描述 给定一个正整数 n&#xff0c;编写一个程序将其分解为质因数&#xff0c;并按从小到大的顺序输出这些质因数。 输入格式 一个正整数 n&#xff0c;其中 n 的范围是 1 < n < 10^18。 输出格式 按从小到大的顺序输出 n 的质…

【Oracle生产运维】表空间可用性告警排查处理

1 前言 在生产环境中&#xff0c;一般设置表空间告警阈值是90%&#xff0c;在接到监控报警后&#xff0c;并不是需要立刻对表空间进行扩容。 决定是否扩容主要看表空间最近的增量是多少&#xff0c;假如剩余10%的空间还能支持1个月的增量&#xff0c;那就不需要急着扩容。如果…

linux经典例题编程

编写Shell脚本&#xff0c;计算1~100的和 首先vi 1.sh,创建一个名为1.sh的脚本&#xff0c;然后赋予这个脚本权限&#xff0c;使用命令chmod 755 1.sh&#xff0c;然后就可以在脚本中写程序&#xff0c;然后运行。 shell脚本内容 运行结果&#xff1a; 编写Shell脚本&#xf…

C++的封装(十二):外部构造函数

通常&#xff0c;C创建一个对象&#xff0c;都是调用构造函数对它初始化&#xff1a; class AB {int a;int b; public:AB(int ia, int ib) {aia; bib;}void display() {printf("a%d, b%d\n", a, b);}void other(); };如果实现过程需要施加更多的控制&#xff0c;比如…

自动化测试实战:如何构建高效且可靠的测试框架

随着软件行业的快速发展&#xff0c;自动化测试已成为确保软件质量不可或缺的环节。作为一名资深自动化测试工程师&#xff0c;我将分享如何构建一个高效且可靠的自动化测试框架&#xff0c;以提升测试效率&#xff0c;降低人工成本&#xff0c;并确保软件产品的稳定性。 一、…

软考-架构设计师-综合知识总结(试卷:2009~2022)(上篇)

说明 本文档对2009到2022年试卷的综合知识进行了归纳总结&#xff0c;同时对叶宏主编的《系统架构设计师教程》划分重点。 第一章&#xff1a;关于架构、架构师概述 1.1 重要知识点&#xff1a; 模块化开发规则&#xff1a; 1> 最高模块内聚&#xff0c;即在一个模块内部的…

一千题,No.0049(跟奥巴马一起编程)

美国总统奥巴马不仅呼吁所有人都学习编程&#xff0c;甚至以身作则编写代码&#xff0c;成为美国历史上首位编写计算机代码的总统。2014 年底&#xff0c;为庆祝“计算机科学教育周”正式启动&#xff0c;奥巴马编写了很简单的计算机代码&#xff1a;在屏幕上画一个正方形。现在…

开发指南028-生成二维码

平台通过zxing来生成二维码 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version> </dependency> <dependency><groupId>com.google.zxing</groupId>&l…

分享一个 .NET Core Console 项目使用依赖注入的详细例子

前言 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种软件设计模式&#xff0c;主要用于管理和组织一个软件系统中不同模块之间的依赖关系。 在依赖注入中&#xff0c;依赖项&#xff08;也称为组件或服务&#xff09;不是在代码内部创建或查…

【浏览器插件】理解浏览器扩展开发:为什么 `content script` 里的 `window` 与页面的 `window` 不同以及解决方案

理解浏览器扩展开发&#xff1a;为什么 content script 里的 window 与页面的 window 不同以及解决方案 浏览器扩展开发为开发者提供了强大的工具&#xff0c;使得我们可以扩展和增强网页的功能。然而&#xff0c;在开发过程中&#xff0c;尤其是当涉及到与网页内容进行交互时…

Android基础-事件分发机制

在Android系统中&#xff0c;事件分发机制是处理用户交互事件的核心机制。当用户与设备进行交互&#xff0c;如点击、滑动屏幕时&#xff0c;这些动作会被系统捕获并转化为相应的事件&#xff08;如MotionEvent&#xff09;&#xff0c;随后这些事件需要通过一系列的处理和传递…

Redux实现状态管理

在使用 Redux 的应用中&#xff0c;实现状态管理通常涉及以下几个步骤&#xff1a; 创建 Action&#xff1a;Action 是一个简单的 JavaScript 对象&#xff0c;它描述了一个行为&#xff0c;通常有一个 type 字段来表示行为类型。 创建 Reducer&#xff1a;Reducer 是一个纯函…

C# WPF入门学习主线篇(十二)—— Canvas布局容器

欢迎来到C# WPF入门学习系列的第十二篇。在之前的文章中&#xff0c;我们介绍了WPF布局管理的基本概念以及常见的布局容器。本篇博客将详细介绍其中一种最基本的布局容器——Canvas布局容器。通过本篇文章&#xff0c;您将学习如何使用Canvas布局容器来精确控制子控件的位置&am…

二叉树的算法题目

二叉树的遍历题目 二叉树遍历一般包含三种分别为&#xff1a;根左右、左根右、左右根&#xff08;又称为前序遍历、中序遍历、后序遍历&#xff09; 方法一&#xff1a;使用递归遍历 方法二&#xff1a;使用迭代使用栈 我们以左根右&#xff08;中序遍历&…

【SpringBoot】项目搭建基本步骤(整合 Mybatis)

搭建 SpringBoot 项目有两种方式&#xff1a;使用 IDEA、或者在 Spring 官网下载。 1. IDEA 创建 打开 IDEA 后&#xff0c;英文版请点击 File -> New -> Project -> Spring Initialer。 中文版请点击 文件 -> 新建 -> 项目 -> Spring Initialer。 在打开的…