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,
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 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" })
);
}
}