MCPcopy Create free account
hub / github.com/TankHQ/tank / build_array

Function build_array

tank-postgres/src/util.rs:199–229  ·  view source on GitHub ↗
(
    begin: usize,
    values: &mut Vec<Value>,
    element_ty: &Value,
    mut it: impl ExactSizeIterator<Item = &'a ArrayDimension> + Clone,
)

Source from the content-addressed store, hash-verified

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
227pub(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;

Callers 1

extract_valueFunction · 0.85

Calls 4

SomeClass · 0.85
nextMethod · 0.80
as_nullMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected