dangerous 0.10.0

Safely and explicitly parse untrusted / dangerous data
Documentation
#![allow(unused_macros)]

pub use dangerous::{error::*, *};
pub use indoc::indoc;
pub use paste::paste;

macro_rules! assert_str_eq {
    ($actual:expr, $expected:expr) => {{
        let actual = &$actual;
        let expected = &$expected;
        if actual != expected {
            panic!(
                indoc! {"
                string not expected value:
                ============================EXPECTED==========================
                {}
                =============================ACTUAL===========================
                {}
                ==============================DIFF============================
                {}
                ==============================================================
            "},
                expected,
                actual,
                colored_diff::PrettyDifference { expected, actual },
            );
        }
    }};
}

macro_rules! input {
    ($input:expr) => {
        dangerous::input(&$input)
    };
}

macro_rules! read_all {
    ($input:expr, $read_fn:expr) => {
        input!($input).read_all::<_, _, dangerous::Expected>($read_fn)
    };
}

macro_rules! read_partial {
    ($input:expr, $read_fn:expr) => {
        input!($input).read_partial::<_, _, dangerous::Expected>($read_fn)
    };
}

macro_rules! read_infallible {
    ($input:expr, $read_fn:expr) => {
        input!($input).read_infallible($read_fn)
    };
}

macro_rules! read_all_ok {
    ($input:expr, $read_fn:expr) => {
        read_all!($input, $read_fn).unwrap()
    };
}

macro_rules! read_all_err {
    ($input:expr, $read_fn:expr) => {
        read_all!($input, $read_fn).unwrap_err()
    };
}

macro_rules! read_partial_ok {
    ($input:expr, $read_fn:expr) => {
        read_partial!($input, $read_fn).unwrap()
    };
}

macro_rules! read_partial_err {
    ($input:expr, $read_fn:expr) => {
        read_partial!($input, $read_fn).unwrap_err()
    };
}