Serialization Without Crates
Key/Value Parse
Split Serialized Text
Deserialization turns text back into values. For a tiny key/value format, split_once separates the fields safely.
Program
Play the program to choose a raw record and parse it into a key and value.
key_value_parse.rs
Replay: real traced execution (multi-file project)
fn main() {
let raw = "mode=fast";
let parsed = parse_pair(raw).unwrap_or(("invalid", ""));
println!("{}:{}", parsed.0, parsed.1);
}
fn parse_pair(text: &str) -> Option<(&str, &str)> {
let (key, value) = text.split_once('=')?;
Some((key, value))
}
fn main() {
let raw = "mode=safe";
let parsed = parse_pair(raw).unwrap_or(("invalid", ""));
println!("{}:{}", parsed.0, parsed.1);
}
fn parse_pair(text: &str) -> Option<(&str, &str)> {
let (key, value) = text.split_once('=')?;
Some((key, value))
}
fn main() {
let raw = "bad";
let parsed = parse_pair(raw).unwrap_or(("invalid", ""));
println!("{}:{}", parsed.0, parsed.1);
}
fn parse_pair(text: &str) -> Option<(&str, &str)> {
let (key, value) = text.split_once('=')?;
Some((key, value))
}
raw ← "mode=fast"
1fn main() {2 let ra→ "mode=fast"w = "mode=fast"; //@raw="mode=fast", "mode=safe", "bad"3 let parsed = parse_pair(ra"mode=fast"w).unwrap_or(("invalid", ""));4 println!("{}:{}", parsed.0, parsed.1);fn parse_pair(text: &str) -> Option<(&str, &str)>
7fn parse_pair(text: &str) -> Option<(&str, &str)> {8 let (key, value) = text.split_once('=')?;9 Some((ke"mode"y, valu"fast"e))10}parsed ← ("mode", "fast")
2 let raw = "mode=fast"; //@raw="mode=fast", "mode=safe", "bad"3 let parse→ ("mode", "fast")d = parse_pair(ra"mode=fast"w).unwrap_or(("invalid", ""));4 println!("{}:{}", parsed.0, parsed.1);5}outputmode:fast
raw ← "mode=safe"
1fn main() {2 let ra→ "mode=safe"w = "mode=safe";3 let parsed = parse_pair(ra"mode=safe"w).unwrap_or(("invalid", ""));4 println!("{}:{}", parsed.0, parsed.1);fn parse_pair(text: &str) -> Option<(&str, &str)>
7fn parse_pair(text: &str) -> Option<(&str, &str)> {8 let (key, value) = text.split_once('=')?;9 Some((ke"mode"y, valu"safe"e))10}parsed ← ("mode", "safe")
2 let raw = "mode=safe";3 let parse→ ("mode", "safe")d = parse_pair(ra"mode=safe"w).unwrap_or(("invalid", ""));4 println!("{}:{}", parsed.0, parsed.1);5}outputmode:safe
raw ← "bad"
1fn main() {2 let ra→ "bad"w = "bad";3 let parsed = parse_pair(ra"bad"w).unwrap_or(("invalid", ""));4 println!("{}:{}", parsed.0, parsed.1);parsed ← ("invalid", "")
2 let raw = "bad";3 let parse→ ("invalid", "")d = parse_pair(ra"bad"w).unwrap_or(("invalid", ""));4 println!("{}:{}", parsed.0, parsed.1);5}67fn parse_pair(text: &str) -> Option<(&str, &str)> {8 let (key, value) = text.split_once('=')?;9 Some((key, value))outputinvalid:
deserialization
Deserialization reads structured text back into program values.
split_once
`split_once('=')` returns `None` if the separator is missing.
fallback
`unwrap_or` supplies a controlled fallback for malformed input.