use myko::prelude::*;
use myko::TS;
use myko_macros::myko_item;
use serde::{Deserialize, Serialize};
use crate::{DlssQuality, DlssSettings, PrevisProcessTarget};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, TS)]
#[serde(tag = "phase", rename_all = "snake_case")]
pub enum DlssConvergence {
Unavailable {
reason: String,
},
Observed {
settings: DlssSettings,
},
Applying {
desired: DlssSettings,
observed: Option<DlssSettings>,
},
Failed {
desired: DlssSettings,
observed: Option<DlssSettings>,
reason: String,
},
}
#[myko_item]
pub struct PrevisDlssStatus {
pub streamer_id: String,
#[serde(default)]
pub request_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub target: Option<PrevisProcessTarget>,
#[serde(default)]
pub supported_qualities: Vec<DlssQuality>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub quality_unavailable_reason: Option<String>,
pub convergence: DlssConvergence,
#[serde(default)]
pub updated_at_ms: u64,
}