Prost para Rust: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Prost y para qué sirve?

\n\n

Prost es una biblioteca potente y de alto rendimiento para el lenguaje de programación Rust, diseñada para trabajar con Protocol Buffers (protobuf). Protocol Buffers es un mecanismo de serialización de datos estructurados desarrollado por Google, que es más compacto y rápido en comparación con JSON o XML.

\n\n

Prost resuelve varias tareas clave:

\n
    \n
  • Generación de código: Crea automáticamente estructuras de Rust a partir de archivos .proto, liberando al desarrollador del trabajo rutinario.
  • \n
  • Serialización y deserialización: Convierte datos del formato binario protobuf a estructuras de Rust y viceversa.
  • \n
  • Alto rendimiento: Utiliza copia cero (zero-copy) y gestión eficiente de memoria, lo que lo convierte en una de las soluciones más rápidas para trabajar con protobuf en Rust.
  • \n
  • Seguridad: Está completamente escrito en Rust, lo que garantiza seguridad de memoria y de hilos.
  • \n
\n\n

La biblioteca es especialmente útil en arquitecturas de microservicios, sistemas de intercambio de datos entre servicios, almacenamiento de configuraciones y cualquier escenario que requiera serialización eficiente.

\n\n

Instalación

\n\n

Prost se instala a través del gestor de paquetes Cargo. Para comenzar, agregue las siguientes dependencias a su archivo Cargo.toml:

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

También necesitará instalar el compilador protobuf (protoc). En Ubuntu/Debian:

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

En macOS:

\n
brew install protobuf
\n\n

En Windows, descargue el binario desde el repositorio oficial de protobuf y agréguelo al PATH.

\n\n

Inicio rápido

\n\n

Cree un archivo 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

Cree un archivo build.rs en la raíz del proyecto:

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

Ahora en main.rs:

\n\n
use prost::Message;\n\n// El código generado estará en el módulo person\npub mod person {\n    include!(concat!(env!("OUT_DIR"), "/person.rs"));\n}\n\nfn main() {\n    // Creamos un objeto\n    let person = person::Person {\n        name: "Alexéi".to_string(),\n        age: 30,\n        phone_numbers: vec!["+7-999-123-45-67".to_string()],\n    };\n\n    // Serializamos a bytes\n    let mut buf = Vec::new();\n    person.encode(&mut buf).unwrap();\n    println!("Serializados {} bytes", buf.len());\n\n    // Deserializamos de vuelta\n    let decoded = person::Person::decode(&buf[..]).unwrap();\n    println!("Nombre: {}, Edad: {}", decoded.name, decoded.age);\n}
\n\n

Métodos y funciones principales

\n\n

1. Message::encode

\n

Qué hace: Serializa un mensaje al formato binario protobuf y lo escribe en un buffer.

\n

Parámetros:

\n
    \n
  • &self — referencia al mensaje
  • \n
  • buf: &mut impl BufMut — buffer para escritura (normalmente Vec<u8>)
  • \n
\n

Ejemplo:

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

2. Message::decode

\n

Qué hace: Deserializa bytes de vuelta a una estructura de Rust.

\n

Parámetros:

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

Ejemplo:

\n

                
    
    

Recommendations