use alux_shape::ShapeOf;
use alux_shape_typescript::{TsShape, TsType};
pub trait TsParams {
fn params(alg: &TsShape) -> Vec<TsType>;
}
macro_rules! params {
($($arg:ident),*) => {
impl<$($arg),*> TsParams for ($($arg,)*)
where
$($arg: ShapeOf<TsShape, Shape = TsType>),*
{
fn params(alg: &TsShape) -> Vec<TsType> {
vec![$($arg::shape_of(alg)),*]
}
}
};
}
impl TsParams for () {
fn params(_alg: &TsShape) -> Vec<TsType> {
Vec::new()
}
}
params!(A0);
params!(A0, A1);
params!(A0, A1, A2);
params!(A0, A1, A2, A3);
params!(A0, A1, A2, A3, A4);
params!(A0, A1, A2, A3, A4, A5);
params!(A0, A1, A2, A3, A4, A5, A6);
params!(A0, A1, A2, A3, A4, A5, A6, A7);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14);
params!(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15);