nok-codegen 0.0.1

Concrete Error type built around a pseudo stack trace
Documentation
use crate::parse_args::{parse_args, Args};
use proc_macro2::TokenStream;
use quote::quote;

pub fn generate_macros(args: TokenStream) -> TokenStream {
    let Args {
        payload_type: ty,
        export_globally,
    } = parse_args(args).unwrap();
    let (ty, export, allow_unused) = if export_globally {
        (
            quote! { $crate::#ty },
            Some(quote! { #[macro_export] }),
            None,
        )
    } else {
        (ty, None, Some(quote! { #[allow(unused)] }))
    };
    let crate_wide_export = if !export_globally {
        Some(quote! {
            pub(crate) use error;
            pub(crate) use err;
            pub(crate) use to_err_msg;
            pub(crate) use to_err_msg_dbg;
            pub(crate) use map_err;
            pub(crate) use map_err_dbg;
            pub(crate) use replace;
            pub(crate) use replace_err;
            pub(crate) use verify;
            pub(crate) use ok_or;
        })
    } else {
        None
    };
    quote! {
        #allow_unused
        #export
        macro_rules! error {
            () => {
                nok::error_t!(#ty)
            };
            ($($arg:tt)*) => {
                nok::error_t!(#ty, $($arg)*)
            };
        }
        #allow_unused
        #export
        macro_rules! err {
            () => {
                nok::err_t!(#ty)
            };
            ($($arg:tt)*) => {
                nok::err_t!(#ty, $($arg)*)
            };
        }
        #allow_unused
        #export
        macro_rules! to_err_msg {
            () => {
                nok::to_err_msg_t!(#ty)
            };
            ($payload:expr) => {
                nok::to_err_msg_t!(#ty, $payload)
            };
        }
        #allow_unused
        #export
        macro_rules! to_err_msg_dbg {
            () => {
                nok::to_err_msg_dbg_t!(#ty)
            };
            ($payload:expr) => {
                nok::to_err_msg_dbg_t!(#ty, $payload)
            };
        }
        #allow_unused
        #export
        macro_rules! map_err {
            ($err:expr) => {
                nok::map_err_t!(#ty, $err)
            };
            ($err:expr, $payload:expr) => {
                nok::map_err_t!(#ty, $err, $payload)
            };
        }
        #allow_unused
        #export
        macro_rules! map_err_dbg {
            ($err:expr) => {
                nok::map_err_dbg_t!(#ty, $err)
            };
            ($err:expr, $payload:expr) => {
                nok::map_err_dbg_t!(#ty, $err, $payload)
            };
        }
        #allow_unused
        #export
        macro_rules! replace {
            () => {
                nok::replace_t!(#ty)
            };
            ($($arg:tt)*) => {
                nok::replace_t!(#ty, $($arg)*)
            };
        }
        #allow_unused
        #export
        macro_rules! replace_err {
            ($err:expr) => {
                nok::replace_err_t!(#ty, $err)
            };
            ($err:expr, $($arg:tt)*) => {
                nok::replace_err_t!(#ty, $err, $($arg)*)
            };
        }
        #allow_unused
        #export
        macro_rules! verify {
            ($statement:expr) => {
                nok::verify_t!(#ty, $statement)
            };
            ($statement:expr, $($arg:tt)*) => {
                nok::verify_t!(#ty, $statement, $($arg)*)
            };
        }
        #allow_unused
        #export
        macro_rules! ok_or {
            ($opt:expr) => {
                nok::ok_or_t!(#ty, $opt)
            };
            ($opt:expr, $($arg:tt)*) => {
                nok::ok_or_t!(#ty, $opt, $($arg)*)
            };
        }

        #crate_wide_export
    }
}