figma_api/models/
connector_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 ConnectorNode {
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 effects attached to this node (see effects section for more details)
95    #[serde(rename = "effects")]
96    pub effects: Vec<models::Effect>,
97    /// An array of export settings representing images to export from the node.
98    #[serde(rename = "exportSettings", skip_serializing_if = "Option::is_none")]
99    pub export_settings: Option<Vec<models::ExportSetting>>,
100    /// Text contained within a text box.
101    #[serde(rename = "characters")]
102    pub characters: String,
103    /// An array of stroke paints applied to the node.
104    #[serde(rename = "strokes", skip_serializing_if = "Option::is_none")]
105    pub strokes: Option<Vec<models::Paint>>,
106    /// The weight of strokes on the node.
107    #[serde(rename = "strokeWeight", skip_serializing_if = "Option::is_none")]
108    pub stroke_weight: Option<f64>,
109    /// 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
110    #[serde(rename = "strokeAlign", skip_serializing_if = "Option::is_none")]
111    pub stroke_align: Option<StrokeAlign>,
112    /// A string enum with value of \"MITER\", \"BEVEL\", or \"ROUND\", describing how corners in vector paths are rendered.
113    #[serde(rename = "strokeJoin", skip_serializing_if = "Option::is_none")]
114    pub stroke_join: Option<StrokeJoin>,
115    /// 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.
116    #[serde(rename = "strokeDashes", skip_serializing_if = "Option::is_none")]
117    pub stroke_dashes: Option<Vec<f64>>,
118    /// The starting point of the connector.
119    #[serde(rename = "connectorStart")]
120    pub connector_start: Box<models::ConnectorEndpoint>,
121    /// The ending point of the connector.
122    #[serde(rename = "connectorEnd")]
123    pub connector_end: Box<models::ConnectorEndpoint>,
124    /// A string enum describing the end cap of the start of the connector.
125    #[serde(rename = "connectorStartStrokeCap")]
126    pub connector_start_stroke_cap: ConnectorStartStrokeCap,
127    /// A string enum describing the end cap of the end of the connector.
128    #[serde(rename = "connectorEndStrokeCap")]
129    pub connector_end_stroke_cap: ConnectorEndStrokeCap,
130    /// Connector line type.
131    #[serde(rename = "connectorLineType")]
132    pub connector_line_type: models::ConnectorLineType,
133    /// Connector text background.
134    #[serde(rename = "textBackground", skip_serializing_if = "Option::is_none")]
135    pub text_background: Option<Box<models::ConnectorTextBackground>>,
136}
137
138impl ConnectorNode {
139    pub fn new(id: String, name: String, scroll_behavior: ScrollBehavior, blend_mode: models::BlendMode, effects: Vec<models::Effect>, characters: String, connector_start: models::ConnectorEndpoint, connector_end: models::ConnectorEndpoint, connector_start_stroke_cap: ConnectorStartStrokeCap, connector_end_stroke_cap: ConnectorEndStrokeCap, connector_line_type: models::ConnectorLineType) -> ConnectorNode {
140        ConnectorNode {
141            id,
142            name,
143            visible: None,
144            locked: None,
145            is_fixed: None,
146            scroll_behavior,
147            rotation: None,
148            component_property_references: None,
149            plugin_data: None,
150            shared_plugin_data: None,
151            bound_variables: None,
152            explicit_variable_modes: None,
153            preserve_ratio: None,
154            constraints: None,
155            relative_transform: None,
156            size: None,
157            layout_align: None,
158            layout_grow: None,
159            layout_positioning: None,
160            min_width: None,
161            max_width: None,
162            min_height: None,
163            max_height: None,
164            layout_sizing_horizontal: None,
165            layout_sizing_vertical: None,
166            blend_mode,
167            opacity: None,
168            effects,
169            export_settings: None,
170            characters,
171            strokes: None,
172            stroke_weight: None,
173            stroke_align: None,
174            stroke_join: None,
175            stroke_dashes: None,
176            connector_start: Box::new(connector_start),
177            connector_end: Box::new(connector_end),
178            connector_start_stroke_cap,
179            connector_end_stroke_cap,
180            connector_line_type,
181            text_background: None,
182        }
183    }
184}
185/// How layer should be treated when the frame is resized
186#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
187pub enum ScrollBehavior {
188    #[serde(rename = "SCROLLS")]
189    Scrolls,
190    #[serde(rename = "FIXED")]
191    Fixed,
192    #[serde(rename = "STICKY_SCROLLS")]
193    StickyScrolls,
194}
195
196impl Default for ScrollBehavior {
197    fn default() -> ScrollBehavior {
198        Self::Scrolls
199    }
200}
201///  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\".
202#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
203pub enum LayoutAlign {
204    #[serde(rename = "INHERIT")]
205    Inherit,
206    #[serde(rename = "STRETCH")]
207    Stretch,
208    #[serde(rename = "MIN")]
209    Min,
210    #[serde(rename = "CENTER")]
211    Center,
212    #[serde(rename = "MAX")]
213    Max,
214}
215
216impl Default for LayoutAlign {
217    fn default() -> LayoutAlign {
218        Self::Inherit
219    }
220}
221/// Determines whether a layer's size and position should be determined by auto-layout settings or manually adjustable.
222#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
223pub enum LayoutPositioning {
224    #[serde(rename = "AUTO")]
225    Auto,
226    #[serde(rename = "ABSOLUTE")]
227    Absolute,
228}
229
230impl Default for LayoutPositioning {
231    fn default() -> LayoutPositioning {
232        Self::Auto
233    }
234}
235/// 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
236#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
237pub enum LayoutSizingHorizontal {
238    #[serde(rename = "FIXED")]
239    Fixed,
240    #[serde(rename = "HUG")]
241    Hug,
242    #[serde(rename = "FILL")]
243    Fill,
244}
245
246impl Default for LayoutSizingHorizontal {
247    fn default() -> LayoutSizingHorizontal {
248        Self::Fixed
249    }
250}
251/// 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
252#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
253pub enum LayoutSizingVertical {
254    #[serde(rename = "FIXED")]
255    Fixed,
256    #[serde(rename = "HUG")]
257    Hug,
258    #[serde(rename = "FILL")]
259    Fill,
260}
261
262impl Default for LayoutSizingVertical {
263    fn default() -> LayoutSizingVertical {
264        Self::Fixed
265    }
266}
267/// 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
268#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
269pub enum StrokeAlign {
270    #[serde(rename = "INSIDE")]
271    Inside,
272    #[serde(rename = "OUTSIDE")]
273    Outside,
274    #[serde(rename = "CENTER")]
275    Center,
276}
277
278impl Default for StrokeAlign {
279    fn default() -> StrokeAlign {
280        Self::Inside
281    }
282}
283/// A string enum with value of \"MITER\", \"BEVEL\", or \"ROUND\", describing how corners in vector paths are rendered.
284#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
285pub enum StrokeJoin {
286    #[serde(rename = "MITER")]
287    Miter,
288    #[serde(rename = "BEVEL")]
289    Bevel,
290    #[serde(rename = "ROUND")]
291    Round,
292}
293
294impl Default for StrokeJoin {
295    fn default() -> StrokeJoin {
296        Self::Miter
297    }
298}
299/// A string enum describing the end cap of the start of the connector.
300#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
301pub enum ConnectorStartStrokeCap {
302    #[serde(rename = "NONE")]
303    None,
304    #[serde(rename = "LINE_ARROW")]
305    LineArrow,
306    #[serde(rename = "TRIANGLE_ARROW")]
307    TriangleArrow,
308    #[serde(rename = "DIAMOND_FILLED")]
309    DiamondFilled,
310    #[serde(rename = "CIRCLE_FILLED")]
311    CircleFilled,
312    #[serde(rename = "TRIANGLE_FILLED")]
313    TriangleFilled,
314}
315
316impl Default for ConnectorStartStrokeCap {
317    fn default() -> ConnectorStartStrokeCap {
318        Self::None
319    }
320}
321/// A string enum describing the end cap of the end of the connector.
322#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
323pub enum ConnectorEndStrokeCap {
324    #[serde(rename = "NONE")]
325    None,
326    #[serde(rename = "LINE_ARROW")]
327    LineArrow,
328    #[serde(rename = "TRIANGLE_ARROW")]
329    TriangleArrow,
330    #[serde(rename = "DIAMOND_FILLED")]
331    DiamondFilled,
332    #[serde(rename = "CIRCLE_FILLED")]
333    CircleFilled,
334    #[serde(rename = "TRIANGLE_FILLED")]
335    TriangleFilled,
336}
337
338impl Default for ConnectorEndStrokeCap {
339    fn default() -> ConnectorEndStrokeCap {
340        Self::None
341    }
342}
343