//! 通用宏定义
#![no_std]

/// 定义一个 newtype 包装类型
///
/// 自动生成 `from_raw` / `raw` 方法和常用派生。
#[macro_export]
macro_rules! define_newtype {
    ($(#[$meta:meta])* $vis:vis struct $name:ident($inner:ty);) => {
        $(#[$meta])*
        #[repr(transparent)]
        #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
        $vis struct $name($inner);

        impl $name {
            /// 从原始值构造
            $vis const fn from_raw(val: $inner) -> Self {
                Self(val)
            }

            /// 获取原始值
            $vis const fn raw(self) -> $inner {
                self.0
            }
        }
    };
}
