Lær at programmere i Rust · Lektion

Andre formater

TOML, YAML, bincode

Lektion 4 af 413 trin

Andre formater er en gratis Lær at programmere i Rust-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær at programmere i Rust, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Ud over JSON

serdes kerne er formatuafhængig, så den samme afledte struct fungerer med mange formater, blot ved at skifte format-cratet.

  • TOML til konfiguration
  • YAML til menneskevenlige data
  • bincode til kompakte binære data

Én struct, mange formater

Du definerer structen én gang. Hvert format-crate leverer sine egne ækvivalenter til to_string / from_str over de samme Serialize- og Deserialize-implementeringer.

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Config {
    name: String,
    port: u16,
}

TOML

TOML er populært til konfiguration (selve Cargo.toml bruger det). Cratet toml serialiserer og fortolker det.

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_toml(c: &Config) -> String {
    toml::to_string(c).unwrap()
}

Fortolkning af TOML

Læs en TOML-konfiguration tilbage i din struct med toml::from_str.

use serde::Deserialize;

#[derive(Deserialize)]
struct Config { name: String, port: u16 }

fn parse(s: &str) -> Config {
    toml::from_str(s).unwrap()
}

YAML

YAML egner sig til menneskeredigerede data med indlejring. Brug et crate som serde_yaml med den samme API-struktur.

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_yaml(c: &Config) -> String {
    serde_yaml::to_string(c).unwrap()
}

bincode

bincode er et kompakt binært format, der er velegnet til caching eller overførsel, når størrelse og hastighed er vigtige, og mennesker aldrig skal læse dataene.

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_bytes(c: &Config) -> Vec<u8> {
    bincode::serialize(c).unwrap()
}

Valg af format

Vælg ud fra målgruppen:

  • Menneskelæselig konfiguration med indlejring: TOML eller YAML
  • Web-API'er: JSON
  • Intern binær lagring eller transport: bincode

Modellering af formatvalg

Beslutningen er blot en mapping fra anvendelse til format. Dette kørbare eksempel viser denne udvælgelseslogik.

fn pick_format(use_case: &str) -> &str {
    match use_case {
        "config" => "TOML",
        "api" => "JSON",
        "cache" => "bincode",
        _ => "JSON",
    }
}

fn main() {
    println!("{}", pick_format("config"));
    println!("{}", pick_format("cache"));
    println!("{}", pick_format("api"));
}

Roundtrip af bytes

Binære formater understøtter roundtrip: serialisér til bytes, og deserialisér derefter tilbage til den samme struct. Dette kørbare eksempel modellerer begrebet roundtrip med en bytelængde.

fn encode(name: &str) -> Vec<u8> {
    name.as_bytes().to_vec()
}

fn decode(bytes: &[u8]) -> String {
    String::from_utf8(bytes.to_vec()).unwrap()
}

fn main() {
    let bytes = encode("Alice");
    println!("len={}", bytes.len());
    println!("back={}", decode(&bytes));
}

Formatspecifikke særheder

Formater varierer i funktionalitet. TOML tillader ikke null og kræver tabeller til indlejring; YAML understøtter ankre; bincode er ikke selvbeskrivende, så begge sider skal dele typen.

Attributter gælder stadig

De #[serde(...)]-attributter, du har lært (rename, default, skip), fungerer på tværs af alle formater, fordi de virker på serde-laget og ikke formatlaget.

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "kebab-case")]
struct Config { max_connections: u32 }

Hurtigt tjek

Test din forståelse af andre formater.

Opsummering

Du har lært om andre serde-formater:

  • Én afledt struct fungerer på tværs af TOML, YAML, JSON og bincode
  • Hvert format-crate tilbyder velkendte API'er i stil med to_string / from_str
  • Vælg efter målgruppe: konfiguration, API eller binær lagring
  • serde-attributter gælder for alle formater

Det afslutter Serde-kurset og Rust-serien.

Gratis at komme i gang

Lær Rust med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Andre formater” gratis?

Ja — alle 3 lektioner i læringssporet Lær at programmere i Rust, inklusive “Andre formater”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær at programmere i Rust-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Andre formater”?

TOML, YAML, bincode Du øver dig i Lær at programmere i Rust med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lær at programmere i Rust?

Der kræves ingen tidligere erfaring. Lær at programmere i Rust på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Andre formater”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lær at programmere i Rust-lektion?

Ja. Alle Lær at programmere i Rust-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Serialisering og deserialisering
  2. Arbejde med JSON
  3. Brugerdefineret serialisering
  4. Andre formater
← Tilbage til Lær at programmere i Rust