Learn Rust Coding · Lekcja

Inne formaty

TOML, YAML, bincode

Lekcja 4 z 413 kroki

Inne formaty to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Poza JSON-em

Rdzeń serde jest niezależny od formatu, więc ta sama struktura z derive działa z wieloma formatami — wystarczy zamienić crate formatu.

  • TOML do konfiguracji
  • YAML do danych przyjaznych dla człowieka
  • bincode do zwartego formatu binarnego

Jedna struktura, wiele formatów

Definiujesz strukturę tylko raz. Każdy crate formatu udostępnia własne odpowiedniki to_string / from_str, działające na tych samych implementacjach Serialize / Deserialize.

use serde::{Serialize, Deserialize};

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

TOML

TOML jest popularnym formatem konfiguracji (sam plik Cargo.toml go używa). Crate toml służy do jego serializowania i analizowania.

use serde::Serialize;

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

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

Analizowanie TOML

Odczytaj konfigurację TOML z powrotem do struktury za pomocą 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 dobrze sprawdza się w danych edytowanych przez ludzi, zawierających zagnieżdżenia. Użyj crate'a takiego jak serde_yaml, korzystając z tego samego schematu API.

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 to zwarty format binarny, świetny do buforowania lub przesyłania danych przez sieć, gdy liczą się rozmiar i szybkość, a ludzie nie będą ich odczytywać.

use serde::Serialize;

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

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

Wybór formatu

Wybierz format na podstawie odbiorcy:

  • Konfiguracja dla człowieka z zagnieżdżeniami: TOML lub YAML
  • API internetowe: JSON
  • Wewnętrzne przechowywanie lub przesyłanie danych binarnych: bincode

Modelowanie wyboru formatu

Decyzja sprowadza się do przypisania przypadku użycia do formatu. Ten uruchamialny przykład odzwierciedla logikę tego wyboru.

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"));
}

Pełny cykl bajtów

Formaty binarne obsługują pełny cykl: serializujesz dane do bajtów, a następnie deserializujesz je z powrotem do tej samej struktury. Ten uruchamialny przykład przedstawia koncepcyjnie taki cykl na podstawie długości bajtów.

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));
}

Specyfika poszczególnych formatów

Formaty różnią się możliwościami. TOML nie zezwala na null i wymaga tabel do reprezentowania zagnieżdżeń; YAML obsługuje kotwice; bincode nie opisuje sam siebie, więc obie strony muszą znać typ.

Atrybuty nadal działają

Poznane atrybuty #[serde(...)] (rename, default, skip) działają we wszystkich formatach, ponieważ operują na poziomie serde, a nie formatu.

use serde::Serialize;

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

Szybkie sprawdzenie

Sprawdź, czy rozumiesz inne formaty.

Podsumowanie

Poznałeś inne formaty obsługiwane przez serde:

  • Jedna struktura z derive działa z TOML, YAML, JSON-em i bincode
  • Każdy crate formatu udostępnia znajome interfejsy w stylu to_string / from_str
  • Wybieraj format według odbiorcy: konfiguracja, API lub przechowywanie binarne
  • Atrybuty serde mają zastosowanie do każdego formatu

To kończy kurs Serde i serię poświęconą Rustowi.

Bezpłatny start

Ucz się Rust dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
39
Lekcje
144

Często zadawane pytania

Czy lekcja „Inne formaty” jest bezpłatna?

Tak — pełny tekst „Inne formaty” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Co nauczysz się w „Inne formaty”?

TOML, YAML, bincode Ćwiczysz Learn Rust Coding z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Inne formaty”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Serializacja i deserializacja
  2. Praca z JSON
  3. Własna serializacja
  4. Inne formaty
← Powrót do Learn Rust Coding