macro_rules! doc_url {
(const $t:ty => $c:ident) => {
concat!(
"See <https://doc.rust-lang.org/std/primitive.",
stringify!($t),
".html#associatedconstant.",
stringify!($c),
">."
)
};
(mod const $t:ty => $c:ident) => {
concat!(
"See <https://doc.rust-lang.org/std/",
stringify!($t),
"/consts/constant.",
stringify!($c),
".html>."
)
};
(fn $t:ty => $f:ident) => {
concat!(
"See <https://doc.rust-lang.org/std/primitive.",
stringify!($t),
".html#method.",
stringify!($f),
">.",
)
};
}
macro_rules! new_trait {
(
$(#[$attr:meta])*
$name:ident
$(: $req:path $(, $(@for<$lt:lifetime>)? $reqs:path)*)?
{
$($rest:tt)*
}
) => {
$(#[$attr])*
pub trait $name
$(: $req $(+ $(for<$lt>)? $reqs)*)?
{
$($rest)*
}
};
($($(#[$attr:meta])* type $name:ident $(: $req:path)?;)+) => { $(
$(#[$attr])* type $name$(: $req)?;
)+ };
($($(#[$attr:meta])* @new const $name:ident : $type:ty;)+ ) => { $(
$(#[$attr])* const $name: $type;
)+ };
($basis:ident @ $(
$(#[$attr:meta])*
mod const $name:ident: $type:ty;
)+) => { $(
$(#[$attr:meta])*
#[doc = doc_url!(mod const $basis => $name)]
const $name: $type;
)+ };
($basis:ident @ $(
$(#[$attr:meta])*
const $name:ident: $type:ty;
)+) => { $(
$(#[$attr])*
#[doc = doc_url!(const $basis => $name)]
const $name: $type;
)+ };
($basis:ident @ $(
$(#[$attr:meta])*
fn $name:ident
($($args:tt)*)
$(-> $ret:ty)?;
)+) => { $(
#[doc = doc_url!(fn $basis => $name)]
$(#[$attr])*
fn $name ($($args)*) $(-> $ret)?;
)+ };
}
macro_rules! items {
($typ:ty => $(const $name:ident: $t:ty;)+) => { $(
#[doc = doc_url!(const $typ => $name)]
const $name: $t = <$typ>::$name;
)+ };
($typ:ident => $(mod const $name:ident: $t:ty;)+) => { $(
#[doc = doc_url!(mod const $typ => $name)]
const $name: $t = core::$typ::consts::$name;
)+ };
($typ:ty => $(
$(#[$attr:meta])*
fn $name:ident
(self$(, $arg:ident: $t:ty)*)
$(-> $ret:ty)?;
)+ ) => { $(
$(#[$attr])*
#[inline(always)]
#[doc = doc_url!(fn $typ => $name)]
fn $name(self$(, $arg: $t)*) $(-> $ret)? {
<Self>::$name(self$(, $arg)*)
}
)+ };
($typ:ty => $(
$(#[$attr:meta])*
fn $name:ident
(&self$(, $arg:ident: $t:ty)*)
$(-> $ret:ty)?;
)+) => { $(
$(#[$attr])*
#[inline(always)]
#[doc = doc_url!(fn $typ => $name)]
fn $name(&self$(, $arg: $t)*) $(-> $ret)? {
<Self>::$name(&self$(, $arg )*)
}
)+ };
($typ:ty => $(
$(#[$attr:meta])*
fn $name:ident
(&mut self$(, $arg:ident: $t:ty)*)
$(-> $ret:ty)?;
)+) => { $(
$(#[$attr])*
#[inline(always)]
#[doc = doc_url!(fn $typ => $name)]
fn $name(&mut self$(, $arg: $t)*) $(-> $ret)? {
<Self>::$name(&mut self$(, $arg)*)
}
)+ };
($typ:ty => $(
$(#[$attr:meta])*
fn $name:ident
($($arg:ident: $t:ty),* $(,)?)
$(-> $ret:ty)?;
)+) => { $(
$(#[$attr])*
#[inline(always)]
#[doc = doc_url!(fn $typ => $name)]
fn $name($($arg: $t),*) $(-> $ret)? {
<Self>::$name($($arg),*)
}
)+ };
}