56 lines
1.3 KiB
Rust
56 lines
1.3 KiB
Rust
//
|
|
#[macro_export]
|
|
macro_rules! newtype {
|
|
($name:ident, $docs:literal) => {
|
|
#[doc = $docs]
|
|
#[derive(
|
|
Clone,
|
|
Copy,
|
|
Default,
|
|
Debug,
|
|
derive_more::Display,
|
|
derive_more::From,
|
|
PartialEq,
|
|
Eq,
|
|
PartialOrd,
|
|
Ord,
|
|
Hash,
|
|
derive_more::AsRef,
|
|
derive_more::Constructor,
|
|
serde::Serialize,
|
|
serde::Deserialize,
|
|
)]
|
|
pub struct $name;
|
|
};
|
|
($name:ident, $type:ty $(, $derive:ty)*, $docs:literal) => {
|
|
#[doc = $docs]
|
|
#[derive(
|
|
Clone,
|
|
Debug,
|
|
derive_more::From,
|
|
PartialEq,
|
|
Eq,
|
|
derive_more::AsRef,
|
|
derive_more::Deref,
|
|
serde::Serialize,
|
|
serde::Deserialize,
|
|
$($derive),*
|
|
)]
|
|
pub struct $name($type);
|
|
impl $name {
|
|
pub fn new(value: impl Into<$type>) -> Self {
|
|
Self(value.into())
|
|
}
|
|
#[allow(clippy::missing_const_for_fn)]
|
|
#[must_use]
|
|
pub fn peel(self) -> $type {
|
|
self.0
|
|
}
|
|
}
|
|
impl From<$name> for $type {
|
|
fn from(value: $name) -> $type {
|
|
value.peel()
|
|
}
|
|
}
|
|
};
|
|
}
|