use crate::schema::animated_properties::multi_dimensional::MultiDimensional;
use crate::schema::animated_properties::position::Position;
use crate::schema::animated_properties::split_vector::SplitVector;
use crate::schema::animated_properties::value::FloatValue;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Transform {
#[serde(rename = "a")]
#[serde(skip_serializing_if = "Option::is_none")]
pub anchor_point: Option<Position>,
#[serde(rename = "p")]
pub position: AnyTransformP,
#[serde(rename = "s")]
#[serde(skip_serializing_if = "Option::is_none")]
pub scale: Option<MultiDimensional>,
#[serde(rename = "r")]
#[serde(skip_serializing_if = "Option::is_none")]
pub rotation: Option<AnyTransformR>,
#[serde(rename = "sk")]
#[serde(skip_serializing_if = "Option::is_none")]
pub skew: Option<FloatValue>,
#[serde(rename = "sa")]
#[serde(skip_serializing_if = "Option::is_none")]
pub skew_axis: Option<FloatValue>,
#[serde(rename = "o")]
#[serde(skip_serializing_if = "Option::is_none")]
pub opacity: Option<FloatValue>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
pub enum AnyTransformP {
Position(Position),
SplitPosition(SplitVector),
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
#[expect(clippy::large_enum_variant, reason = "Deferred")]
pub enum AnyTransformR {
Rotation(FloatValue),
SplitRotation {
#[serde(rename = "x")]
x_rotation: FloatValue,
#[serde(rename = "y")]
y_rotation: FloatValue,
#[serde(rename = "z")]
z_rotation: FloatValue,
#[serde(rename = "or")]
orientation: MultiDimensional,
},
}