use serde::{Deserialize, Serialize};
use time::Duration;
use uuid::Uuid;
pub use super::ids::InputId;
use crate::common::{DeinterlaceFieldOrder, DeinterlaceMode, MonitorType};
#[derive(Debug, Deserialize)]
pub(crate) struct Inputs {
#[serde(rename = "inputs")]
pub inputs: Vec<Input>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct Input {
#[serde(flatten)]
pub id: InputId,
#[serde(rename = "inputKind")]
pub kind: String,
#[serde(rename = "unversionedInputKind")]
pub unversioned_kind: String,
}
#[derive(Debug, Deserialize)]
pub(crate) struct InputKinds {
#[serde(rename = "inputKinds")]
pub input_kinds: Vec<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct SpecialInputs {
#[serde(rename = "desktop1")]
pub desktop1: Option<String>,
#[serde(rename = "desktop2")]
pub desktop2: Option<String>,
#[serde(rename = "mic1")]
pub mic1: Option<String>,
#[serde(rename = "mic2")]
pub mic2: Option<String>,
#[serde(rename = "mic3")]
pub mic3: Option<String>,
#[serde(rename = "mic4")]
pub mic4: Option<String>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct DefaultInputSettings<T> {
#[serde(rename = "defaultInputSettings")]
pub default_input_settings: T,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct InputSettings<T> {
#[serde(rename = "inputSettings")]
pub settings: T,
#[serde(rename = "inputKind")]
pub kind: String,
}
#[derive(Debug, Deserialize)]
pub(crate) struct InputMuted {
#[serde(rename = "inputMuted")]
pub muted: bool,
}
#[derive(Clone, Debug, Default, Deserialize, PartialEq, PartialOrd, Serialize)]
pub struct InputVolume {
#[serde(rename = "inputVolumeMul")]
pub mul: f32,
#[serde(rename = "inputVolumeDb")]
pub db: f32,
}
#[derive(Debug, Deserialize)]
pub(crate) struct AudioBalance {
#[serde(rename = "inputAudioBalance")]
pub audio_balance: f32,
}
#[derive(Debug, Deserialize)]
pub(crate) struct AudioSyncOffset {
#[serde(
rename = "inputAudioSyncOffset",
with = "crate::serde::duration_millis"
)]
pub input_audio_sync_offset: Duration,
}
#[derive(Debug, Deserialize)]
pub(crate) struct AudioMonitorType {
#[serde(rename = "monitorType")]
pub monitor_type: MonitorType,
}
#[derive(Debug, Deserialize)]
pub(crate) struct AudioTracks {
#[serde(rename = "inputAudioTracks", with = "crate::serde::audio_tracks")]
pub audio_tracks: [bool; 6],
}
#[derive(Debug, Deserialize)]
pub(crate) struct GetDeinterlaceMode {
#[serde(rename = "inputDeinterlaceMode")]
pub mode: DeinterlaceMode,
}
#[derive(Debug, Deserialize)]
pub(crate) struct GetDeinterlaceFieldOrder {
#[serde(rename = "inputDeinterlaceFieldOrder")]
pub field_order: DeinterlaceFieldOrder,
}
#[derive(Debug, Deserialize)]
pub(crate) struct ListPropertyItems {
#[serde(rename = "propertyItems")]
pub property_items: Vec<ListPropertyItem>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub struct ListPropertyItem {
#[serde(rename = "itemName")]
pub name: String,
#[serde(rename = "itemEnabled")]
pub enabled: bool,
#[serde(rename = "itemValue")]
pub value: serde_json::Value,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct SceneItemId {
#[serde(rename = "inputUuid")]
pub input_uuid: Uuid,
#[serde(rename = "sceneItemId")]
pub scene_item_id: i64,
}