use serde::{Deserialize, Serialize};
use ts_rs::TS;
use super::commands::TransformPatch;
use super::primitives::{EasingType, SdfPrimitive, SymmetryMode};
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfHfxObject {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub shape: Option<SdfPrimitive>,
#[serde(skip_serializing_if = "Option::is_none")]
pub transform: Option<TransformPatch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub force_scale: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub range: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ease: Option<EasingType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reverse_easing: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub symmetry: Option<SymmetryMode>,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfHfxData {
#[serde(flatten)]
pub object: SdfHfxObject,
#[serde(skip_serializing_if = "Option::is_none")]
pub session_id: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub devices: Option<Vec<String>>,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, TS)]
#[serde(rename_all = "snake_case")]
pub enum SdfCommandMode {
Set,
Update,
Remove,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, TS)]
pub struct SdfCommand {
pub mode: SdfCommandMode,
#[serde(skip_serializing_if = "Option::is_none")]
pub from_space: Option<String>,
pub objects: Vec<SdfHfxObject>,
}
#[derive(Copy, Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfOutputConfigure {
pub state_output: bool,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfSessionState {
#[serde(default)]
pub objects: Vec<SdfHfxData>,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfSessionStatus {
pub count: u32,
}
#[derive(Copy, Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfSessionConfig {
pub state_output: bool,
}
#[derive(Clone, Debug, PartialEq, Default, Deserialize, Serialize, TS)]
pub struct SdfObjectList {
pub objects: Vec<SdfHfxData>,
}