rulemorph 0.3.2

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
use serde::Serialize;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TransformTraceOptions {
    pub value_mode: TraceValueMode,
    pub max_events: Option<usize>,
    pub max_trace_bytes: Option<usize>,
    pub max_snapshot_bytes: Option<usize>,
}

impl TransformTraceOptions {
    pub fn raw() -> Self {
        Self {
            value_mode: TraceValueMode::Raw,
            max_events: None,
            max_trace_bytes: None,
            max_snapshot_bytes: None,
        }
    }

    pub fn redacted() -> Self {
        Self {
            value_mode: TraceValueMode::Redacted(TraceRedactionOptions::default()),
            max_events: None,
            max_trace_bytes: None,
            max_snapshot_bytes: None,
        }
    }

    pub fn metadata_only() -> Self {
        Self {
            value_mode: TraceValueMode::MetadataOnly,
            max_events: None,
            max_trace_bytes: None,
            max_snapshot_bytes: None,
        }
    }
}

impl Default for TransformTraceOptions {
    fn default() -> Self {
        Self::raw()
    }
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum TraceValueMode {
    Raw,
    Redacted(TraceRedactionOptions),
    MetadataOnly,
}

impl TraceValueMode {
    pub fn name(&self) -> TraceValueModeName {
        match self {
            TraceValueMode::Raw => TraceValueModeName::Raw,
            TraceValueMode::Redacted(_) => TraceValueModeName::Redacted,
            TraceValueMode::MetadataOnly => TraceValueModeName::MetadataOnly,
        }
    }
}

#[derive(Debug, Clone, Copy, Serialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum TraceValueModeName {
    Raw,
    Redacted,
    MetadataOnly,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraceRedactionOptions {
    pub secret_key_fragments: Vec<String>,
    pub oversized_value_bytes: Option<usize>,
}

impl Default for TraceRedactionOptions {
    fn default() -> Self {
        Self {
            secret_key_fragments: vec![
                "password".to_string(),
                "token".to_string(),
                "secret".to_string(),
                "authorization".to_string(),
                "api_key".to_string(),
                "api-key".to_string(),
                "apikey".to_string(),
                "bearer".to_string(),
            ],
            oversized_value_bytes: Some(64 * 1024),
        }
    }
}