macro_rules! generate_builder_method {
(
$(#[$meta:meta])*
plain INNER($inner:ident) $name:ident($t:ty)
) => {
$(#[$meta])*
pub fn $name(mut self, $name: $t) -> Self {
self.$inner.$name = $name;
self
}
};
(
$(#[$meta:meta])*
into INNER($inner:ident) $name:ident($t:ident: $into:ty)
) => {
$(#[$meta])*
pub fn $name<$t>(mut self, $name: $t) -> Self
where
$t: Into<$into>,
{
self.$inner.$name = $name.into();
self
}
};
(
$(#[$meta:meta])*
option INNER($inner:ident) $name:ident($t:ident: $into:ty)
) => {
$(#[$meta])*
pub fn $name<$t: Into<$into>>(mut self, $name: $t) -> Self {
self.$inner.$name = Some($name.into());
self
}
};
(
$(#[$meta:meta])*
token $parent:ident::$token:ident INNER($inner:ident) $name:ident($t:ident: $into:ty)
) => {
$(#[$meta])*
pub fn $name<$t: Into<$into>>(mut self, $name: $t) -> Self {
self.$inner.tokens.push($parent::$token($name.into()));
self
}
};
}
pub(crate) use generate_builder_method;