pub trait From1< T1 >
where
Self: Sized,
{
fn from1(a1: T1) -> Self;
}
pub trait From2< T1, T2 >
where
Self: Sized,
{
fn from2(a1: T1, a2: T2) -> Self;
}
pub trait From3< T1, T2, T3 >
where
Self: Sized,
{
fn from3(a1: T1, a2: T2, a3: T3) -> Self;
}
#[ macro_export ]
macro_rules! from {
() =>
{
core ::default ::Default ::default()
};
( $a1: expr ) =>
{
::variadic_from ::variadic ::From1 ::from1($a1)
};
( $a1: expr, $a2: expr ) =>
{
::variadic_from ::variadic ::From2 ::from2($a1, $a2)
};
( $a1: expr, $a2: expr, $a3: expr ) =>
{
::variadic_from ::variadic ::From3 ::from3($a1, $a2, $a3)
};
( $( $rest: expr ),* ) =>
{
compile_error!("Too many arguments");
};
}