fvm-std 1.0.0

tool for user to write contract which will be run in hyperchain with rust
Documentation
///
/// # Examples
/// ```ignore
/// use fvm_std::log;
/// use fvm_std::types::LogLevel;
/// log!(target: "test_target", LogLevel::INFO, "hello");
/// log!(target: "test_target", LogLevel::INFO, "hello {}", 1);
/// log!(LogLevel::INFO, "hello");
/// log!(LogLevel::INFO, "hello {}", 1);
/// log!("hello");
/// log!("hello {}", 1);
/// log!()
/// ```
///

use cfg_if::cfg_if;

cfg_if! {
    if #[cfg(feature = "advance")] {
        #[macro_export(local_inner_macros)]
        macro_rules! log {
            (target: $target:expr, $lvl:expr, $($key:ident = $value:expr),* ; $fmt:expr,  $($arg:tt)+) => {
                $crate::advance::log($target.to_string().as_bytes(), __log_format_args!($fmt, $($arg)+).to_string().as_bytes(), $lvl);
            };
            (target: $target:expr, $lvl:expr, $($arg:tt)+) => ({
                $crate::advance::log($target.to_string().as_bytes(), __log_format_args!($($arg)+).to_string().as_bytes(), $lvl);
            });
            ($lvl:expr, $($arg:tt)+) => ({
                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $lvl, $($arg)+)
            });
            ($($arg:tt)+) => ({
                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $crate::types::LogLevel::INFO, $($arg)+)
            });
            () => {
                log!("")
            }
        }
    } else {
        #[macro_export(local_inner_macros)]
        macro_rules! log {
            (target: $target:expr, $lvl:expr, $($key:ident = $value:expr),* ; $fmt:expr,  $($arg:tt)+) => {
                $crate::normal::log($target.to_string().as_bytes(), __log_format_args!($fmt, $($arg)+).to_string().as_bytes(), $lvl);
            };
            (target: $target:expr, $lvl:expr, $($arg:tt)+) => ({
                $crate::normal::log($target.to_string().as_bytes(), __log_format_args!($($arg)+).to_string().as_bytes(), $lvl);
            });
            ($lvl:expr, $($arg:tt)+) => ({
                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $lvl, $($arg)+)
            });
            ($($arg:tt)+) => ({
                log!(target: __log_format_args!("{}:{}", __log_file!(), __log_line!()), $crate::types::LogLevel::INFO, $($arg)+)
            });
            () => {
                log!("")
            }
        }
    }
}

/// CRITICAL ERROR WARNING NOTICE INFO DEBUG
///
/// # Examples
/// ```ignore
/// use fvm_std::critical;
/// fn main() {
///  critical!("hello");
///  critical!("hello {}", "critical");
///  critical!();
/// }
/// ```
///
#[macro_export(local_inner_macros)]
macro_rules! critical {
    ($($arg:tt)+) => ({
         log!($crate::types::LogLevel::CRITICAL, $($arg)+)
    });
    () => ({
        log!($crate::types::LogLevel::CRITICAL, "")
    });
}

///
/// # Examples
/// ```ignore
/// use fvm_std::error;
/// error!("hello");
/// error!("hello {}", "error");
/// error!();
/// ```
///
#[macro_export(local_inner_macros)]
macro_rules! error {
    ($($arg:tt)+) => (
        log!($crate::types::LogLevel::ERROR, $($arg)+)
    );
    () => (
        log!($crate::types::LogLevel::ERROR, "")
    );
}

///
/// # Examples
/// ```ignore
/// use fvm_std::warning;
/// warning!("hello");
/// warning!("hello {}", "warning");
/// warning!();
/// ```
///
#[macro_export(local_inner_macros)]
macro_rules! warning {
    ($($arg:tt)+) => (
        log!($crate::types::LogLevel::WARNING, $($arg)+)
    );
    () => (
        log!($crate::types::LogLevel::WARNING, "")
    );
}

///
/// # Examples
/// ```ignore
/// use fvm_std::notice;
/// notice!("hello");
/// notice!("hello {}", "notice");
/// notice!();
/// ```
///
#[macro_export(local_inner_macros)]
macro_rules! notice {
    ($($arg:tt)+) => (
        log!($crate::types::LogLevel::NOTICE, $($arg)+)
    );
    () => (
        log!($crate::types::LogLevel::NOTICE, "")
    );
}

///
/// # Examples
/// ```ignore
/// use fvm_std::info;
/// info!("hello");
/// info!("hello {}", "info");
/// info!();
/// ```
///
#[macro_export(local_inner_macros)]
macro_rules! info {
    ($($arg:tt)+) => (
        log!($crate::types::LogLevel::INFO, $($arg)+)
    );
    () => (
        log!($crate::types::LogLevel::INFO, "")
    );
}

///
/// # Examples
/// ```ignore
/// use fvm_std::debug;
/// debug!("hello");
/// debug!("hello {}", "debug");
/// debug!();
/// ```
///
#[macro_export(local_inner_macros)]
macro_rules! debug {
    ($($arg:tt)+) => (
        log!($crate::types::LogLevel::DEBUG, $($arg)+)
    );
    () => (
        log!($crate::types::LogLevel::DEBUG, "")
    );
}

#[doc(hidden)]
#[macro_export]
macro_rules! __log_format_args {
    ($($args:tt)*) => {
        format_args!($($args)*)
    };
}

#[doc(hidden)]
#[macro_export]
macro_rules! __log_file {
    () => {
        file!()
    };
}

#[doc(hidden)]
#[macro_export]
macro_rules! __log_line {
    () => {
        line!()
    };
}