rustlol 0.1.1

A wad files lib
Documentation



// 定义一个宏,用于拼接标识符

#[macro_export]
macro_rules! lol_paste_impl {
    ($x:ident, $y: expr, $f:expr, $args: expr) => {{
        paste::paste! {
            let [<$x $y>] = {
                crate::lol::errors::Trace::stack_push(&crate::func_name!(std::stringify!($f)), $args);
                let strs = crate::lol::errors::Trace::stack();
                let mut trace = crate::lol::errors::Trace::new();
                trace.0.push(strs);
                trace
            };
            [<$x $y>]
        }
    }}
}


#[macro_export]
macro_rules! func_name {
    ($args: expr) => {{
        let location = std::panic::Location::caller();
        let func_name = {
            fn type_name_of<T>(_: T) -> &'static str {
                std::stringify!($args)
            }
            let name = type_name_of($args);
            &name[..name.len()]
        };
        format!("FUNC_NAME:({}) IT IN THE (file:{}line:{}) ", func_name, location.file(), location.line())
    }};
}

#[macro_export]
macro_rules! lol_paste{
    ($f: tt,$($args:expr),*) => {{
        let arg = format!("{}", std::stringify!($($args),*));
        let arg = &arg[..];
        let arga = [format!("{}", arg)]; 
        let location = std::panic::Location::caller();
        let _line = location.line();
        crate::lol_paste_impl!(traces, _line,  std::stringify!($f), &arga)
        
    }}
}

#[macro_export]
macro_rules! lol_trace_func {
    ($f: tt,$($args:expr),*) => {{
        let trace = crate::lol_paste!($f, $($args),*);
        //println!("{}", trace)
        trace
    }};
}

#[macro_export]
macro_rules! lol_trace_var {
    (($args:expr),*) => {
        format!("{} = {}", std::stringify!($args), format!("{}",$args))
    };
}


#[macro_export]
macro_rules! lol_throw_msg {
    ($($fstr:expr),*) => {{
        let fstr = format!($($fstr),*);
        crate::lol::errors::Trace::raise(&fstr)
    }};
}

#[macro_export]
macro_rules! lol_throw_if_msg {
    ($cond:expr, $trace: expr) => {{
        let can = $cond;
        while(can) {
          let ftrs = crate::lol_throw_msg!("{} {} {}", can, stringify!($cond), $trace);;
        }
    }};
}




#[macro_export]
macro_rules! lol_throw_if {
    ($cond:expr, $trace: expr) => {{
        let can = $cond;
        while(can) {
          crate::lol_throw_msg!("{} {} {}", can, stringify!($cond), $trace);
        }
    }};
}