edn-rs 0.19.0

[DEPRECATED]: Crate to parse and emit EDN
Documentation
use std::str::FromStr;

use edn_rs::Edn;

fn uuid_printer(uuid: &Edn) {
    println!("Received UUID: {uuid}");
}

fn inst_printer(inst: &Edn) {
    println!("Received Inst: {inst}");
}

fn print_tagged_or_panic(tagged_data: &Edn) {
    if let Edn::Tagged(t, d) = tagged_data {
        match t.as_str() {
            "uuid" => uuid_printer(d),
            "inst" => inst_printer(d),
            _ => println!("\"{t}\" tag with {d}"),
        }
    } else {
        panic!();
    }
}

fn tagged_data() {
    let edn = "{:date   #inst \"2020-07-16T21:53:14.628-00:00\"
                :uuid   #uuid \"af6d8699-f442-4dfd-8b26-37d80543186b\"
                :foobar #arbitrary 0x2A}";
    let parsed_edn: edn_rs::Edn = edn_rs::Edn::from_str(edn).unwrap();

    print_tagged_or_panic(parsed_edn.get(":date").unwrap());
    print_tagged_or_panic(parsed_edn.get(":uuid").unwrap());
    print_tagged_or_panic(parsed_edn.get(":foobar").unwrap());
}

fn main() {
    tagged_data();
}

#[test]
fn test_tagged_data() {
    tagged_data();
}