agent_control_specification_core 0.3.1-beta.0

Stateless Rust core for Agent Control Specification
Documentation
use serde::{Deserialize, Serialize};

#[derive(
    Debug, Default, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize,
)]
#[serde(rename_all = "snake_case")]
pub enum PerfTelemetry {
    #[default]
    Off,
    External,
    Full,
}

impl PerfTelemetry {
    pub const fn emit_external_events(self) -> bool {
        !matches!(self, Self::Off)
    }

    pub const fn emit_stage_events(self) -> bool {
        matches!(self, Self::Full)
    }

    pub const fn as_u8(self) -> u8 {
        match self {
            Self::Off => 0,
            Self::External => 1,
            Self::Full => 2,
        }
    }

    pub const fn from_u8(value: u8) -> Option<Self> {
        match value {
            0 => Some(Self::Off),
            1 => Some(Self::External),
            2 => Some(Self::Full),
            _ => None,
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn default_is_off() {
        assert_eq!(PerfTelemetry::default(), PerfTelemetry::Off);
    }

    #[test]
    fn wire_roundtrips() {
        for level in [
            PerfTelemetry::Off,
            PerfTelemetry::External,
            PerfTelemetry::Full,
        ] {
            assert_eq!(PerfTelemetry::from_u8(level.as_u8()), Some(level));
        }
        assert_eq!(PerfTelemetry::from_u8(3), None);
        assert_eq!(PerfTelemetry::from_u8(255), None);
    }

    #[test]
    fn gating_matches_contract() {
        assert!(!PerfTelemetry::Off.emit_external_events());
        assert!(!PerfTelemetry::Off.emit_stage_events());
        assert!(PerfTelemetry::External.emit_external_events());
        assert!(!PerfTelemetry::External.emit_stage_events());
        assert!(PerfTelemetry::Full.emit_external_events());
        assert!(PerfTelemetry::Full.emit_stage_events());
    }
}