Indsæt Rust til venstre og klik på "Konverter" — så laver vi det om til XMLIndsæt Rust-kode

Hvad dette værktøj gør

Hvis du nogensinde har været nødt til at skrive XML i hånden, der spejler en Rust-struct — til en SOAP-klient i en integrationsservice, en systemkonfigurationsfil eller en testfixture — så ved du, hvor meget kopiering og indsætning det kræver. Indsæt Rust-koden her, og få velformet XML tilbage i ét hug. En enkelt struct, en fil med flere structs og enums, eller en udfyldt let order = Order { ... };-literal — samme resultat: et komplet XML-dokument, hvor hvert felt bevares.

Det er ikke dum tekst-udskiftning. Konverteren ved, hvordan Rust faktisk serialiserer via serde — nogenlunde som serde-xml-rs eller quick-xml ville sende det ud. f64 og f32 kommer ud som almindelig numerisk tekst, String-værdier XML-escapes, en Option<T> med None bliver et tomt element (eller springes over, når #[serde(skip_serializing_if = "Option::is_none")] er sat), og Vec<T> følger en konsistent container-form — hver Vec bliver et wrapper-element med ét barn pr. element, navngivet efter elementtypen.

Serde-attributter respekteres. #[serde(rename = "x")] på et felt omdøber elementet i outputtet, #[serde(rename = "x")] på structen omdøber den omsluttende root, #[serde(skip)] smider feltet væk, og #[serde(flatten)] trækker en nested struct et niveau op. Enums udsendes med serdes standard-tagging-regler — externally tagged som default, adjacently eller internally tagged hvis du sætter #[serde(tag = "...")]. Vil du have dybdeversionen, er The Rust Book et solidt springbræt for ownership og typesystemet under det hele.

Sådan bruger du det

Tre trin. Virker ens, uanset om du indsætter en fem-linjers struct eller et helt modul.

1

Indsæt din Rust (eller prøv eksemplet)

Smid din Rust ind i editoren til venstre, som den er. En struct, en enum, en udfyldt struct-literal, eller en fil med flere typer — det hele går an. Klik på Indlæs eksempel, hvis du vil se et realistisk eksempel først.

Du behøver ikke fjerne use-sætninger, pille derive-makroer af eller rydde op i lifetime-annoteringer. Lad koden stå, som rustfmt efterlod den. Bare indsæt.

2

Tryk på Konverter

Klik på den grønne Konverter-knap. Værktøjet læser Rust-koden, bevarer hver struct og hvert felt, og bygger XML i ét gennemløb. Du ser en kort loading-indikator, mens det kører.

3

Kopier XML'en

Højre panel fyldes med indrykket, velformet XML, som enhver standard-kompatibel XML-parser accepterer. Kopier det direkte ind i din SOAP-request, konfigurationsfil eller testfixture.

Hvornår det faktisk er nyttigt

SOAP-integration på systemniveau

Rust-services står ofte ved siden af legacy-systemer, der stadig taler SOAP. Indsæt din request-struct, hiv XML-bodyen ud, test det i SoapUI før du sætter HTTP-klienten op — hurtigere end at skrive envelopen i hånden. Kombiner med en crate fra <a href="https://crates.io/" target="_blank" rel="noopener">crates.io</a> som <code>reqwest</code> til transporten.

Konfigurationsfiler til services og daemons

En settings-struct med 30+ felter bliver til en klar-til-at-redigere XML-skabelon. Ingen håndskreven boilerplate, ingen oversete felter når structen vokser.

Seed til testfixtures

Lav en udfyldt <code>let order = Order { ... };</code> fra en unit-test om til en XML-seed-fil til integrationstests, mock-servere eller legacy-systemer, du ikke ejer.

Holde dokumentationen synkron

Generér XML-eksempler til en README, crate-dokumentation eller XSD-baseret skemadokumentation direkte fra dine rigtige structs, så dokumentationen matcher koden i stedet for at skride fra hinanden.

Ofte stillede spørgsmål

Kan jeg indsætte flere structs på én gang?

Ja — indsæt et helt modul. Hver top-level struct eller enum kommer igennem med nested typer foldet ud og default-værdier udfyldt. Intet bliver tavst smidt væk.

Respekterer den #[serde(rename)] og #[serde(skip)]?

Ja. #[serde(rename = "x")] på et felt omdøber XML-elementet, #[serde(rename = "x")] på structen omdøber den omsluttende root, #[serde(skip)] smider feltet helt væk, og #[serde(flatten)] trækker en nested struct et niveau op. #[serde(rename_all = "PascalCase")] anvendes på hvert felt i structen. Det stemmer overens med, hvad serde faktisk gør i runtime.

Hvordan håndteres Option<T> og skip_serializing_if?

En None-værdi bliver et tomt element som default — så formen forbliver konsistent, og XSD'er bliver ved med at validere. Har feltet #[serde(skip_serializing_if = "Option::is_none")], smides None-værdier helt væk. Some(x) serialiseres altid som x selv.

Hvad med enums, Vec og HashMap?

Enums er som default externally-tagged (<VariantName>...</VariantName>); tilføj #[serde(tag = "type")] for at skifte til internally-tagged. Vec<T> bliver et container-element med ét barn pr. element, navngivet efter typen — en Vec<OrderItem> items bliver til <items><OrderItem/><OrderItem/></items>. HashMap<K,V> bliver en container af <Entry><Key/><Value/></Entry>.

Bliver min kode gemt?

Din kode sendes til backenden til konverteringen og gemmes ikke — vi logger ikke payloaden. Som altid med online-værktøjer: er koden virkelig følsom, så kig den igennem, før du indsætter.

Hvad hvis Rust-koden har lifetimes, traits eller unsafe-blokke?

Lifetime-annoteringer fjernes til XML-formålet — de påvirker ikke runtime-værdien. Trait-definitioner beskriver form, ikke indhold, så de producerer ikke XML direkte; det gør de implementerende structs. Unsafe-blokke ignoreres, fordi det er udførelses-konstruktioner. Har koden syntaksfejl, så ret de åbenlyse først — parseren er tolerant, men ikke tankelæser.

Andre værktøjer du kan få brug for

Rust til XML er én brik i puslespillet. Disse passer godt sammen med det: