use serde::Deserialize;
use super::field_mask::{FIELD_NAMES, FieldMask};
#[derive(Debug, Deserialize, Clone, Default)]
pub struct OutputConfig {
#[serde(default)]
pub fields: Option<Vec<String>>,
}
impl OutputConfig {
#[must_use]
pub fn field_mask(&self) -> FieldMask {
match &self.fields {
None => FieldMask::ALL,
Some(names) if names.is_empty() => FieldMask::ALL,
Some(names) => FieldMask::from_names(names).unwrap_or(FieldMask::ALL),
}
}
#[must_use]
pub fn ordered_field_indices(&self) -> Vec<usize> {
match &self.fields {
None => (0..FIELD_NAMES.len()).collect(),
Some(names) if names.is_empty() => (0..FIELD_NAMES.len()).collect(),
Some(names) => names
.iter()
.filter_map(|name| FIELD_NAMES.iter().position(|&n| n == name.as_str()))
.collect(),
}
}
}