use std::collections::BTreeMap;
use crate::serde::{deserialize_commify, is_default, serialize_commify};
use openstep_plist::Plist;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct FeatureClass {
#[serde(default, skip_serializing_if = "is_default")]
pub automatic: bool,
pub code: String,
#[serde(default, skip_serializing_if = "is_default")]
pub disabled: bool,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct CustomParameter {
#[serde(default, skip_serializing_if = "is_default")]
pub disabled: bool,
pub name: String,
pub value: Plist,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct FeaturePrefix {
#[serde(default, skip_serializing_if = "is_default")]
pub automatic: bool,
pub code: String,
#[serde(default, skip_serializing_if = "is_default")]
pub disabled: bool,
#[serde(alias = "tag")] pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct Feature {
#[serde(default, skip_serializing_if = "is_default")]
pub automatic: bool,
pub code: String,
#[serde(default, skip_serializing_if = "is_default")]
pub disabled: bool,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub labels: Vec<StylisticSetLabel>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
#[serde(alias = "name")]
pub tag: String,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct StylisticSetLabel {
pub language: String,
pub value: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
pub enum Color {
ColorInt(u8),
ColorTuple(Vec<u8>),
}
pub type Kerning = BTreeMap<String, BTreeMap<String, BTreeMap<String, f32>>>;
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq, Copy)]
pub enum Orientation {
#[default]
#[serde(rename = "left")]
Left,
#[serde(rename = "center")]
Center,
#[serde(rename = "right")]
Right,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Copy)]
pub enum NodeType {
#[serde(rename = "l")]
Line,
#[serde(rename = "c")]
Curve,
#[serde(rename = "q")]
QCurve,
#[serde(rename = "o")]
OffCurve,
#[serde(rename = "ls")]
LineSmooth,
#[serde(rename = "cs")]
CurveSmooth,
#[serde(rename = "qs")]
QCurveSmooth,
}
#[derive(Serialize, Deserialize, Debug, Default, Clone, PartialEq)]
pub struct Version {
#[serde(default, rename = "versionMajor")]
pub major: i32,
#[serde(default, rename = "versionMinor")]
pub minor: i32,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq)]
pub struct InstanceFactors(
#[serde(
deserialize_with = "deserialize_commify",
serialize_with = "serialize_commify",
default
)]
pub Vec<f32>,
);
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct SmartComponentSetting {
#[serde(default, rename = "bottomValue")]
pub bottom_value: i32,
#[serde(default, rename = "topValue")]
pub top_value: i32,
pub name: String,
}