Serde 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 é Serde e para que serve

\n\n

Serde (abreviação de Serialization/Deserialization) é um framework para serialização e desserialização de estruturas de dados na linguagem Rust. É o padrão de facto para trabalhar com formatos de dados no ecossistema Rust. A biblioteca permite converter tipos complexos do Rust (structs, enums, vetores, tabelas hash) em vários formatos textuais e binários (JSON, YAML, TOML, BSON, MessagePack, CBOR, e muitos outros) e vice-versa.

\n\n

A filosofia principal do Serde é desempenho sem concessões. Ele usa o poderoso sistema de macros do Rust para gerar código altamente otimizado em tempo de compilação, tornando-o uma das bibliotecas de serialização mais rápidas entre todas as linguagens de programação. O Serde não está vinculado a nenhum formato específico: ele fornece os traits abstratos Serialize e Deserialize, e os formatos específicos são implementados em crates separados (por exemplo, serde_json, serde_yaml).

\n\n

Para que serve o Serde?

\n
    \n
  • Salvamento de estado: gravação de configurações, saves de jogos, cache em disco
  • \n
  • Protocolos de rede: troca de dados entre cliente e servidor (REST API, WebSocket)
  • \n
  • Arquivos de configuração: leitura de configurações de JSON/YAML/TOML
  • \n
  • Bancos de dados: serialização de registros para armazenamento em Redis, MongoDB e outros bancos
  • \n
  • Comunicação entre processos: transferência de dados entre processos via pipe ou sockets
  • \n
\n\n

Instalação

\n\n

O Serde é instalado através do gerenciador de pacotes Cargo, embutido no Rust. Para começar, adicione as dependências no arquivo Cargo.toml:

\n\n
[dependencies]\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

Explicação das dependências:

\n
    \n
  • serde — o núcleo da biblioteca com os traits Serialize e Deserialize. A flag features = ["derive"] ativa o suporte à macro #[derive(Serialize, Deserialize)].
  • \n
  • serde_json — implementação do formato JSON. De forma análoga, podem ser adicionados serde_yaml, serde_toml, bincode e outros.
  • \n
\n\n

Se você estiver usando Rust 2021 edition ou superior, basta adicionar essas linhas. Para instalar uma versão específica, informe o número, por exemplo serde_json = "1.0.128".

\n\n

Início rápido: primeiro exemplo

\n\n

Vamos criar uma struct simples e serializá-la em JSON, e depois desserializá-la de volta:

\n\n
use serde::{Deserialize, Serialize};\nuse serde_json;\n\n// Estrutura com geração automática de código de serialização/desserialização\n#[derive(Serialize, Deserialize, Debug)]\nstruct User {\n    id: u32,\n    name: String,\n    email: String,\n    active: bool,\n}\n\nfn main() {\n    // Criando uma instância da estrutura\n    let user = User {\n        id: 42,\n        name: "Alice".to_string(),\n        email: "alice@example.com".to_string(),\n        active: true,\n    };\n\n    // Serialização para string JSON\n    let json_string = serde_json::to_string(&user).unwrap();\n    println!("JSON serializado: {}", json_string);\n\n    // Desserialização de volta para a estrutura\n    let deserialized_user: User = serde_json::from_str(&json_string).unwrap();\n    println!("Estrutura desserializada: {:?}", deserialized_user);\n\n    // Verificando que os dados não foram perdidos\n    assert_eq!(user.id, deserialized_user.id);\n    assert_eq!(user.name, deserialized_user.name);\n}\n
\n\n

Saída do programa:

\n
JSON serializado: {"id":42,"name":"Alice","email":"alice@example.com","active":true}\nEstrutura desserializada: User { id: 4                    

Recommendations