美文网首页
在rust使用protobuf

在rust使用protobuf

作者: guonaihong | 来源:发表于2020-12-14 14:23 被阅读0次

    前言

    最近打算熟悉下rust,先使用tcp stream+protobuf写个简单的TLV服务。发现rust处理生成代码的方式和go还有点不一样。比较符合rust的做法是写个build.rs脚本。

    protobuf 配置

    protobuf 是google开发的协议序列化,反序列化器,具备很高的性能。在内网的rpc通信中比较流行。message 定义数据结构用的,rfc定义应用层的数据包使用message术语,所以protobuf取名还是挺讲究的。

    syntax = "proto3";
    
    message HotWordRequest {
        string hot_word_text=1;
        string session_id = 2;
    }
    
    message HotWordResponse {
        int64 errcode = 1;
        string errmsg = 2;
        string session_id = 3;
        bytes hot_word_model=4;
    }
    
    

    build.rs内容

    fn main() {
        protobuf_codegen_pure::Codegen::new()
            .out_dir("src/protos")
            .inputs(&["protos/small-model.proto"])
            .include("protos")
            .run()
            .expect("Codegen failed.");
    }
    

    依赖配置

    rust 里面使用toml格式配置依赖,toml是一种很基础和广泛使用的配置文件格式,toml格式比较简单,一个比较基础的解析器用c可能40行可以实现。比较好奇的是为什么不使用yaml?唯一能想到的是,可能是想大家的依赖配置玩的不要那么花哨。

    [build-dependencies]
    protobuf-codegen-pure = "2.14"
    
    

    运行命令

    cargo build运行如果没有报错就大功告成。

    cargo build
    

    最后的目录结构

    .
    ├── build.rs
    ├── Cargo.toml
    ├── protos
    │   └── small-model.proto
    └── src
        ├── main.rs
        └── protos
            └── small_model.rs
    

    相关文章

      网友评论

          本文标题:在rust使用protobuf

          本文链接:https://www.haomeiwen.com/subject/lfyvgktx.html