Rust

Serde — Derive Serialize / Deserialize

admin by @admin ADMIN
1h ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`#[derive(Serialize, Deserialize)]` is the one-liner that bridges Rust structs and JSON / YAML / TOML / etc. via serde's data-format crates.
Rust
Raw
// Cargo.toml:
// serde      = { version = "1", features = ["derive"] }
// serde_json = "1"

use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
struct User {
    id:    u64,
    name:  String,
    email: String,
    #[serde(default)]
    roles: Vec<String>,
}

fn main() -> Result<(), serde_json::Error> {
    // Struct → JSON
    let user = User {
        id: 42,
        name: "Alice".into(),
        email: "a@x.com".into(),
        roles: vec!["admin".into()],
    };
    let json = serde_json::to_string_pretty(&user)?;
    println!("{json}");

    // JSON → Struct
    let parsed: User = serde_json::from_str(r#"{
        "id": 7, "name": "Bob", "email": "b@x.com"
    }"#)?;     // roles defaulted to [] thanks to #[serde(default)]
    println!("{parsed:#?}");
    Ok(())
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.