use serde::{Deserialize, Serialize};
use time::Duration;
pub use super::ids::{CurrentSceneTransitionId, TransitionId};
#[derive(Debug, Deserialize)]
pub(crate) struct TransitionKinds {
#[serde(rename = "transitionKinds")]
pub transition_kinds: Vec<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct SceneTransitionList {
#[serde(flatten)]
pub current_scene_transition: Option<CurrentSceneTransitionId>,
#[serde(rename = "currentSceneTransitionKind")]
pub current_scene_transition_kind: Option<String>,
#[serde(rename = "transitions")]
pub transitions: Vec<Transition>,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
pub struct Transition {
#[serde(flatten)]
pub id: TransitionId,
#[serde(rename = "transitionKind")]
pub kind: String,
#[serde(rename = "transitionFixed")]
pub fixed: bool,
#[serde(rename = "transitionConfigurable")]
pub configurable: bool,
}
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub struct CurrentSceneTransition {
#[serde(flatten)]
pub id: TransitionId,
#[serde(rename = "transitionKind")]
pub kind: String,
#[serde(rename = "transitionFixed")]
pub fixed: bool,
#[serde(
rename = "transitionDuration",
with = "crate::serde::duration_millis::option"
)]
pub duration: Option<Duration>,
#[serde(rename = "transitionConfigurable")]
pub configurable: bool,
#[serde(rename = "transitionSettings")]
pub settings: Option<serde_json::Value>,
}
#[derive(Debug, Deserialize)]
pub(crate) struct TransitionCursor {
#[serde(rename = "transitionCursor")]
pub transition_cursor: f32,
}