use alpha2_time::MediaTime;
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(tag = "type", rename_all = "snake_case", from = "TimeMapWire")]
pub enum TimeMap {
#[default]
Forward,
Reverse,
Freeze {
source_time: MediaTime,
},
Loop {
mode: LoopMode,
},
}
#[derive(Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[cfg_attr(feature = "schema", schemars(rename = "TimeMap"))]
#[serde(tag = "type", rename_all = "snake_case", deny_unknown_fields)]
pub(crate) enum TimeMapWire {
Forward {},
Reverse {},
Freeze {
source_time: MediaTime,
},
Loop {
mode: LoopMode,
},
}
impl From<TimeMapWire> for TimeMap {
fn from(wire: TimeMapWire) -> Self {
match wire {
TimeMapWire::Forward {} => Self::Forward,
TimeMapWire::Reverse {} => Self::Reverse,
TimeMapWire::Freeze { source_time } => Self::Freeze { source_time },
TimeMapWire::Loop { mode } => Self::Loop { mode },
}
}
}
#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum LoopMode {
Repeat,
PingPong,
}
pub const LOOP_FADE_SECONDS: f64 = 0.005;