O que é Prost e para que serve?
\n\nProst é 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\nO 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
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\nInstalação
\n\nO Prost é instalado através do gerenciador de pacotes Cargo. Para começar, adicione as seguintes dependências ao seu Cargo.toml:
[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\nVocê também precisará instalar o compilador protobuf (protoc). No Ubuntu/Debian:
sudo apt install protobuf-compiler\n\nNo macOS:
\nbrew install protobuf\n\nNo Windows, baixe o binário do repositório oficial do protobuf e adicione ao PATH.
\n\nInício rápido
\n\nCrie um arquivo person.proto:
syntax = "proto3";\n\nmessage Person {\n string name = 1;\n int32 age = 2;\n repeated string phone_numbers = 3;\n}\n\nCrie um build.rs na raiz do projeto:
fn main() -> Result<(), Box<dyn std::error::Error>> {\n prost_build::compile_protos(&["src/person.proto"], &["src/"])?;\n Ok(())\n}\n\nAgora no main.rs:
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\nPrincipais métodos e funções
\n\n1. Message::encode
\nO que faz: Serializa a mensagem para o formato binário protobuf e escreve no buffer.
\nParâmetros:
\n- \n
&self— referência para a mensagem \n buf: &mut impl BufMut— buffer para escrita (geralmenteVec<u8>) \n
Exemplo:
\nlet mut buf = Vec::new();\nmy_message.encode(&mut buf).unwrap();\n\n2. Message::decode
\nO que faz: Desserializa bytes de volta para uma estrutura Rust.
\nParâmetros:
\n- \n
buf: impl Buf— fonte de bytes (slice, Vec, Bytes) \n
Exemplo:
\nTambém na biblioteca
Recommendations