Skip to main content

pulse_pixelstream_types/
previs_dlss.rs

1use myko::prelude::*;
2use myko::TS;
3use myko_macros::myko_item;
4use serde::{Deserialize, Serialize};
5
6#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
7#[serde(rename_all = "snake_case")]
8pub enum DlssReconstruction {
9    SuperResolution,
10    RayReconstruction,
11}
12
13#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
14#[serde(rename_all = "snake_case")]
15pub enum DlssQuality {
16    Unmanaged,
17    Auto,
18    UltraPerformance,
19    Performance,
20    Balanced,
21    Quality,
22    UltraQuality,
23    Dlaa,
24}
25
26#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
27#[serde(tag = "state", rename_all = "snake_case", deny_unknown_fields)]
28pub enum DlssSettings {
29    Disabled,
30    Enabled {
31        reconstruction: DlssReconstruction,
32        quality: DlssQuality,
33    },
34}
35
36#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
37#[serde(rename_all = "camelCase")]
38pub struct PrevisProcessTarget {
39    pub cluster_name: String,
40    pub deployment_generation: u64,
41    pub host: String,
42    pub process_id: u32,
43    pub process_generation: u64,
44}
45
46#[myko_item]
47pub struct PrevisDlssRequest {
48    pub streamer_id: String,
49    pub request_id: String,
50    pub target: PrevisProcessTarget,
51    pub settings: DlssSettings,
52    #[serde(default)]
53    pub requested_at_ms: u64,
54}
55
56#[cfg(test)]
57mod tests {
58    use super::*;
59
60    #[test]
61    fn settings_round_trip_without_optional_field_states() {
62        for settings in [
63            DlssSettings::Disabled,
64            DlssSettings::Enabled {
65                reconstruction: DlssReconstruction::RayReconstruction,
66                quality: DlssQuality::Quality,
67            },
68        ] {
69            let encoded = serde_json::to_value(&settings).unwrap();
70            assert_eq!(
71                serde_json::from_value::<DlssSettings>(encoded).unwrap(),
72                settings
73            );
74        }
75        assert_eq!(
76            serde_json::to_value(DlssSettings::Disabled).unwrap(),
77            serde_json::json!({ "state": "disabled" })
78        );
79    }
80}