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
#[macro_export]
macro_rules! constant_internal {
    ( $( $part:ident )+ _ $next:ident $( $extra:ident )+  ) => {
        constant_internal!($( $part )* $next _ $( $extra )*);
    };
    ( $( $part:ident )+ _ $last:ident ) => {
        paste!{
            #[doc = concat!($( stringify!($part), "-", )* stringify!($last))]
            pub const [< $( $part _ )* $last >]: &'static str = concat!($( stringify!($part), "-", )* stringify!($last));
        }
    };
    ( $( $part:ident )+ _ $last:literal ) => {
        paste!{
            #[doc = concat!($( stringify!($part), "-", )* stringify!($last))]
            pub const [< $( $part _ )* $last >]: &'static str = concat!($( stringify!($part), "-", )* stringify!($last));
        }
    };
}

#[macro_export]
macro_rules! constant {
    ( $last:ident ) => {
        #[doc = concat!(stringify!($last))]
        pub const $last: &'static str = concat!(stringify!($last));
    };
    ( $first:ident $( $extra:ident )+  ) => {
        constant_internal!($first _ $( $extra )*);
    };
    ( $( $part:ident )+ $last:literal ) => {
        constant_internal!($( $part )* _ $last);
    };
}