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 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}