Andre formater
TOML, YAML, bincode
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.
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.