pulse_pixelstream_types/
previs_dlss.rs1use 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 #[serde(default)]
44 pub process_started_at: Option<String>,
45 pub process_generation: u64,
46}
47
48#[myko_item]
49pub struct PrevisDlssRequest {
50 pub streamer_id: String,
51 pub request_id: String,
52 pub target: PrevisProcessTarget,
53 pub settings: DlssSettings,
54 #[serde(default)]
55 pub requested_at_ms: u64,
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn process_target_keeps_the_process_start_fence() {
64 let target: PrevisProcessTarget = serde_json::from_value(serde_json::json!({
65 "clusterName": "12of12",
66 "deploymentGeneration": 42,
67 "host": "render-13",
68 "processId": 4100,
69 "processGeneration": 42,
70 "processStartedAt": "2026-09-05T02:59:06+00:00"
71 }))
72 .unwrap();
73
74 assert_eq!(
75 target.process_started_at.as_deref(),
76 Some("2026-09-05T02:59:06+00:00")
77 );
78 }
79
80 #[test]
81 fn legacy_process_target_replays_without_the_process_start_fence() {
82 let target: PrevisProcessTarget = serde_json::from_value(serde_json::json!({
83 "clusterName": "12of12",
84 "deploymentGeneration": 42,
85 "host": "render-13",
86 "processId": 4100,
87 "processGeneration": 42
88 }))
89 .unwrap();
90
91 assert_eq!(target.process_started_at, None);
92 }
93
94 #[test]
95 fn settings_round_trip_without_optional_field_states() {
96 for settings in [
97 DlssSettings::Disabled,
98 DlssSettings::Enabled {
99 reconstruction: DlssReconstruction::RayReconstruction,
100 quality: DlssQuality::Quality,
101 },
102 ] {
103 let encoded = serde_json::to_value(&settings).unwrap();
104 assert_eq!(
105 serde_json::from_value::<DlssSettings>(encoded).unwrap(),
106 settings
107 );
108 }
109 assert_eq!(
110 serde_json::to_value(DlssSettings::Disabled).unwrap(),
111 serde_json::json!({ "state": "disabled" })
112 );
113 }
114}