algeon-datafusion 0.1.2

DataFusion physical-plan adapter for native GPU execution.
Documentation
use std::collections::BTreeMap;

use datafusion::physical_plan::metrics::Label;

pub(super) fn labels_by_name(labels: &[Label]) -> BTreeMap<&str, &str> {
    labels.iter().map(|label| (label.name(), label.value())).collect()
}

pub(super) fn string_label(labels: &BTreeMap<&str, &str>, name: &str) -> String {
    labels.get(name).copied().unwrap_or("unknown").to_string()
}

pub(super) fn optional_string_label(labels: &BTreeMap<&str, &str>, name: &str) -> Option<String> {
    let value = labels.get(name).copied()?;
    (value != "none").then(|| value.to_string())
}

pub(super) fn usize_label(labels: &BTreeMap<&str, &str>, name: &str) -> usize {
    labels.get(name).and_then(|value| value.parse().ok()).unwrap_or(0)
}

pub(super) fn bool_label(labels: &BTreeMap<&str, &str>, name: &str) -> bool {
    labels.get(name).and_then(|value| value.parse().ok()).unwrap_or(false)
}

pub(super) fn optional_usize_label(labels: &BTreeMap<&str, &str>, name: &str) -> Option<usize> {
    let value = labels.get(name).copied()?;
    (value != "none").then(|| value.parse().ok()).flatten()
}

pub(super) fn optional_i64_label(labels: &BTreeMap<&str, &str>, name: &str) -> Option<i64> {
    let value = labels.get(name).copied()?;
    (value != "none").then(|| value.parse().ok()).flatten()
}

pub(super) fn optional_usize(value: Option<usize>) -> String {
    value.map_or_else(|| "none".to_string(), |value| value.to_string())
}

pub(super) fn optional_i64(value: Option<i64>) -> String {
    value.map_or_else(|| "none".to_string(), |value| value.to_string())
}

pub(super) fn optional_str(value: Option<&str>) -> String {
    value.unwrap_or("none").to_string()
}