1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#[macro_export]
macro_rules! pprint_ast {
    ( $arg:expr ) => {
        quote::ToTokens::into_token_stream($arg).to_string()
    };
}

#[macro_export]
macro_rules! CHRusty_todo {
    ( message! $message:expr, $( $args:expr ),* ) => {
        {
            #[cfg(debug_assertions)]
            panic!($message, $($args)*)
        }
    };
    ( recover! $else:expr,
      justification! $justification:expr  ,
      message! $message:expr ,  $( $args:expr ),* ) => {
        {
            if cfg!(debug_assertions) {
                panic!($message, $( $args, ),*)
            } else {
                eprintln!($justification, $($args)*);
                $else
            }
        }
    }
}

#[macro_export]
macro_rules! CHRusty_parse {
    ($exp:literal as $ty:ty) => {
        syn::parse_str::<$ty>($exp).unwrap()
    };
    ($exp:ident as $ty:ty) => {
        syn::parse_str::<$ty>($exp).unwrap()
    };
    (($exp:expr) as $ty:ty) => {
        syn::parse_str::<$ty>($exp).unwrap()
    };
}

#[macro_export]
macro_rules! CHRusty_build {
    ($name:path { $( $field:ident: $field_value:expr ),*; default![$($default_field:ident),*] }) => {
        {$name {
            $( $field: $field_value ),*,
            $( $default_field: Default::default() ),*
        }}
    };
    ($name:path { $( $field:ident: $field_value:expr ),* }) => {
        {$name {
            $( $field: $field_value ),*
        }}
    }
}