1use crate::from_r::{SexpError, SexpLengthError, SexpTypeError, TryFromSexp};
15use crate::{SEXP, SEXPTYPE, SexpExt};
16
17fn check_list_shape(
18 sexp: SEXP,
19 expected_len: usize,
20 len: impl FnOnce() -> usize,
21) -> Result<(), SexpError> {
22 let actual = sexp.type_of();
23 if actual != SEXPTYPE::VECSXP {
24 return Err(SexpTypeError {
25 expected: SEXPTYPE::VECSXP,
26 actual,
27 }
28 .into());
29 }
30 let len = len();
32 if len != expected_len {
33 return Err(SexpLengthError {
34 expected: expected_len,
35 actual: len,
36 }
37 .into());
38 }
39 Ok(())
40}
41
42macro_rules! impl_tuple_vec_try_from_sexp {
45 (($($T:ident),+), $row:ty, $nullable:literal) => {
46 impl<$($T: TryFromSexp),+> TryFromSexp for Vec<$row>
47 where
48 $($T::Error: Into<SexpError>,)+
49 {
50 type Error = SexpError;
51 const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
52 crate::from_r::NativeBorrow::in_list(<$row>::NATIVE_BORROW);
53
54 fn __mx_has_na(&self) -> bool {
55 self.iter().any(<$row>::__mx_has_na)
56 }
57
58 fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
59 Self::__mx_try_from_sexp_with_check(sexp, &crate::from_r::no_element_check)
60 }
61
62 unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error> {
63 unsafe {
64 Self::__mx_try_from_sexp_unchecked_with_check(sexp, &crate::from_r::no_element_check)
65 }
66 }
67
68 fn __mx_try_from_sexp_with_check(
69 sexp: SEXP,
70 check: &crate::from_r::ElementCheck<'_>,
71 ) -> Result<Self, SexpError> {
72 crate::from_r::map_vecsxp_batched(sexp, |row| {
73 if !$nullable || row.type_of() != SEXPTYPE::NILSXP {
74 check(row)?;
75 }
76 <$row>::try_from_sexp(row)
77 })
78 }
79
80 unsafe fn __mx_try_from_sexp_unchecked_with_check(
81 sexp: SEXP,
82 check: &crate::from_r::ElementCheck<'_>,
83 ) -> Result<Self, SexpError> {
84 crate::from_r::map_vecsxp_batched(sexp, |row| {
85 if !$nullable || row.type_of() != SEXPTYPE::NILSXP {
86 check(row)?;
87 }
88 unsafe { <$row>::try_from_sexp_unchecked(row) }
89 })
90 }
91 }
92 };
93}
94
95macro_rules! impl_tuple_try_from_sexp {
98 ($n:literal, $name:literal; $($T:ident $R:ident $idx:tt),+) => {
99 impl<$($T: TryFromSexp),+> TryFromSexp for ($($T,)+)
100 where
101 $(<$T as TryFromSexp>::Error: Into<SexpError>,)+
102 {
103 type Error = SexpError;
104 const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
105 crate::from_r::NativeBorrow::tuple(&[$($T::NATIVE_BORROW,)+]);
106
107 fn __mx_has_na(&self) -> bool {
108 $(self.$idx.__mx_has_na())||+
109 }
110
111 fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
112 check_list_shape(sexp, $n, || sexp.len())?;
113
114 let mut errors = crate::from_r::ElementErrors::default();
115 let partial = (
116 $(
117 match <$T as TryFromSexp>::try_from_sexp(
118 sexp.vector_elt($idx as isize),
119 ) {
120 Ok(v) => Some(v),
121 Err(e) => {
122 errors.push($idx, e.into());
123 None
124 }
125 },
126 )+
127 );
128 let partial = errors.into_result(partial)?;
129 Ok(($(partial.$idx.unwrap(),)+))
131 }
132
133 unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error> {
134 check_list_shape(sexp, $n, || unsafe { sexp.len_unchecked() })?;
135
136 let mut errors = crate::from_r::ElementErrors::default();
137 let partial = (
138 $(
139 match unsafe {
140 <$T as TryFromSexp>::try_from_sexp_unchecked(
141 sexp.vector_elt_unchecked($idx as isize),
142 )
143 } {
144 Ok(v) => Some(v),
145 Err(e) => {
146 errors.push($idx, e.into());
147 None
148 }
149 },
150 )+
151 );
152 let partial = errors.into_result(partial)?;
153 Ok(($(partial.$idx.unwrap(),)+))
154 }
155 }
156
157 impl<$($T: TryFromSexp),+> TryFromSexp for Option<($($T,)+)>
158 where
159 $($T::Error: Into<SexpError>,)+
160 {
161 type Error = SexpError;
162 const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
163 <($($T,)+)>::NATIVE_BORROW;
164
165 fn __mx_has_na(&self) -> bool {
166 self.as_ref().is_some_and(<($($T,)+)>::__mx_has_na)
167 }
168
169 fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
170 if sexp.type_of() == SEXPTYPE::NILSXP {
171 Ok(None)
172 } else {
173 <($($T,)+)>::try_from_sexp(sexp).map(Some)
174 }
175 }
176
177 unsafe fn try_from_sexp_unchecked(sexp: SEXP) -> Result<Self, Self::Error> {
178 if sexp.type_of() == SEXPTYPE::NILSXP {
179 Ok(None)
180 } else {
181 unsafe { <($($T,)+)>::try_from_sexp_unchecked(sexp).map(Some) }
182 }
183 }
184 }
185
186 impl_tuple_vec_try_from_sexp!(($($T),+), ($($T,)+), false);
187 impl_tuple_vec_try_from_sexp!(($($T),+), Option<($($T,)+)>, true);
188 };
189}
190
191impl<A: TryFromSexp> TryFromSexp for (A,) where
<A as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool { self.0.__mx_has_na() }
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 1, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},);
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(),))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 1, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},);
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(),))
}
}
impl<A: TryFromSexp> TryFromSexp for Option<(A,)> where
A::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A,)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A,)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A,)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { unsafe { <(A,)>::try_from_sexp_unchecked(sexp).map(Some) } }
}
}
impl<A: TryFromSexp> TryFromSexp for Vec<(A,)> where A::Error: Into<SexpError>
{
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A,)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool { self.iter().any(<(A,)>::__mx_has_na) }
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A,)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <(A,)>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp> TryFromSexp for Vec<Option<(A,)>> where
A::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A,)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A,)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A,)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <Option<(A,)>>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for (A, B) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 2, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 2, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for Option<(A, B)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe { <(A, B)>::try_from_sexp_unchecked(sexp).map(Some) }
}
}
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for Vec<(A, B)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool { self.iter().any(<(A, B)>::__mx_has_na) }
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <(A, B)>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp> TryFromSexp for Vec<Option<(A, B)>> where
A::Error: Into<SexpError>, B::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <Option<(A, B)>>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for (A, B, C)
where <A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 3, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 3, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for
Option<(A, B, C)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B, C)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe { <(A, B, C)>::try_from_sexp_unchecked(sexp).map(Some) }
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for
Vec<(A, B, C)> where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <(A, B, C)>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp> TryFromSexp for
Vec<Option<(A, B, C)>> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B,
C)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <Option<(A, B, C)>>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
TryFromSexp for (A, B, C, D) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 4, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 4, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
TryFromSexp for Option<(A, B, C, D)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B, C, D)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe { <(A, B, C, D)>::try_from_sexp_unchecked(sexp).map(Some) }
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
TryFromSexp for Vec<(A, B, C, D)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <(A, B, C, D)>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp>
TryFromSexp for Vec<Option<(A, B, C, D)>> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C,
D)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp> TryFromSexp for (A, B, C, D, E) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 5, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 5, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp> TryFromSexp for Option<(A, B, C, D, E)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B, C, D, E)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp> TryFromSexp for Vec<(A, B, C, D, E)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D,
E)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe { <(A, B, C, D, E)>::try_from_sexp_unchecked(row) }
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp> TryFromSexp for Vec<Option<(A, B, C, D, E)>> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D,
E)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp> TryFromSexp for (A, B, C, D, E, F) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 6, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 6, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp> TryFromSexp for Option<(A, B, C, D, E, F)>
where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B, C, D, E, F)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp> TryFromSexp for Vec<(A, B, C, D, E, F)>
where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E,
F)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp> TryFromSexp for
Vec<Option<(A, B, C, D, E, F)>> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E,
F)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
(A, B, C, D, E, F, G) where <A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError>,
<G as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na() || self.6.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 7, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match <G as
TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 7, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match unsafe {
<G as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
Option<(A, B, C, D, E, F, G)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F, G)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F, G)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B, C, D, E, F, G)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F,
G)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
Vec<(A, B, C, D, E, F, G)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F,
G)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F, G)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F, G)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F, G)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp> TryFromSexp for
Vec<Option<(A, B, C, D, E, F, G)>> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F,
G)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F, G)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F, G)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F,
G)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
TryFromSexp for (A, B, C, D, E, F, G, H) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError>,
<G as TryFromSexp>::Error: Into<SexpError>,
<H as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
H::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na() || self.6.__mx_has_na() ||
self.7.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 8, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match <G as
TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match <H as
TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 8, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match unsafe {
<G as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match unsafe {
<H as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
TryFromSexp for Option<(A, B, C, D, E, F, G, H)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F, G, H)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else { <(A, B, C, D, E, F, G, H)>::try_from_sexp(sexp).map(Some) }
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F, G,
H)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
TryFromSexp for Vec<(A, B, C, D, E, F, G, H)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G,
H)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F, G, H)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F, G, H)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F, G, H)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp>
TryFromSexp for Vec<Option<(A, B, C, D, E, F, G, H)>> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G,
H)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F, G, H)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F, G, H)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F, G,
H)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp> TryFromSexp for (A, B, C, D, E, F, G, H, I) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError>,
<G as TryFromSexp>::Error: Into<SexpError>,
<H as TryFromSexp>::Error: Into<SexpError>,
<I as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
H::NATIVE_BORROW, I::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na() || self.6.__mx_has_na() ||
self.7.__mx_has_na() || self.8.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 9, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match <G as
TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match <H as
TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match <I as
TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 9, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match unsafe {
<G as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match unsafe {
<H as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match unsafe {
<I as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp> TryFromSexp for Option<(A, B, C, D, E, F, G, H, I)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F, G, H, I)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
<(A, B, C, D, E, F, G, H, I)>::try_from_sexp(sexp).map(Some)
}
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F, G, H,
I)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp> TryFromSexp for Vec<(A, B, C, D, E, F, G, H, I)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H,
I)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F, G, H, I)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F, G, H, I)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F, G, H, I)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp> TryFromSexp for Vec<Option<(A, B, C, D, E, F, G, H, I)>>
where A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
I)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F, G, H, I)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F, G, H, I)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F, G, H,
I)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp> TryFromSexp for
(A, B, C, D, E, F, G, H, I, J) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError>,
<G as TryFromSexp>::Error: Into<SexpError>,
<H as TryFromSexp>::Error: Into<SexpError>,
<I as TryFromSexp>::Error: Into<SexpError>,
<J as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
H::NATIVE_BORROW, I::NATIVE_BORROW, J::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na() || self.6.__mx_has_na() ||
self.7.__mx_has_na() || self.8.__mx_has_na() ||
self.9.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 10, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match <G as
TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match <H as
TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match <I as
TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
},
match <J as
TryFromSexp>::try_from_sexp(sexp.vector_elt(9 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(9, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
partial.9.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 10, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match unsafe {
<G as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match unsafe {
<H as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match unsafe {
<I as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
},
match unsafe {
<J as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(9
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(9, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
partial.9.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp> TryFromSexp for
Option<(A, B, C, D, E, F, G, H, I, J)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError>,
H::Error: Into<SexpError>, I::Error: Into<SexpError>,
J::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F, G, H, I, J)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I,
J)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
<(A, B, C, D, E, F, G, H, I, J)>::try_from_sexp(sexp).map(Some)
}
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F, G, H, I,
J)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp> TryFromSexp for
Vec<(A, B, C, D, E, F, G, H, I, J)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError>,
H::Error: Into<SexpError>, I::Error: Into<SexpError>,
J::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H, I,
J)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F, G, H, I, J)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F, G, H, I, J)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F, G, H, I,
J)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp> TryFromSexp for
Vec<Option<(A, B, C, D, E, F, G, H, I, J)>> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError>, J::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
I, J)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F, G, H, I, J)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F, G, H, I, J)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F, G, H, I,
J)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
(A, B, C, D, E, F, G, H, I, J, K) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError>,
<G as TryFromSexp>::Error: Into<SexpError>,
<H as TryFromSexp>::Error: Into<SexpError>,
<I as TryFromSexp>::Error: Into<SexpError>,
<J as TryFromSexp>::Error: Into<SexpError>,
<K as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
H::NATIVE_BORROW, I::NATIVE_BORROW, J::NATIVE_BORROW,
K::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na() || self.6.__mx_has_na() ||
self.7.__mx_has_na() || self.8.__mx_has_na() ||
self.9.__mx_has_na() || self.10.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 11, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match <G as
TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match <H as
TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match <I as
TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
},
match <J as
TryFromSexp>::try_from_sexp(sexp.vector_elt(9 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(9, e.into()); None }
},
match <K as
TryFromSexp>::try_from_sexp(sexp.vector_elt(10 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(10, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
partial.9.unwrap(), partial.10.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 11, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match unsafe {
<G as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match unsafe {
<H as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match unsafe {
<I as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
},
match unsafe {
<J as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(9
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(9, e.into()); None }
},
match unsafe {
<K as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(10
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(10, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
partial.9.unwrap(), partial.10.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
Option<(A, B, C, D, E, F, G, H, I, J, K)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError>,
H::Error: Into<SexpError>, I::Error: Into<SexpError>,
J::Error: Into<SexpError>, K::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F, G, H, I, J, K)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I, J,
K)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
<(A, B, C, D, E, F, G, H, I, J, K)>::try_from_sexp(sexp).map(Some)
}
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F, G, H, I, J,
K)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
Vec<(A, B, C, D, E, F, G, H, I, J, K)> where A::Error: Into<SexpError>,
B::Error: Into<SexpError>, C::Error: Into<SexpError>,
D::Error: Into<SexpError>, E::Error: Into<SexpError>,
F::Error: Into<SexpError>, G::Error: Into<SexpError>,
H::Error: Into<SexpError>, I::Error: Into<SexpError>,
J::Error: Into<SexpError>, K::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H, I, J,
K)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F, G, H, I, J, K)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F, G, H, I, J, K)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F, G, H, I, J,
K)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp> TryFromSexp for
Vec<Option<(A, B, C, D, E, F, G, H, I, J, K)>> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError>, J::Error: Into<SexpError>,
K::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
I, J, K)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F, G, H, I, J,
K)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F, G, H, I, J,
K)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F, G, H, I, J,
K)>>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
TryFromSexp for (A, B, C, D, E, F, G, H, I, J, K, L) where
<A as TryFromSexp>::Error: Into<SexpError>,
<B as TryFromSexp>::Error: Into<SexpError>,
<C as TryFromSexp>::Error: Into<SexpError>,
<D as TryFromSexp>::Error: Into<SexpError>,
<E as TryFromSexp>::Error: Into<SexpError>,
<F as TryFromSexp>::Error: Into<SexpError>,
<G as TryFromSexp>::Error: Into<SexpError>,
<H as TryFromSexp>::Error: Into<SexpError>,
<I as TryFromSexp>::Error: Into<SexpError>,
<J as TryFromSexp>::Error: Into<SexpError>,
<K as TryFromSexp>::Error: Into<SexpError>,
<L as TryFromSexp>::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::tuple(&[A::NATIVE_BORROW,
B::NATIVE_BORROW, C::NATIVE_BORROW, D::NATIVE_BORROW,
E::NATIVE_BORROW, F::NATIVE_BORROW, G::NATIVE_BORROW,
H::NATIVE_BORROW, I::NATIVE_BORROW, J::NATIVE_BORROW,
K::NATIVE_BORROW, L::NATIVE_BORROW]);
fn __mx_has_na(&self) -> bool {
self.0.__mx_has_na() || self.1.__mx_has_na() || self.2.__mx_has_na()
|| self.3.__mx_has_na() || self.4.__mx_has_na() ||
self.5.__mx_has_na() || self.6.__mx_has_na() ||
self.7.__mx_has_na() || self.8.__mx_has_na() ||
self.9.__mx_has_na() || self.10.__mx_has_na() ||
self.11.__mx_has_na()
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
check_list_shape(sexp, 12, || sexp.len())?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match <A as
TryFromSexp>::try_from_sexp(sexp.vector_elt(0 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match <B as
TryFromSexp>::try_from_sexp(sexp.vector_elt(1 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match <C as
TryFromSexp>::try_from_sexp(sexp.vector_elt(2 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match <D as
TryFromSexp>::try_from_sexp(sexp.vector_elt(3 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match <E as
TryFromSexp>::try_from_sexp(sexp.vector_elt(4 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match <F as
TryFromSexp>::try_from_sexp(sexp.vector_elt(5 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match <G as
TryFromSexp>::try_from_sexp(sexp.vector_elt(6 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match <H as
TryFromSexp>::try_from_sexp(sexp.vector_elt(7 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match <I as
TryFromSexp>::try_from_sexp(sexp.vector_elt(8 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
},
match <J as
TryFromSexp>::try_from_sexp(sexp.vector_elt(9 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(9, e.into()); None }
},
match <K as
TryFromSexp>::try_from_sexp(sexp.vector_elt(10 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(10, e.into()); None }
},
match <L as
TryFromSexp>::try_from_sexp(sexp.vector_elt(11 as isize)) {
Ok(v) => Some(v),
Err(e) => { errors.push(11, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
partial.9.unwrap(), partial.10.unwrap(), partial.11.unwrap()))
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
check_list_shape(sexp, 12, || unsafe { sexp.len_unchecked() })?;
let mut errors = crate::from_r::ElementErrors::default();
let partial =
(match unsafe {
<A as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(0
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(0, e.into()); None }
},
match unsafe {
<B as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(1
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(1, e.into()); None }
},
match unsafe {
<C as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(2
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(2, e.into()); None }
},
match unsafe {
<D as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(3
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(3, e.into()); None }
},
match unsafe {
<E as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(4
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(4, e.into()); None }
},
match unsafe {
<F as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(5
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(5, e.into()); None }
},
match unsafe {
<G as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(6
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(6, e.into()); None }
},
match unsafe {
<H as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(7
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(7, e.into()); None }
},
match unsafe {
<I as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(8
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(8, e.into()); None }
},
match unsafe {
<J as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(9
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(9, e.into()); None }
},
match unsafe {
<K as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(10
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(10, e.into()); None }
},
match unsafe {
<L as
TryFromSexp>::try_from_sexp_unchecked(sexp.vector_elt_unchecked(11
as isize))
} {
Ok(v) => Some(v),
Err(e) => { errors.push(11, e.into()); None }
});
let partial = errors.into_result(partial)?;
Ok((partial.0.unwrap(), partial.1.unwrap(), partial.2.unwrap(),
partial.3.unwrap(), partial.4.unwrap(), partial.5.unwrap(),
partial.6.unwrap(), partial.7.unwrap(), partial.8.unwrap(),
partial.9.unwrap(), partial.10.unwrap(), partial.11.unwrap()))
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
TryFromSexp for Option<(A, B, C, D, E, F, G, H, I, J, K, L)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError>, J::Error: Into<SexpError>,
K::Error: Into<SexpError>, L::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
<(A, B, C, D, E, F, G, H, I, J, K, L)>::NATIVE_BORROW;
fn __mx_has_na(&self) -> bool {
self.as_ref().is_some_and(<(A, B, C, D, E, F, G, H, I, J, K,
L)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
<(A, B, C, D, E, F, G, H, I, J, K,
L)>::try_from_sexp(sexp).map(Some)
}
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
if sexp.type_of() == SEXPTYPE::NILSXP {
Ok(None)
} else {
unsafe {
<(A, B, C, D, E, F, G, H, I, J, K,
L)>::try_from_sexp_unchecked(sexp).map(Some)
}
}
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
TryFromSexp for Vec<(A, B, C, D, E, F, G, H, I, J, K, L)> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError>, J::Error: Into<SexpError>,
K::Error: Into<SexpError>, L::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<(A, B, C, D, E, F, G, H, I, J,
K, L)>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<(A, B, C, D, E, F, G, H, I, J, K, L)>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<(A, B, C, D, E, F, G, H, I, J, K, L)>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !false || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<(A, B, C, D, E, F, G, H, I, J, K,
L)>::try_from_sexp_unchecked(row)
}
})
}
}
impl<A: TryFromSexp, B: TryFromSexp, C: TryFromSexp, D: TryFromSexp,
E: TryFromSexp, F: TryFromSexp, G: TryFromSexp, H: TryFromSexp,
I: TryFromSexp, J: TryFromSexp, K: TryFromSexp, L: TryFromSexp>
TryFromSexp for Vec<Option<(A, B, C, D, E, F, G, H, I, J, K, L)>> where
A::Error: Into<SexpError>, B::Error: Into<SexpError>,
C::Error: Into<SexpError>, D::Error: Into<SexpError>,
E::Error: Into<SexpError>, F::Error: Into<SexpError>,
G::Error: Into<SexpError>, H::Error: Into<SexpError>,
I::Error: Into<SexpError>, J::Error: Into<SexpError>,
K::Error: Into<SexpError>, L::Error: Into<SexpError> {
type Error = SexpError;
const NATIVE_BORROW: Option<crate::from_r::NativeBorrow> =
crate::from_r::NativeBorrow::in_list(<Option<(A, B, C, D, E, F, G, H,
I, J, K, L)>>::NATIVE_BORROW);
fn __mx_has_na(&self) -> bool {
self.iter().any(<Option<(A, B, C, D, E, F, G, H, I, J, K,
L)>>::__mx_has_na)
}
fn try_from_sexp(sexp: SEXP) -> Result<Self, Self::Error> {
Self::__mx_try_from_sexp_with_check(sexp,
&crate::from_r::no_element_check)
}
unsafe fn try_from_sexp_unchecked(sexp: SEXP)
-> Result<Self, Self::Error> {
unsafe {
Self::__mx_try_from_sexp_unchecked_with_check(sexp,
&crate::from_r::no_element_check)
}
}
fn __mx_try_from_sexp_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
<Option<(A, B, C, D, E, F, G, H, I, J, K,
L)>>::try_from_sexp(row)
})
}
unsafe fn __mx_try_from_sexp_unchecked_with_check(sexp: SEXP,
check: &crate::from_r::ElementCheck<'_>) -> Result<Self, SexpError> {
crate::from_r::map_vecsxp_batched(sexp,
|row|
{
if !true || row.type_of() != SEXPTYPE::NILSXP {
check(row)?;
}
unsafe {
<Option<(A, B, C, D, E, F, G, H, I, J, K,
L)>>::try_from_sexp_unchecked(row)
}
})
}
}crate::tuple_macros::for_each_tuple!(impl_tuple_try_from_sexp);