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.

raw
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))
}
  1. 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);
  2. 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}
  3. 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
  1. 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);
  2. 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}
  3. 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
  1. 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);
  2. 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.