fn fetch_field_index()

in crates/iceberg/src/arrow/record_batch_projector.rs [80:115]


    fn fetch_field_index<F1, F2>(
        fields: &Fields,
        index_vec: &mut Vec<usize>,
        target_field_id: i64,
        field_id_fetch_func: &F1,
        searchable_field_func: &F2,
    ) -> Result<Option<FieldRef>>
    where
        F1: Fn(&Field) -> Result<Option<i64>>,
        F2: Fn(&Field) -> bool,
    {
        for (pos, field) in fields.iter().enumerate() {
            let id = field_id_fetch_func(field)?;
            if let Some(id) = id {
                if target_field_id == id {
                    index_vec.push(pos);
                    return Ok(Some(field.clone()));
                }
            }
            if let DataType::Struct(inner) = field.data_type() {
                if searchable_field_func(field) {
                    if let Some(res) = Self::fetch_field_index(
                        inner,
                        index_vec,
                        target_field_id,
                        field_id_fetch_func,
                        searchable_field_func,
                    )? {
                        index_vec.push(pos);
                        return Ok(Some(res));
                    }
                }
            }
        }
        Ok(None)
    }