skar-schema 0.1.1

schema utilities for skar
Documentation
use std::collections::BTreeSet;

use anyhow::{Context, Result};

use arrow2::datatypes::Schema;

pub fn project_schema(
    schema: &Schema,
    field_selection: &BTreeSet<String>,
) -> Result<Schema, anyhow::Error> {
    let mut select_indices = Vec::new();
    for col_name in field_selection.iter() {
        let (idx, _) = schema
            .fields
            .iter()
            .enumerate()
            .find(|(_, f)| &f.name == col_name)
            .context(format!("couldn't find column {col_name} in schema"))?;
        select_indices.push(idx);
    }

    let schema: Schema = schema
        .fields
        .iter()
        .filter(|f| field_selection.contains(&f.name))
        .cloned()
        .collect::<Vec<_>>()
        .into();

    Ok(schema)
}