Files @ dc1a7211fdca
Branch filter:

Location: CSY/reowolf/src/macros.rs

dc1a7211fdca 1.6 KiB application/rls-services+xml Show Annotation Show as Raw Download as Raw
MH
Initial tcp socket implementation
// Utility for performing debug printing within a particular module. Still
// requires some extra macros to be defined to be ergonomic.
macro_rules! enabled_debug_print {
    (false, $name:literal, $format:literal) => {};
    (false, $name:literal, $format:literal, $($args:expr),*) => {};
    (true, $name:literal, $format:literal) => {
        println!("[{}] {}", $name, $format)
    };
    (true, $name:literal, $format:literal, $($args:expr),*) => {
        println!("[{}] {}", $name, format!($format, $($args),*))
    };
}

// Utility for inserting code only executed in debug mode. Because writing the
// conditional cfg is tedious and looks ugly. Still doesn't work for struct
// fields, though.
macro_rules! dbg_code {
    ($code:stmt) => {
        #[cfg(debug_assertions)] $code
    }
}

// Given a function name, return type and variant, will generate the all-so
// common `union_value.as_variant()` method. The return value is the reference
// to the embedded union type.
macro_rules! union_cast_to_ref_method_impl {
    ($func_name:ident, $ret_type:ty, $variant:path) => {
        fn $func_name(&self) -> &$ret_type {
            match self {
                $variant(content) => return content,
                _ => unreachable!(),
            }
        }
    }
}

// Another union cast, but now returning a copy of the value
macro_rules! union_cast_to_value_method_impl {
    ($func_name:ident, $ret_type:ty, $variant:path) => {
        impl Value {
            pub(crate) fn $func_name(&self) -> $ret_type {
                match self {
                    $variant(v) => *v,
                    _ => unreachable!(),
                }
            }
        }
    }
}