pulse-pixelstream-types 0.14.1

Shared Myko entity and command types for the Pulse Pixelstream recording cell.
Documentation
use myko::prelude::*;
use myko::TS;
use myko_macros::myko_item;
use serde::{Deserialize, Serialize};

#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
#[serde(rename_all = "snake_case")]
pub enum DlssReconstruction {
    SuperResolution,
    RayReconstruction,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
#[serde(rename_all = "snake_case")]
pub enum DlssQuality {
    Unmanaged,
    Auto,
    UltraPerformance,
    Performance,
    Balanced,
    Quality,
    UltraQuality,
    Dlaa,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
#[serde(tag = "state", rename_all = "snake_case", deny_unknown_fields)]
pub enum DlssSettings {
    Disabled,
    Enabled {
        reconstruction: DlssReconstruction,
        quality: DlssQuality,
    },
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
#[serde(rename_all = "camelCase")]
pub struct PrevisProcessTarget {
    pub cluster_name: String,
    pub deployment_generation: u64,
    pub host: String,
    pub process_id: u32,
    #[serde(default)]
    pub process_started_at: Option<String>,
    pub process_generation: u64,
}

#[myko_item]
pub struct PrevisDlssRequest {
    pub streamer_id: String,
    pub request_id: String,
    pub target: PrevisProcessTarget,
    pub settings: DlssSettings,
    #[serde(default)]
    pub requested_at_ms: u64,
}

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

    #[test]
    fn process_target_keeps_the_process_start_fence() {
        let target: PrevisProcessTarget = serde_json::from_value(serde_json::json!({
            "clusterName": "12of12",
            "deploymentGeneration": 42,
            "host": "render-13",
            "processId": 4100,
            "processGeneration": 42,
            "processStartedAt": "2026-09-05T02:59:06+00:00"
        }))
        .unwrap();

        assert_eq!(
            target.process_started_at.as_deref(),
            Some("2026-09-05T02:59:06+00:00")
        );
    }

    #[test]
    fn legacy_process_target_replays_without_the_process_start_fence() {
        let target: PrevisProcessTarget = serde_json::from_value(serde_json::json!({
            "clusterName": "12of12",
            "deploymentGeneration": 42,
            "host": "render-13",
            "processId": 4100,
            "processGeneration": 42
        }))
        .unwrap();

        assert_eq!(target.process_started_at, None);
    }

    #[test]
    fn settings_round_trip_without_optional_field_states() {
        for settings in [
            DlssSettings::Disabled,
            DlssSettings::Enabled {
                reconstruction: DlssReconstruction::RayReconstruction,
                quality: DlssQuality::Quality,
            },
        ] {
            let encoded = serde_json::to_value(&settings).unwrap();
            assert_eq!(
                serde_json::from_value::<DlssSettings>(encoded).unwrap(),
                settings
            );
        }
        assert_eq!(
            serde_json::to_value(DlssSettings::Disabled).unwrap(),
            serde_json::json!({ "state": "disabled" })
        );
    }
}