dm_database_sqllog2db/pipeline/
output_config.rs1use serde::Deserialize;
2
3use super::field_mask::{FIELD_NAMES, FieldMask};
4
5#[derive(Debug, Deserialize, Clone, Default)]
7pub struct OutputConfig {
8 #[serde(default)]
10 pub fields: Option<Vec<String>>,
11}
12
13impl OutputConfig {
14 #[must_use]
16 pub fn field_mask(&self) -> FieldMask {
17 match &self.fields {
18 None => FieldMask::ALL,
19 Some(names) if names.is_empty() => FieldMask::ALL,
20 Some(names) => FieldMask::from_names(names).unwrap_or(FieldMask::ALL),
21 }
22 }
23
24 #[must_use]
26 pub fn ordered_field_indices(&self) -> Vec<usize> {
27 match &self.fields {
28 None => (0..FIELD_NAMES.len()).collect(),
29 Some(names) if names.is_empty() => (0..FIELD_NAMES.len()).collect(),
30 Some(names) => names
31 .iter()
32 .filter_map(|name| FIELD_NAMES.iter().position(|&n| n == name.as_str()))
33 .collect(),
34 }
35 }
36}