Prost para Rust: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é Prost e para que serve?

\n\n

Prost é uma biblioteca poderosa e de alto desempenho para a linguagem de programação Rust, projetada para trabalhar com Protocol Buffers (protobuf). Protocol Buffers é um mecanismo de serialização de dados estruturados desenvolvido pelo Google, que é mais compacto e rápido em comparação com JSON ou XML.

\n\n

O Prost resolve várias tarefas principais:

\n
    \n
  • Geração de código: Cria automaticamente estruturas Rust a partir de arquivos .proto, poupando o desenvolvedor do trabalho repetitivo.
  • \n
  • Serialização e desserialização: Converte dados do formato binário protobuf para estruturas Rust e vice-versa.
  • \n
  • Alto desempenho: Utiliza cópia zero (zero-copy) e gerenciamento eficiente de memória, tornando-o uma das soluções mais rápidas para trabalhar com protobuf em Rust.
  • \n
  • Segurança: Totalmente escrito em Rust, garantindo segurança de memória e threads.
  • \n
\n\n

A biblioteca é especialmente útil em arquitetura de microsserviços, sistemas de troca de dados entre serviços, armazenamento de configurações e qualquer cenário que exija serialização eficiente.

\n\n

Instalação

\n\n

O Prost é instalado através do gerenciador de pacotes Cargo. Para começar, adicione as seguintes dependências ao seu Cargo.toml:

\n\n
[dependencies]\nprost = "0.12"\nprost-build = "0.12"\ntonic = "0.11"  # opcional, para gRPC\nbytes = "1.5"   # para trabalhar com buffers\n\n[build-dependencies]\nprost-build = "0.12"
\n\n

Você também precisará instalar o compilador protobuf (protoc). No Ubuntu/Debian:

\n
sudo apt install protobuf-compiler
\n\n

No macOS:

\n
brew install protobuf
\n\n

No Windows, baixe o binário do repositório oficial do protobuf e adicione ao PATH.

\n\n

Início rápido

\n\n

Crie um arquivo person.proto:

\n\n
syntax = "proto3";\n\nmessage Person {\n    string name = 1;\n    int32 age = 2;\n    repeated string phone_numbers = 3;\n}
\n\n

Crie um build.rs na raiz do projeto:

\n\n
fn main() -> Result<(), Box<dyn std::error::Error>> {\n    prost_build::compile_protos(&["src/person.proto"], &["src/"])?;\n    Ok(())\n}
\n\n

Agora no main.rs:

\n\n
use prost::Message;\n\n// O código gerado estará no módulo person\npub mod person {\n    include!(concat!(env!("OUT_DIR"), "/person.rs"));\n}\n\nfn main() {\n    // Criando um objeto\n    let person = person::Person {\n        name: "Alexei".to_string(),\n        age: 30,\n        phone_numbers: vec!["+7-999-123-45-67".to_string()],\n    };\n\n    // Serializando em bytes\n    let mut buf = Vec::new();\n    person.encode(&mut buf).unwrap();\n    println!("Serializado {} bytes", buf.len());\n\n    // Desserializando de volta\n    let decoded = person::Person::decode(&buf[..]).unwrap();\n    println!("Nome: {}, Idade: {}", decoded.name, decoded.age);\n}
\n\n

Principais métodos e funções

\n\n

1. Message::encode

\n

O que faz: Serializa a mensagem para o formato binário protobuf e escreve no buffer.

\n

Parâmetros:

\n
    \n
  • &self — referência para a mensagem
  • \n
  • buf: &mut impl BufMut — buffer para escrita (geralmente Vec<u8>)
  • \n
\n

Exemplo:

\n
let mut buf = Vec::new();\nmy_message.encode(&mut buf).unwrap();
\n\n

2. Message::decode

\n

O que faz: Desserializa bytes de volta para uma estrutura Rust.

\n

Parâmetros:

\n
    \n
  • buf: impl Buf — fonte de bytes (slice, Vec, Bytes)
  • \n
\n

Exemplo:

\n

                
    
    

Recommendations