1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct HasGeometryTrait {
16 #[serde(rename = "fills")]
18 pub fills: Vec<models::Paint>,
19 #[serde(rename = "styles", skip_serializing_if = "Option::is_none")]
21 pub styles: Option<std::collections::HashMap<String, String>>,
22 #[serde(rename = "strokes", skip_serializing_if = "Option::is_none")]
24 pub strokes: Option<Vec<models::Paint>>,
25 #[serde(rename = "strokeWeight", skip_serializing_if = "Option::is_none")]
27 pub stroke_weight: Option<f64>,
28 #[serde(rename = "strokeAlign", skip_serializing_if = "Option::is_none")]
30 pub stroke_align: Option<StrokeAlign>,
31 #[serde(rename = "strokeJoin", skip_serializing_if = "Option::is_none")]
33 pub stroke_join: Option<StrokeJoin>,
34 #[serde(rename = "strokeDashes", skip_serializing_if = "Option::is_none")]
36 pub stroke_dashes: Option<Vec<f64>>,
37 #[serde(rename = "fillGeometry", skip_serializing_if = "Option::is_none")]
39 pub fill_geometry: Option<Vec<models::Path>>,
40 #[serde(rename = "strokeGeometry", skip_serializing_if = "Option::is_none")]
42 pub stroke_geometry: Option<Vec<models::Path>>,
43 #[serde(rename = "strokeCap", skip_serializing_if = "Option::is_none")]
45 pub stroke_cap: Option<StrokeCap>,
46 #[serde(rename = "strokeMiterAngle", skip_serializing_if = "Option::is_none")]
48 pub stroke_miter_angle: Option<f64>,
49}
50
51impl HasGeometryTrait {
52 pub fn new(fills: Vec<models::Paint>) -> HasGeometryTrait {
53 HasGeometryTrait {
54 fills,
55 styles: None,
56 strokes: None,
57 stroke_weight: None,
58 stroke_align: None,
59 stroke_join: None,
60 stroke_dashes: None,
61 fill_geometry: None,
62 stroke_geometry: None,
63 stroke_cap: None,
64 stroke_miter_angle: None,
65 }
66 }
67}
68#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
70pub enum StrokeAlign {
71 #[serde(rename = "INSIDE")]
72 Inside,
73 #[serde(rename = "OUTSIDE")]
74 Outside,
75 #[serde(rename = "CENTER")]
76 Center,
77}
78
79impl Default for StrokeAlign {
80 fn default() -> StrokeAlign {
81 Self::Inside
82 }
83}
84#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
86pub enum StrokeJoin {
87 #[serde(rename = "MITER")]
88 Miter,
89 #[serde(rename = "BEVEL")]
90 Bevel,
91 #[serde(rename = "ROUND")]
92 Round,
93}
94
95impl Default for StrokeJoin {
96 fn default() -> StrokeJoin {
97 Self::Miter
98 }
99}
100#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
102pub enum StrokeCap {
103 #[serde(rename = "NONE")]
104 None,
105 #[serde(rename = "ROUND")]
106 Round,
107 #[serde(rename = "SQUARE")]
108 Square,
109 #[serde(rename = "LINE_ARROW")]
110 LineArrow,
111 #[serde(rename = "TRIANGLE_ARROW")]
112 TriangleArrow,
113 #[serde(rename = "DIAMOND_FILLED")]
114 DiamondFilled,
115 #[serde(rename = "CIRCLE_FILLED")]
116 CircleFilled,
117 #[serde(rename = "TRIANGLE_FILLED")]
118 TriangleFilled,
119 #[serde(rename = "WASHI_TAPE_1")]
120 WashiTape1,
121 #[serde(rename = "WASHI_TAPE_2")]
122 WashiTape2,
123 #[serde(rename = "WASHI_TAPE_3")]
124 WashiTape3,
125 #[serde(rename = "WASHI_TAPE_4")]
126 WashiTape4,
127 #[serde(rename = "WASHI_TAPE_5")]
128 WashiTape5,
129 #[serde(rename = "WASHI_TAPE_6")]
130 WashiTape6,
131}
132
133impl Default for StrokeCap {
134 fn default() -> StrokeCap {
135 Self::None
136 }
137}
138