use crate::schema::constants::matte_mode::MatteMode;
use crate::schema::helpers::int_boolean::BoolInt;
use crate::schema::helpers::mask::Mask;
use crate::schema::helpers::transform::Transform;
use crate::schema::{constants::blend_mode::BlendMode, layers::layer::Layer};
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
pub struct VisualLayer {
#[serde(flatten)]
pub layer: Layer,
#[serde(rename = "tt")]
#[serde(skip_serializing_if = "Option::is_none")]
pub matte_mode: Option<MatteMode>,
#[serde(rename = "td", default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub matte_target: Option<BoolInt>,
#[serde(rename = "masksProperties")]
#[serde(skip_serializing_if = "Option::is_none")]
pub masks_properties: Option<Vec<Mask>>,
#[serde(rename = "ks")]
pub transform: Transform,
#[serde(rename = "ao", default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub rotate_to_match_anim_pos_path: Option<BoolInt>,
#[serde(rename = "tp")]
#[serde(skip_serializing_if = "Option::is_none")]
pub matte_layer_index: Option<f64>,
#[serde(rename = "hasMask", default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub has_mask: Option<bool>,
#[serde(rename = "mb", default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub motion_blur: Option<bool>,
#[serde(rename = "bm")]
#[serde(skip_serializing_if = "Option::is_none")]
pub blend_mode: Option<BlendMode>,
#[serde(rename = "cl")]
#[serde(skip_serializing_if = "Option::is_none")]
pub css_class: Option<String>,
#[serde(rename = "ln")]
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
#[serde(rename = "tg")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tag_name: Option<String>,
#[deprecated(note = "please use `transform_before_mask` instead")]
#[serde(rename = "cp")]
#[serde(skip_serializing_if = "Option::is_none")]
pub tranform_before_mask_deprecated: Option<String>,
#[serde(rename = "ct", default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub transform_before_mask: Option<BoolInt>,
}