use serde::{Deserialize, Serialize};
use crate::scene::dsl::{ImageNode, SvgNode};
use crate::scene::text::TextNode;
fn default_scene_blend() -> String {
"normal".to_string()
}
fn default_stroke_style() -> String {
"solid".to_string()
}
fn default_stroke_roughness() -> String {
"0".to_string()
}
fn default_stroke_copies() -> String {
"1".to_string()
}
fn default_stroke_texture() -> String {
"0".to_string()
}
fn default_stroke_bristles() -> String {
"0".to_string()
}
fn default_stroke_pressure() -> String {
"none".to_string()
}
fn default_stroke_pressure_min() -> String {
"1".to_string()
}
fn default_stroke_pressure_curve() -> String {
"1".to_string()
}
fn default_scene_zero() -> String {
"0".to_string()
}
fn default_scene_one() -> String {
"1".to_string()
}
fn default_scene_source_time() -> String {
"local".to_string()
}
fn default_scene_out_hold() -> String {
"hold".to_string()
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SceneRootNode {
pub id: String,
pub size: Option<(u32, u32)>,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "kind", rename_all = "camelCase")]
pub enum SceneNode {
Defs(DefsNode),
Timeline(SceneTimelineNode),
Track(SceneTrackNode),
Sequence(SceneSequenceNode),
Chain(SceneChainNode),
Palette(PaletteNode),
PixelGrid(PixelGridNode),
Text(Box<TextNode>),
Image(ImageNode),
Svg(SvgNode),
Rect(RectNode),
Circle(CircleNode),
Line(LineNode),
Polyline(PolylineNode),
Path(PathNode),
FaceJaw(FaceJawNode),
Shadow(ShadowNode),
Group(GroupNode),
Part(PartNode),
Repeat(RepeatNode),
Mask(MaskNode),
Precompose(PrecomposeNode),
Use(UseNode),
Layer(SceneLayerNode),
Camera(CameraNode),
Character(CharacterNode),
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SceneTimelineNode {
pub id: Option<String>,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SceneTrackNode {
pub id: Option<String>,
#[serde(default)]
pub role: Option<String>,
#[serde(default = "default_scene_track_space")]
pub space: String,
pub z: i32,
#[serde(default = "default_scene_zero")]
pub z_depth: String,
pub children: Vec<SceneNode>,
}
fn default_scene_track_space() -> String {
"world".to_string()
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SceneSequenceNode {
pub id: Option<String>,
pub from_ms: u64,
pub duration_ms: u64,
pub out: String,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SceneChainNode {
pub id: Option<String>,
pub from_ms: u64,
pub gap_ms: i64,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct DefsNode {
pub id: Option<String>,
pub gradients: Vec<GradientDef>,
#[serde(default)]
pub textures: Vec<TextureDef>,
#[serde(default)]
pub brushes: Vec<BrushDef>,
#[serde(default)]
pub masks: Vec<MaskNode>,
#[serde(default)]
pub precomposes: Vec<PrecomposeNode>,
#[serde(default)]
pub components: Vec<ComponentNode>,
#[serde(default)]
pub filters: Vec<FilterDef>,
#[serde(default)]
pub fonts: Vec<FontDef>,
#[serde(default)]
pub palettes: Vec<PaletteNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TextureDef {
pub id: String,
#[serde(default)]
pub src: String,
#[serde(default = "default_texture_kind")]
pub kind: String,
#[serde(default = "default_texture_scale")]
pub scale: String,
#[serde(default = "default_texture_strength")]
pub strength: String,
#[serde(default = "default_texture_contrast")]
pub contrast: String,
#[serde(default = "default_scene_zero")]
pub seed: String,
#[serde(default = "default_texture_brush_angle")]
pub brush_angle: String,
#[serde(default = "default_texture_bump_strength")]
pub bump_strength: String,
#[serde(default = "default_texture_relief")]
pub relief: String,
}
fn default_texture_kind() -> String {
"paper".to_string()
}
fn default_texture_scale() -> String {
"42".to_string()
}
fn default_texture_strength() -> String {
"0.25".to_string()
}
fn default_texture_contrast() -> String {
"0.5".to_string()
}
fn default_texture_brush_angle() -> String {
"-8".to_string()
}
fn default_texture_bump_strength() -> String {
"0.35".to_string()
}
fn default_texture_relief() -> String {
"0.45".to_string()
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ComponentNode {
pub id: String,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FontDef {
pub id: String,
pub family: Option<String>,
pub path: Option<String>,
pub fallback: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FilterDef {
pub id: String,
pub steps: Vec<FilterStepDef>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FilterStepDef {
pub kind: String,
pub radius: Option<String>,
pub saturation: Option<String>,
pub brightness: Option<String>,
pub contrast: Option<String>,
pub opacity: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PaletteNode {
pub id: String,
pub colors: Vec<PaletteColorDef>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PaletteColorDef {
pub key: String,
pub value: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PixelGridNode {
pub id: Option<String>,
pub x: String,
pub y: String,
pub pixel_size: String,
pub palette: String,
pub opacity: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
pub data: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BrushDef {
pub id: String,
pub stroke: Option<String>,
pub fill: Option<String>,
pub stroke_width: Option<String>,
pub opacity: Option<String>,
pub line_cap: Option<String>,
pub line_join: Option<String>,
pub taper_start: Option<String>,
pub taper_end: Option<String>,
pub stroke_style: Option<String>,
pub stroke_roughness: Option<String>,
pub stroke_copies: Option<String>,
pub stroke_texture: Option<String>,
pub stroke_bristles: Option<String>,
pub stroke_pressure: Option<String>,
pub stroke_pressure_min: Option<String>,
pub stroke_pressure_curve: Option<String>,
pub blend: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(tag = "kind", rename_all = "camelCase")]
pub enum GradientDef {
Linear(LinearGradientDef),
Radial(RadialGradientDef),
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LinearGradientDef {
pub id: String,
pub x1: String,
pub y1: String,
pub x2: String,
pub y2: String,
pub stops: Vec<GradientStop>,
pub units: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RadialGradientDef {
pub id: String,
pub cx: String,
pub cy: String,
pub r: String,
pub fx: Option<String>,
pub fy: Option<String>,
pub stops: Vec<GradientStop>,
pub units: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GradientStop {
pub offset: f32,
pub color: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RectNode {
pub id: Option<String>,
pub x: String,
pub y: String,
pub width: String,
pub height: String,
pub radius: String,
pub color: String,
pub stroke: Option<String>,
pub stroke_width: String,
pub opacity: String,
pub rotation: String,
#[serde(default = "default_scene_one")]
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
#[serde(default)]
pub texture: Option<String>,
#[serde(default = "default_scene_one")]
pub texture_opacity: String,
#[serde(default = "default_scene_one")]
pub texture_scale: String,
#[serde(default = "default_scene_zero")]
pub texture_mask: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CircleNode {
pub id: Option<String>,
pub x: String,
pub y: String,
pub radius: String,
pub color: String,
pub stroke: Option<String>,
pub stroke_width: String,
pub opacity: String,
#[serde(default = "default_scene_zero")]
pub rotation: String,
#[serde(default = "default_scene_one")]
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
#[serde(default)]
pub texture: Option<String>,
#[serde(default = "default_scene_one")]
pub texture_opacity: String,
#[serde(default = "default_scene_one")]
pub texture_scale: String,
#[serde(default = "default_scene_zero")]
pub texture_mask: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LineNode {
pub id: Option<String>,
#[serde(default = "default_scene_zero")]
pub x: String,
#[serde(default = "default_scene_zero")]
pub y: String,
#[serde(default = "default_scene_zero")]
pub rotation: String,
#[serde(default = "default_scene_one")]
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
pub x1: String,
pub y1: String,
pub x2: String,
pub y2: String,
pub width: String,
pub color: String,
pub opacity: String,
pub line_cap: String,
pub taper_start: String,
pub taper_end: String,
#[serde(default = "default_stroke_style")]
pub stroke_style: String,
#[serde(default = "default_stroke_roughness")]
pub stroke_roughness: String,
#[serde(default = "default_stroke_copies")]
pub stroke_copies: String,
#[serde(default = "default_stroke_texture")]
pub stroke_texture: String,
#[serde(default = "default_stroke_bristles")]
pub stroke_bristles: String,
#[serde(default = "default_stroke_pressure")]
pub stroke_pressure: String,
#[serde(default = "default_stroke_pressure_min")]
pub stroke_pressure_min: String,
#[serde(default = "default_stroke_pressure_curve")]
pub stroke_pressure_curve: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PolylineNode {
pub id: Option<String>,
#[serde(default = "default_scene_zero")]
pub x: String,
#[serde(default = "default_scene_zero")]
pub y: String,
#[serde(default = "default_scene_zero")]
pub rotation: String,
#[serde(default = "default_scene_one")]
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
pub points: String,
pub stroke: String,
pub stroke_width: String,
pub opacity: String,
pub trim_start: String,
pub trim_end: String,
pub line_cap: String,
pub line_join: String,
pub taper_start: String,
pub taper_end: String,
#[serde(default = "default_stroke_style")]
pub stroke_style: String,
#[serde(default = "default_stroke_roughness")]
pub stroke_roughness: String,
#[serde(default = "default_stroke_copies")]
pub stroke_copies: String,
#[serde(default = "default_stroke_texture")]
pub stroke_texture: String,
#[serde(default = "default_stroke_bristles")]
pub stroke_bristles: String,
#[serde(default = "default_stroke_pressure")]
pub stroke_pressure: String,
#[serde(default = "default_stroke_pressure_min")]
pub stroke_pressure_min: String,
#[serde(default = "default_stroke_pressure_curve")]
pub stroke_pressure_curve: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PathNode {
pub id: Option<String>,
pub brush: Option<String>,
#[serde(default = "default_scene_zero")]
pub x: String,
#[serde(default = "default_scene_zero")]
pub y: String,
#[serde(default = "default_scene_zero")]
pub rotation: String,
#[serde(default = "default_scene_one")]
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
pub d: String,
pub stroke: String,
pub fill: Option<String>,
pub stroke_width: String,
pub opacity: String,
pub trim_start: String,
pub trim_end: String,
pub line_cap: String,
pub line_join: String,
pub taper_start: String,
pub taper_end: String,
#[serde(default = "default_stroke_style")]
pub stroke_style: String,
#[serde(default = "default_stroke_roughness")]
pub stroke_roughness: String,
#[serde(default = "default_stroke_copies")]
pub stroke_copies: String,
#[serde(default = "default_stroke_texture")]
pub stroke_texture: String,
#[serde(default = "default_stroke_bristles")]
pub stroke_bristles: String,
#[serde(default = "default_stroke_pressure")]
pub stroke_pressure: String,
#[serde(default = "default_stroke_pressure_min")]
pub stroke_pressure_min: String,
#[serde(default = "default_stroke_pressure_curve")]
pub stroke_pressure_curve: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
#[serde(default)]
pub texture: Option<String>,
#[serde(default = "default_scene_one")]
pub texture_opacity: String,
#[serde(default = "default_scene_one")]
pub texture_scale: String,
#[serde(default = "default_scene_zero")]
pub texture_mask: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FaceJawNode {
pub id: Option<String>,
pub x: String,
pub y: String,
pub width: String,
pub height: String,
pub cheek_width: String,
pub chin_width: String,
pub chin_sharpness: String,
pub jaw_ease: String,
pub scale: String,
pub closed: String,
pub stroke: String,
pub fill: Option<String>,
pub stroke_width: String,
pub opacity: String,
pub trim_start: String,
pub trim_end: String,
pub line_cap: String,
pub line_join: String,
pub taper_start: String,
pub taper_end: String,
#[serde(default = "default_stroke_style")]
pub stroke_style: String,
#[serde(default = "default_stroke_roughness")]
pub stroke_roughness: String,
#[serde(default = "default_stroke_copies")]
pub stroke_copies: String,
#[serde(default = "default_stroke_texture")]
pub stroke_texture: String,
#[serde(default = "default_stroke_bristles")]
pub stroke_bristles: String,
#[serde(default = "default_stroke_pressure")]
pub stroke_pressure: String,
#[serde(default = "default_stroke_pressure_min")]
pub stroke_pressure_min: String,
#[serde(default = "default_stroke_pressure_curve")]
pub stroke_pressure_curve: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ShadowNode {
pub id: Option<String>,
pub x: String,
pub y: String,
pub blur: String,
pub color: String,
pub opacity: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GroupNode {
pub id: Option<String>,
pub brush: Option<String>,
pub x: String,
pub y: String,
pub rotation: String,
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
pub deform_grid: Option<String>,
pub grid_from: Option<String>,
pub grid_to: Option<String>,
#[serde(default = "default_scene_zero")]
pub deform_amount: String,
#[serde(default)]
pub mask: Option<String>,
#[serde(default)]
pub mask_from: Option<String>,
#[serde(default = "default_scene_mask_mode")]
pub mask_mode: String,
pub opacity: String,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PartNode {
pub id: Option<String>,
pub label: Option<String>,
pub role: Option<String>,
pub attach_to: Option<String>,
pub brush: Option<String>,
pub x: String,
pub y: String,
pub rotation: String,
pub scale: String,
pub opacity: String,
pub anchor_x: String,
pub anchor_y: String,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RepeatNode {
pub id: Option<String>,
pub count: String,
pub x: String,
pub y: String,
pub rotation: String,
pub scale: String,
pub opacity: String,
pub x_step: String,
pub y_step: String,
pub rotation_step: String,
pub scale_step: String,
pub opacity_step: String,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct MaskNode {
pub id: Option<String>,
#[serde(default)]
pub follow: Option<String>,
pub shape: String,
pub x: String,
pub y: String,
pub width: String,
pub height: String,
pub radius: String,
pub d: Option<String>,
#[serde(default = "default_scene_zero")]
pub feather: String,
pub opacity: String,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PrecomposeNode {
pub id: String,
#[serde(default)]
pub duration_ms: Option<u64>,
pub size: Option<(u32, u32)>,
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UseNode {
pub id: Option<String>,
pub ref_id: String,
pub x: String,
pub y: String,
pub rotation: String,
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
pub opacity: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SceneLayerNode {
pub id: Option<String>,
#[serde(default)]
pub source: Option<String>,
#[serde(default)]
pub is_3d: bool,
pub x: String,
pub y: String,
#[serde(default = "default_scene_zero")]
pub z: String,
#[serde(default = "default_scene_zero")]
pub rotation_x: String,
#[serde(default = "default_scene_zero")]
pub rotation_y: String,
pub rotation: String,
#[serde(default = "default_scene_perspective")]
pub perspective: String,
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
#[serde(default)]
pub z_depth: Option<String>,
pub opacity: String,
#[serde(default = "default_scene_blend")]
pub blend: String,
#[serde(default)]
pub effect: Option<String>,
#[serde(default = "default_scene_source_time")]
pub source_time: String,
#[serde(default)]
pub time_offset_ms: i64,
#[serde(default = "default_scene_one")]
pub playback_rate: String,
#[serde(default = "default_scene_out_hold")]
pub out: String,
#[serde(default)]
pub mask: Option<String>,
#[serde(default)]
pub mask_from: Option<String>,
#[serde(default = "default_scene_mask_mode")]
pub mask_mode: String,
#[serde(default)]
pub matte: Option<String>,
#[serde(default)]
pub matte_from: Option<String>,
#[serde(default = "default_scene_matte_mode")]
pub matte_mode: String,
#[serde(default = "default_scene_false")]
pub invert_matte: String,
#[serde(default)]
pub children: Vec<SceneNode>,
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CameraNode {
pub id: Option<String>,
pub x: String,
pub y: String,
pub target_x: Option<String>,
pub target_y: Option<String>,
pub anchor_x: String,
pub anchor_y: String,
#[serde(default = "default_scene_zero")]
pub offset_x: String,
#[serde(default = "default_scene_zero")]
pub offset_y: String,
#[serde(default = "default_scene_zero")]
pub shake_x: String,
#[serde(default = "default_scene_zero")]
pub shake_y: String,
pub zoom: String,
pub rotation: String,
pub opacity: String,
pub follow: Option<String>,
#[serde(default)]
pub dead_zone: Option<String>,
pub viewport: Option<String>,
pub world_bounds: Option<String>,
pub children: Vec<SceneNode>,
}
fn default_scene_mask_mode() -> String {
"alpha".to_string()
}
fn default_scene_perspective() -> String {
"900".to_string()
}
fn default_scene_matte_mode() -> String {
"alpha".to_string()
}
fn default_scene_false() -> String {
"false".to_string()
}
#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CharacterNode {
pub id: Option<String>,
#[serde(default)]
pub rig: Option<String>,
#[serde(default)]
pub model_profile: Option<String>,
pub x: String,
pub y: String,
pub rotation: String,
pub scale: String,
#[serde(default = "default_scene_one")]
pub scale_x: String,
#[serde(default = "default_scene_one")]
pub scale_y: String,
#[serde(default = "default_scene_zero")]
pub skew_x: String,
#[serde(default = "default_scene_zero")]
pub skew_y: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_x: String,
#[serde(default = "default_scene_zero")]
pub transform_origin_y: String,
pub opacity: String,
pub children: Vec<SceneNode>,
}