musli-json 0.0.117

JSON support for Müsli.
Documentation
#![allow(unused)]

use std::collections::HashMap;

use musli::{Decode, Encode};
use musli_utils::allocator::System;
use musli_utils::context::SystemContext;

#[derive(Encode)]
enum InnerFrom {
    Variant1,
    Variant2 { vector: Vec<u32>, ok: u32 },
}

#[derive(Encode)]
struct From {
    ok: u32,
    field: HashMap<String, InnerFrom>,
}

#[derive(Decode)]
enum InnerTo {
    Variant1,
    Variant2 { vector: Vec<String>, ok: u32 },
}

#[derive(Decode)]
struct To {
    ok: u32,
    #[musli(trace)]
    field: HashMap<String, InnerTo>,
}

#[test]
fn trace_complex() {
    let alloc = System::new();
    let cx = SystemContext::new(&alloc);

    let mut field = HashMap::new();

    field.insert(
        "hello".to_string(),
        InnerFrom::Variant2 {
            vector: vec![42],
            ok: 10004000,
        },
    );

    let from = From { ok: 10, field };

    let encoding = musli_json::Encoding::new();

    let Ok(bytes) = encoding.to_vec_with(&cx, &from) else {
        if let Some(error) = cx.errors().next() {
            panic!("{error}");
        }

        unreachable!()
    };

    let cx = SystemContext::new(&alloc);

    let Ok(..) = encoding.from_slice_with::<_, To>(&cx, &bytes) else {
        if let Some(error) = cx.errors().next() {
            assert_eq!(error.to_string(), ".field[hello] = Variant2 { .vector[0] }: Expected string, found <number> (at byte 49)");
            return;
        }

        unreachable!()
    };

    panic!("Expected decoding to error");
}