use crate::value::JsValue;
use crate::{Context, JsResult};
use super::TryFromJs;
macro_rules! impl_try_from_js_for_tuples {
($($name:ident),*) => {
impl<$($name: TryFromJs),*> TryFromJs for ($($name,)*) {
fn try_from_js(value: &JsValue, context: &mut Context) -> JsResult<Self> {
let vec: Vec<JsValue> = value.try_js_into(context)?;
let mut iter = vec.into_iter();
Ok((
$(
$name::try_from_js(&iter.next().unwrap_or_else(JsValue::undefined), context)?,
)*
))
}
}
};
}
impl_try_from_js_for_tuples!(A);
impl_try_from_js_for_tuples!(A, B);
impl_try_from_js_for_tuples!(A, B, C);
impl_try_from_js_for_tuples!(A, B, C, D);
impl_try_from_js_for_tuples!(A, B, C, D, E);
impl_try_from_js_for_tuples!(A, B, C, D, E, F);
impl_try_from_js_for_tuples!(A, B, C, D, E, F, G);
impl_try_from_js_for_tuples!(A, B, C, D, E, F, G, H);
impl_try_from_js_for_tuples!(A, B, C, D, E, F, G, H, I);
impl_try_from_js_for_tuples!(A, B, C, D, E, F, G, H, I, J);