figma_api/models/shape_with_text_node.rs
1/*
2 * Figma API
3 *
4 * This is the OpenAPI specification for the [Figma REST API](https://www.figma.com/developers/api). Note: we are releasing the OpenAPI specification as a beta given the large surface area and complexity of the REST API. If you notice any inaccuracies with the specification, please [file an issue](https://github.com/figma/rest-api-spec/issues).
5 *
6 * The version of the OpenAPI document: 0.31.0
7 * Contact: support@figma.com
8 * Generated by: https://openapi-generator.tech
9 */
10
11use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
15pub struct ShapeWithTextNode {
16 /// A string uniquely identifying this node within the document.
17 #[serde(rename = "id")]
18 pub id: String,
19 /// The name given to the node by the user in the tool.
20 #[serde(rename = "name")]
21 pub name: String,
22 /// Whether or not the node is visible on the canvas.
23 #[serde(rename = "visible", skip_serializing_if = "Option::is_none")]
24 pub visible: Option<bool>,
25 /// If true, layer is locked and cannot be edited
26 #[serde(rename = "locked", skip_serializing_if = "Option::is_none")]
27 pub locked: Option<bool>,
28 /// Whether the layer is fixed while the parent is scrolling
29 #[serde(rename = "isFixed", skip_serializing_if = "Option::is_none")]
30 pub is_fixed: Option<bool>,
31 /// How layer should be treated when the frame is resized
32 #[serde(rename = "scrollBehavior")]
33 pub scroll_behavior: ScrollBehavior,
34 /// The rotation of the node, if not 0.
35 #[serde(rename = "rotation", skip_serializing_if = "Option::is_none")]
36 pub rotation: Option<f64>,
37 /// A mapping of a layer's property to component property name of component properties attached to this node. The component property name can be used to look up more information on the corresponding component's or component set's componentPropertyDefinitions.
38 #[serde(rename = "componentPropertyReferences", skip_serializing_if = "Option::is_none")]
39 pub component_property_references: Option<std::collections::HashMap<String, String>>,
40 #[serde(rename = "pluginData", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
41 pub plugin_data: Option<Option<serde_json::Value>>,
42 #[serde(rename = "sharedPluginData", default, with = "::serde_with::rust::double_option", skip_serializing_if = "Option::is_none")]
43 pub shared_plugin_data: Option<Option<serde_json::Value>>,
44 #[serde(rename = "boundVariables", skip_serializing_if = "Option::is_none")]
45 pub bound_variables: Option<Box<models::IsLayerTraitBoundVariables>>,
46 /// A mapping of variable collection ID to mode ID representing the explicitly set modes for this node.
47 #[serde(rename = "explicitVariableModes", skip_serializing_if = "Option::is_none")]
48 pub explicit_variable_modes: Option<std::collections::HashMap<String, String>>,
49 /// Keep height and width constrained to same ratio.
50 #[serde(rename = "preserveRatio", skip_serializing_if = "Option::is_none")]
51 pub preserve_ratio: Option<bool>,
52 /// Horizontal and vertical layout constraints for node.
53 #[serde(rename = "constraints", skip_serializing_if = "Option::is_none")]
54 pub constraints: Option<Box<models::LayoutConstraint>>,
55 /// A transformation matrix is standard way in computer graphics to represent translation and rotation. These are the top two rows of a 3x3 matrix. The bottom row of the matrix is assumed to be [0, 0, 1]. This is known as an affine transform and is enough to represent translation, rotation, and skew. The identity transform is [[1, 0, 0], [0, 1, 0]]. A translation matrix will typically look like: ``` [[1, 0, tx], [0, 1, ty]] ``` and a rotation matrix will typically look like: ``` [[cos(angle), sin(angle), 0], [-sin(angle), cos(angle), 0]] ``` Another way to think about this transform is as three vectors: - The x axis (t[0][0], t[1][0]) - The y axis (t[0][1], t[1][1]) - The translation offset (t[0][2], t[1][2]) The most common usage of the Transform matrix is the `relativeTransform property`. This particular usage of the matrix has a few additional restrictions. The translation offset can take on any value but we do enforce that the axis vectors are unit vectors (i.e. have length 1). The axes are not required to be at 90° angles to each other.
56 #[serde(rename = "relativeTransform", skip_serializing_if = "Option::is_none")]
57 pub relative_transform: Option<Vec<Vec<f64>>>,
58 /// Width and height of element. This is different from the width and height of the bounding box in that the absolute bounding box represents the element after scaling and rotation. Only present if `geometry=paths` is passed.
59 #[serde(rename = "size", skip_serializing_if = "Option::is_none")]
60 pub size: Option<Box<models::Vector>>,
61 /// Determines if the layer should stretch along the parent's counter axis. This property is only provided for direct children of auto-layout frames. - `INHERIT` - `STRETCH` In previous versions of auto layout, determined how the layer is aligned inside an auto-layout frame. This property is only provided for direct children of auto-layout frames. - `MIN` - `CENTER` - `MAX` - `STRETCH` In horizontal auto-layout frames, \"MIN\" and \"MAX\" correspond to \"TOP\" and \"BOTTOM\". In vertical auto-layout frames, \"MIN\" and \"MAX\" correspond to \"LEFT\" and \"RIGHT\".
62 #[serde(rename = "layoutAlign", skip_serializing_if = "Option::is_none")]
63 pub layout_align: Option<LayoutAlign>,
64 /// This property is applicable only for direct children of auto-layout frames, ignored otherwise. Determines whether a layer should stretch along the parent's primary axis. A `0` corresponds to a fixed size and `1` corresponds to stretch.
65 #[serde(rename = "layoutGrow", skip_serializing_if = "Option::is_none")]
66 pub layout_grow: Option<f64>,
67 /// Determines whether a layer's size and position should be determined by auto-layout settings or manually adjustable.
68 #[serde(rename = "layoutPositioning", skip_serializing_if = "Option::is_none")]
69 pub layout_positioning: Option<LayoutPositioning>,
70 /// The minimum width of the frame. This property is only applicable for auto-layout frames or direct children of auto-layout frames.
71 #[serde(rename = "minWidth", skip_serializing_if = "Option::is_none")]
72 pub min_width: Option<f64>,
73 /// The maximum width of the frame. This property is only applicable for auto-layout frames or direct children of auto-layout frames.
74 #[serde(rename = "maxWidth", skip_serializing_if = "Option::is_none")]
75 pub max_width: Option<f64>,
76 /// The minimum height of the frame. This property is only applicable for auto-layout frames or direct children of auto-layout frames.
77 #[serde(rename = "minHeight", skip_serializing_if = "Option::is_none")]
78 pub min_height: Option<f64>,
79 /// The maximum height of the frame. This property is only applicable for auto-layout frames or direct children of auto-layout frames.
80 #[serde(rename = "maxHeight", skip_serializing_if = "Option::is_none")]
81 pub max_height: Option<f64>,
82 /// The horizontal sizing setting on this auto-layout frame or frame child. - `FIXED` - `HUG`: only valid on auto-layout frames and text nodes - `FILL`: only valid on auto-layout frame children
83 #[serde(rename = "layoutSizingHorizontal", skip_serializing_if = "Option::is_none")]
84 pub layout_sizing_horizontal: Option<LayoutSizingHorizontal>,
85 /// The vertical sizing setting on this auto-layout frame or frame child. - `FIXED` - `HUG`: only valid on auto-layout frames and text nodes - `FILL`: only valid on auto-layout frame children
86 #[serde(rename = "layoutSizingVertical", skip_serializing_if = "Option::is_none")]
87 pub layout_sizing_vertical: Option<LayoutSizingVertical>,
88 /// How this node blends with nodes behind it in the scene (see blend mode section for more details)
89 #[serde(rename = "blendMode")]
90 pub blend_mode: models::BlendMode,
91 /// Opacity of the node
92 #[serde(rename = "opacity", skip_serializing_if = "Option::is_none")]
93 pub opacity: Option<f64>,
94 /// An array of fill paints applied to the node.
95 #[serde(rename = "fills")]
96 pub fills: Vec<models::Paint>,
97 /// A mapping of a StyleType to style ID (see Style) of styles present on this node. The style ID can be used to look up more information about the style in the top-level styles field.
98 #[serde(rename = "styles", skip_serializing_if = "Option::is_none")]
99 pub styles: Option<std::collections::HashMap<String, String>>,
100 /// Does this node mask sibling nodes in front of it?
101 #[serde(rename = "isMask", skip_serializing_if = "Option::is_none")]
102 pub is_mask: Option<bool>,
103 /// If this layer is a mask, this property describes the operation used to mask the layer's siblings. The value may be one of the following: - ALPHA: the mask node's alpha channel will be used to determine the opacity of each pixel in the masked result. - VECTOR: if the mask node has visible fill paints, every pixel inside the node's fill regions will be fully visible in the masked result. If the mask has visible stroke paints, every pixel inside the node's stroke regions will be fully visible in the masked result. - LUMINANCE: the luminance value of each pixel of the mask node will be used to determine the opacity of that pixel in the masked result.
104 #[serde(rename = "maskType", skip_serializing_if = "Option::is_none")]
105 pub mask_type: Option<MaskType>,
106 /// True if maskType is VECTOR. This field is deprecated; use maskType instead.
107 #[serde(rename = "isMaskOutline", skip_serializing_if = "Option::is_none")]
108 pub is_mask_outline: Option<bool>,
109 /// An array of effects attached to this node (see effects section for more details)
110 #[serde(rename = "effects")]
111 pub effects: Vec<models::Effect>,
112 /// An array of export settings representing images to export from the node.
113 #[serde(rename = "exportSettings", skip_serializing_if = "Option::is_none")]
114 pub export_settings: Option<Vec<models::ExportSetting>>,
115 /// Text contained within a text box.
116 #[serde(rename = "characters")]
117 pub characters: String,
118 /// Radius of each corner if a single radius is set for all corners
119 #[serde(rename = "cornerRadius", skip_serializing_if = "Option::is_none")]
120 pub corner_radius: Option<f64>,
121 /// A value that lets you control how \"smooth\" the corners are. Ranges from 0 to 1. 0 is the default and means that the corner is perfectly circular. A value of 0.6 means the corner matches the iOS 7 \"squircle\" icon shape. Other values produce various other curves.
122 #[serde(rename = "cornerSmoothing", skip_serializing_if = "Option::is_none")]
123 pub corner_smoothing: Option<f64>,
124 /// Array of length 4 of the radius of each corner of the frame, starting in the top left and proceeding clockwise. Values are given in the order top-left, top-right, bottom-right, bottom-left.
125 #[serde(rename = "rectangleCornerRadii", skip_serializing_if = "Option::is_none")]
126 pub rectangle_corner_radii: Option<Vec<f64>>,
127 /// An array of stroke paints applied to the node.
128 #[serde(rename = "strokes", skip_serializing_if = "Option::is_none")]
129 pub strokes: Option<Vec<models::Paint>>,
130 /// The weight of strokes on the node.
131 #[serde(rename = "strokeWeight", skip_serializing_if = "Option::is_none")]
132 pub stroke_weight: Option<f64>,
133 /// Position of stroke relative to vector outline, as a string enum - `INSIDE`: stroke drawn inside the shape boundary - `OUTSIDE`: stroke drawn outside the shape boundary - `CENTER`: stroke drawn centered along the shape boundary
134 #[serde(rename = "strokeAlign", skip_serializing_if = "Option::is_none")]
135 pub stroke_align: Option<StrokeAlign>,
136 /// A string enum with value of \"MITER\", \"BEVEL\", or \"ROUND\", describing how corners in vector paths are rendered.
137 #[serde(rename = "strokeJoin", skip_serializing_if = "Option::is_none")]
138 pub stroke_join: Option<StrokeJoin>,
139 /// An array of floating point numbers describing the pattern of dash length and gap lengths that the vector stroke will use when drawn. For example a value of [1, 2] indicates that the stroke will be drawn with a dash of length 1 followed by a gap of length 2, repeated.
140 #[serde(rename = "strokeDashes", skip_serializing_if = "Option::is_none")]
141 pub stroke_dashes: Option<Vec<f64>>,
142 /// Geometric shape type. Most shape types have the same name as their tooltip but there are a few exceptions. ENG_DATABASE: Cylinder, ENG_QUEUE: Horizontal cylinder, ENG_FILE: File, ENG_FOLDER: Folder.
143 #[serde(rename = "shapeType")]
144 pub shape_type: models::ShapeType,
145}
146
147impl ShapeWithTextNode {
148 pub fn new(id: String, name: String, scroll_behavior: ScrollBehavior, blend_mode: models::BlendMode, fills: Vec<models::Paint>, effects: Vec<models::Effect>, characters: String, shape_type: models::ShapeType) -> ShapeWithTextNode {
149 ShapeWithTextNode {
150 id,
151 name,
152 visible: None,
153 locked: None,
154 is_fixed: None,
155 scroll_behavior,
156 rotation: None,
157 component_property_references: None,
158 plugin_data: None,
159 shared_plugin_data: None,
160 bound_variables: None,
161 explicit_variable_modes: None,
162 preserve_ratio: None,
163 constraints: None,
164 relative_transform: None,
165 size: None,
166 layout_align: None,
167 layout_grow: None,
168 layout_positioning: None,
169 min_width: None,
170 max_width: None,
171 min_height: None,
172 max_height: None,
173 layout_sizing_horizontal: None,
174 layout_sizing_vertical: None,
175 blend_mode,
176 opacity: None,
177 fills,
178 styles: None,
179 is_mask: None,
180 mask_type: None,
181 is_mask_outline: None,
182 effects,
183 export_settings: None,
184 characters,
185 corner_radius: None,
186 corner_smoothing: None,
187 rectangle_corner_radii: None,
188 strokes: None,
189 stroke_weight: None,
190 stroke_align: None,
191 stroke_join: None,
192 stroke_dashes: None,
193 shape_type,
194 }
195 }
196}
197/// How layer should be treated when the frame is resized
198#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
199pub enum ScrollBehavior {
200 #[serde(rename = "SCROLLS")]
201 Scrolls,
202 #[serde(rename = "FIXED")]
203 Fixed,
204 #[serde(rename = "STICKY_SCROLLS")]
205 StickyScrolls,
206}
207
208impl Default for ScrollBehavior {
209 fn default() -> ScrollBehavior {
210 Self::Scrolls
211 }
212}
213/// Determines if the layer should stretch along the parent's counter axis. This property is only provided for direct children of auto-layout frames. - `INHERIT` - `STRETCH` In previous versions of auto layout, determined how the layer is aligned inside an auto-layout frame. This property is only provided for direct children of auto-layout frames. - `MIN` - `CENTER` - `MAX` - `STRETCH` In horizontal auto-layout frames, \"MIN\" and \"MAX\" correspond to \"TOP\" and \"BOTTOM\". In vertical auto-layout frames, \"MIN\" and \"MAX\" correspond to \"LEFT\" and \"RIGHT\".
214#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
215pub enum LayoutAlign {
216 #[serde(rename = "INHERIT")]
217 Inherit,
218 #[serde(rename = "STRETCH")]
219 Stretch,
220 #[serde(rename = "MIN")]
221 Min,
222 #[serde(rename = "CENTER")]
223 Center,
224 #[serde(rename = "MAX")]
225 Max,
226}
227
228impl Default for LayoutAlign {
229 fn default() -> LayoutAlign {
230 Self::Inherit
231 }
232}
233/// Determines whether a layer's size and position should be determined by auto-layout settings or manually adjustable.
234#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
235pub enum LayoutPositioning {
236 #[serde(rename = "AUTO")]
237 Auto,
238 #[serde(rename = "ABSOLUTE")]
239 Absolute,
240}
241
242impl Default for LayoutPositioning {
243 fn default() -> LayoutPositioning {
244 Self::Auto
245 }
246}
247/// The horizontal sizing setting on this auto-layout frame or frame child. - `FIXED` - `HUG`: only valid on auto-layout frames and text nodes - `FILL`: only valid on auto-layout frame children
248#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
249pub enum LayoutSizingHorizontal {
250 #[serde(rename = "FIXED")]
251 Fixed,
252 #[serde(rename = "HUG")]
253 Hug,
254 #[serde(rename = "FILL")]
255 Fill,
256}
257
258impl Default for LayoutSizingHorizontal {
259 fn default() -> LayoutSizingHorizontal {
260 Self::Fixed
261 }
262}
263/// The vertical sizing setting on this auto-layout frame or frame child. - `FIXED` - `HUG`: only valid on auto-layout frames and text nodes - `FILL`: only valid on auto-layout frame children
264#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
265pub enum LayoutSizingVertical {
266 #[serde(rename = "FIXED")]
267 Fixed,
268 #[serde(rename = "HUG")]
269 Hug,
270 #[serde(rename = "FILL")]
271 Fill,
272}
273
274impl Default for LayoutSizingVertical {
275 fn default() -> LayoutSizingVertical {
276 Self::Fixed
277 }
278}
279/// If this layer is a mask, this property describes the operation used to mask the layer's siblings. The value may be one of the following: - ALPHA: the mask node's alpha channel will be used to determine the opacity of each pixel in the masked result. - VECTOR: if the mask node has visible fill paints, every pixel inside the node's fill regions will be fully visible in the masked result. If the mask has visible stroke paints, every pixel inside the node's stroke regions will be fully visible in the masked result. - LUMINANCE: the luminance value of each pixel of the mask node will be used to determine the opacity of that pixel in the masked result.
280#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
281pub enum MaskType {
282 #[serde(rename = "ALPHA")]
283 Alpha,
284 #[serde(rename = "VECTOR")]
285 Vector,
286 #[serde(rename = "LUMINANCE")]
287 Luminance,
288}
289
290impl Default for MaskType {
291 fn default() -> MaskType {
292 Self::Alpha
293 }
294}
295/// Position of stroke relative to vector outline, as a string enum - `INSIDE`: stroke drawn inside the shape boundary - `OUTSIDE`: stroke drawn outside the shape boundary - `CENTER`: stroke drawn centered along the shape boundary
296#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
297pub enum StrokeAlign {
298 #[serde(rename = "INSIDE")]
299 Inside,
300 #[serde(rename = "OUTSIDE")]
301 Outside,
302 #[serde(rename = "CENTER")]
303 Center,
304}
305
306impl Default for StrokeAlign {
307 fn default() -> StrokeAlign {
308 Self::Inside
309 }
310}
311/// A string enum with value of \"MITER\", \"BEVEL\", or \"ROUND\", describing how corners in vector paths are rendered.
312#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
313pub enum StrokeJoin {
314 #[serde(rename = "MITER")]
315 Miter,
316 #[serde(rename = "BEVEL")]
317 Bevel,
318 #[serde(rename = "ROUND")]
319 Round,
320}
321
322impl Default for StrokeJoin {
323 fn default() -> StrokeJoin {
324 Self::Miter
325 }
326}
327