deer 0.0.0-reserved

A backend-agnostic fail-slow deserialization framework
Documentation
mod common;

use deer::{Deserialize, Number};
use deer_desert::{assert_tokens, assert_tokens_error, error, Token};
use serde_json::json;

#[test]
fn array_u8_ok() {
    let array = [0u8, 1, 2, 3, 4, 5, 6, 7];

    assert_tokens(&array, &[
        Token::Array { length: Some(8) },
        Token::Number(Number::from(0)),
        Token::Number(Number::from(1)),
        Token::Number(Number::from(2)),
        Token::Number(Number::from(3)),
        Token::Number(Number::from(4)),
        Token::Number(Number::from(5)),
        Token::Number(Number::from(6)),
        Token::Number(Number::from(7)),
        Token::ArrayEnd,
    ]);
}

#[test]
fn array_u8_err_inner() {
    assert_tokens_error::<[u8; 8]>(
        &error! {
            ns: "deer",
            id: ["value"],
            properties: {
                "expected": u8::reflection(),
                "received": 256,
                "location": [{
                    "type": "array",
                    "value": 4
                }]
            }
        },
        &[
            Token::Array { length: Some(8) },
            Token::Number(Number::from(0)),
            Token::Number(Number::from(1)),
            Token::Number(Number::from(2)),
            Token::Number(Number::from(3)),
            Token::Number(Number::from(256)),
            Token::Number(Number::from(5)),
            Token::Number(Number::from(6)),
            Token::Number(Number::from(7)),
            Token::ArrayEnd,
        ],
    );
}

#[test]
fn array_u8_err_too_many() {
    assert_tokens_error::<[u8; 1]>(
        &error! {
            ns: "deer",
            id: ["array", "length"],
            properties: {
                "expected": 1,
                "received": 2,
                "location": []
            }
        },
        &[
            Token::Array { length: Some(2) },
            Token::Number(Number::from(0)),
            Token::Number(Number::from(1)),
            Token::ArrayEnd,
        ],
    );
}

#[test]
fn array_u8_err_not_enough() {
    assert_tokens_error::<[u8; 3]>(
        &error!([
            {
                ns: "deer",
                id: ["value", "missing"],
                properties: {
                    "expected": u8::reflection(),
                    "location": [{
                        "type": "array",
                        "value": 2
                    }]
                }
            },
            {
                ns: "deer",
                id: ["array", "length"],
                properties: {
                    "expected": 3,
                    "received": 2,
                    "location": []
                }
            }
        ]),
        &[
            Token::Array { length: Some(2) },
            Token::Number(Number::from(0)),
            Token::Number(Number::from(1)),
            Token::ArrayEnd,
        ],
    );
}