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

rust使用protobuf

安装protoc https://github.com/protocolbuffers/protobuf/releases

toml

prost = "0.14.1"
tokio-stream = { version = "0.1", features = ["net"] }
bytes = "1.11.0"
prost-types = "0.14.1"[build-dependencies]
prost-build = "0.14.1"

build.rs

fn main() {// 编译 .proto 文件prost_build::compile_protos(&["src/protos/biz_activity.proto"], &["src/protos/"]).unwrap();
}

proto

syntax = "proto3";package biz_activity;// 定义业务活动消息
message BizActivity {optional string id = 1;optional string name = 2;optional int32 status = 3;optional int64 create_time = 4;  // 使用时间戳optional string additional_field = 5;
}

main.rs

use std::time::{SystemTime, UNIX_EPOCH};
use prost::Message;// 引入生成的 Protobuf 结构
mod protos {include!(concat!(env!("OUT_DIR"), "/biz_activity.rs"));
}use protos::BizActivity as ProtobufBizActivity;#[tokio::main]
async fn main() {// 演示 Protobuf 功能:将数据转换为 Protobuf 格式let protobuf_activity = ProtobufBizActivity {id: Some("protobuf_id".to_string()),name: Some("Protobuf 活动".to_string()),status: Some(1),create_time: Some(SystemTime::now().duration_since(UNIX_EPOCH).expect("时间获取失败").as_secs() as i64),additional_field: Some("Protobuf 额外信息".to_string()),};// 序列化为字节let encoded_data: Vec<u8> = protobuf_activity.encode_to_vec();println!("Protobuf 数据大小: {} 字节", encoded_data.len());// 反序列化let decoded_activity = ProtobufBizActivity::decode(&encoded_data[..]).unwrap();println!("解码后的活动名称: {:?}", decoded_activity.name);
}

image

编译后的源码在 target/debug/build/项目名-哈希/out/目录中

// This file is @generated by prost-build.
/// 定义业务活动消息
#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)]
pub struct BizActivity {#[prost(string, optional, tag = "1")]pub id: ::core::option::Option<::prost::alloc::string::String>,#[prost(string, optional, tag = "2")]pub name: ::core::option::Option<::prost::alloc::string::String>,#[prost(int32, optional, tag = "3")]pub status: ::core::option::Option<i32>,/// 使用时间戳#[prost(int64, optional, tag = "4")]pub create_time: ::core::option::Option<i64>,#[prost(string, optional, tag = "5")]pub additional_field: ::core::option::Option<::prost::alloc::string::String>,
}
http://www.jsqmd.com/news/130086/

相关文章:

  • 数字生命工程的突破-震惊吧,世界!
  • 蒸汽轮机在线监测:燃气电厂高效运转的“二当家”与隐形守护者
  • 当你的论文卡在“写不出来”和“改不下去”之间:一个科研人对AI写作工具的冷静观察与非推销式体验报告
  • 2025服装拉链袋/复合包装袋定制厂家权威榜单 - 栗子测评
  • 大龄Java开发失业五个月,想转行
  • 破局AI搜索流量困局:Deepseek优化核心服务商深度解析 - 品牌推荐排行榜
  • 青云卫找谁买:复购率90%!老客私藏选购路径曝光 - 品牌测评家
  • 2025年大模型学习终极指南:四阶段路线图,带你从零基础到实战专家,大模型从入门到精通!
  • 优质石英粉厂家推荐排行榜——聚焦高纯度与定制化需求 - 资讯焦点
  • 深耕精准触达:GEO优化服务商的专业力甄选指南 - 品牌推荐排行榜
  • 科研新利器:书匠策AI如何重塑期刊论文写作的智能范式
  • JimuBI 积木大屏 v2.3.0 版本发布,免费的可视化大屏和仪表盘
  • 深耕流量入口:DeepSeek优化服务商的甄选逻辑与价值锚点 - 品牌推荐排行榜
  • 特征值类重大升级
  • 2025数控加工中心机床厂家实力榜单 - 栗子测评
  • 书匠策AI:本科论文战场上的“智能战术大师”,解锁高效创作新境界
  • 护发精油什么牌子效果最好?7款针对不同发质护发精油实测清单 - 资讯焦点
  • 护发精油什么牌子效果最好?7款针对不同发质护发精油实测清单 - 资讯焦点
  • 全域精准触达:Deepseek优化服务商的价值深耕与效果赋能 - 品牌推荐排行榜
  • 当你的论文卡在“差一点就能投”:一位科研“老油条”的深夜自白与一个安静却高效的AI写作伙伴
  • 前端 TypeScript 入门2
  • python基于flask的校园人脸识别门禁系统的设计与实现_rgjx5997_Pycharm vue django
  • 当人类科学家遇上AI“同行评审”:一场关于效率、规范与科研表达的静默革命——书匠策AI期刊写作功能体验手记
  • 基于php的非物质文化遗产推广系统
  • CA-310微量水分测量仪供应商推荐:2025年行业优秀企业 - 品牌推荐大师1
  • 学术革命新引擎:书匠策AI如何重塑期刊论文写作生态?
  • 基于springboot + vue职位管理推荐系统
  • 2025年气流粉碎机公司精选:流化床气流粉碎机/GMP标准气流粉碎机/实验室气流粉碎机/超微粉碎机/超细粉碎机厂家引领精细化生产革新 - 海棠依旧大
  • 论文检测网站全解析:类型、功能与选择指南
  • 【笔记】golang plan9 汇编中,一个汇编函数调用另一个汇编函数