macro_rules! builder_type_conversions {
($main_type:ident,$builder_type:ident,true) => {
builder_type_conversions!($main_type, $builder_type, build_inner);
impl $builder_type {
pub(crate) fn empty() -> Self {
Self::create_empty()
}
}
};
($main_type:ident,$builder_type:ident,$build_fn:ident) => {
impl From<$builder_type> for $main_type {
fn from(value: $builder_type) -> Self {
value.$build_fn().expect(&format!(
"Failed to convert {} to {}",
stringify!($builder_type),
stringify!($main_type)
))
}
}
impl $builder_type {
pub fn build(self) -> $main_type {
self.$build_fn().expect(&format!(
"Failed to build {} into {}",
stringify!($builder_type),
stringify!($main_type)
))
}
}
};
($main_type:ident,$builder_type:ident) => {
builder_type_conversions!($main_type, $builder_type, build_inner);
};
}
pub(crate) use builder_type_conversions;
pub(crate) fn convert_option<T, U>(input: &Option<T>) -> Option<U>
where
U: From<T>,
T: Clone,
{
let input = input.as_ref()?;
Some(input.clone().into())
}