(
begin: usize,
values: &mut Vec<Value>,
element_ty: &Value,
mut it: impl ExactSizeIterator<Item = &'a ArrayDimension> + Clone,
)
| 197 | values: &mut Vec<Value>, |
| 198 | element_ty: &Value, |
| 199 | mut it: impl ExactSizeIterator<Item = &'a ArrayDimension> + Clone, |
| 200 | ) -> Result<Value, Box<dyn Error + Sync + Send>> { |
| 201 | let dimension = it.next().expect("Must have one dimension at least"); |
| 202 | let len = dimension.len as u32; |
| 203 | Ok(if it.len() == 0 { |
| 204 | let begin = begin as u32 * len; |
| 205 | // Last array |
| 206 | Value::Array( |
| 207 | Some( |
| 208 | (begin..(begin + len)) |
| 209 | .map(|i| mem::take(&mut values[i as usize])) |
| 210 | .collect(), |
| 211 | ), |
| 212 | Box::new(element_ty.clone()), |
| 213 | len, |
| 214 | ) |
| 215 | } else { |
| 216 | let first = build_array(begin, values, element_ty, it.clone())?; |
| 217 | let nested_ty = first.as_null(); |
| 218 | let elements = iter::chain( |
| 219 | iter::once(Ok(first)), |
| 220 | (1..len).map(|i| build_array(i as usize + begin, values, &nested_ty, it.clone())), |
| 221 | ) |
| 222 | .collect::<Result<_, _>>()?; |
| 223 | Value::Array(Some(elements), Box::new(nested_ty), len) |
| 224 | }) |
| 225 | } |
| 226 | |
| 227 | pub(crate) fn flatten_array<'a>( |
| 228 | values: &'a [Value], |
| 229 | mut element_type: &'a Value, |
| 230 | ) -> (Vec<&'a Value>, Vec<ArrayDimension>, Type) { |
| 231 | let mut dimensions = Vec::new(); |
| 232 | let mut current_level = values; |
no test coverage detected