sje 0.0.9

Fast JSON deserialisation and serialisation schema based framework.
Documentation
use sje_derive::Decoder;

#[derive(Decoder)]
#[sje(object)]
#[allow(dead_code)]
struct Position {
    #[sje(rename = "s")]
    symbol: String,
    #[sje(rename = "a")]
    amount: u32,
}

#[derive(Decoder)]
#[sje(object)]
#[allow(dead_code)]
struct PositionUpdate {
    #[sje(rename = "t")]
    timestamp: u64,
    #[sje(rename = "u", decoder = true)]
    updates: Vec<Position>,
}

#[test]
fn should_decode_array_of_objects() {
    let json = r#"{"t":1746699621,"u":[{"s":"btcusdt","a":100},{"s":"ethusdt","a":200}]}"#;

    let update = PositionUpdateDecoder::decode(json.as_bytes()).unwrap();
    assert_eq!(2, update.updates_count());

    let mut positions = update.updates().into_iter();

    let position = positions.next().unwrap();
    assert_eq!("btcusdt", position.symbol_as_str());
    assert_eq!(100, position.amount());

    let position = positions.next().unwrap();
    assert_eq!("ethusdt", position.symbol_as_str());
    assert_eq!(200, position.amount());

    assert!(positions.next().is_none());
}