Inne formaty
TOML, YAML, bincode
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.
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.