figma_api/models/
sticky_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 StickyNode {
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    /// If true, author name is visible.
119    #[serde(rename = "authorVisible", skip_serializing_if = "Option::is_none")]
120    pub author_visible: Option<bool>,
121}
122
123impl StickyNode {
124    pub fn new(id: String, name: String, scroll_behavior: ScrollBehavior, blend_mode: models::BlendMode, fills: Vec<models::Paint>, effects: Vec<models::Effect>, characters: String) -> StickyNode {
125        StickyNode {
126            id,
127            name,
128            visible: None,
129            locked: None,
130            is_fixed: None,
131            scroll_behavior,
132            rotation: None,
133            component_property_references: None,
134            plugin_data: None,
135            shared_plugin_data: None,
136            bound_variables: None,
137            explicit_variable_modes: None,
138            preserve_ratio: None,
139            constraints: None,
140            relative_transform: None,
141            size: None,
142            layout_align: None,
143            layout_grow: None,
144            layout_positioning: None,
145            min_width: None,
146            max_width: None,
147            min_height: None,
148            max_height: None,
149            layout_sizing_horizontal: None,
150            layout_sizing_vertical: None,
151            blend_mode,
152            opacity: None,
153            fills,
154            styles: None,
155            is_mask: None,
156            mask_type: None,
157            is_mask_outline: None,
158            effects,
159            export_settings: None,
160            characters,
161            author_visible: None,
162        }
163    }
164}
165/// How layer should be treated when the frame is resized
166#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
167pub enum ScrollBehavior {
168    #[serde(rename = "SCROLLS")]
169    Scrolls,
170    #[serde(rename = "FIXED")]
171    Fixed,
172    #[serde(rename = "STICKY_SCROLLS")]
173    StickyScrolls,
174}
175
176impl Default for ScrollBehavior {
177    fn default() -> ScrollBehavior {
178        Self::Scrolls
179    }
180}
181///  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\".
182#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
183pub enum LayoutAlign {
184    #[serde(rename = "INHERIT")]
185    Inherit,
186    #[serde(rename = "STRETCH")]
187    Stretch,
188    #[serde(rename = "MIN")]
189    Min,
190    #[serde(rename = "CENTER")]
191    Center,
192    #[serde(rename = "MAX")]
193    Max,
194}
195
196impl Default for LayoutAlign {
197    fn default() -> LayoutAlign {
198        Self::Inherit
199    }
200}
201/// Determines whether a layer's size and position should be determined by auto-layout settings or manually adjustable.
202#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
203pub enum LayoutPositioning {
204    #[serde(rename = "AUTO")]
205    Auto,
206    #[serde(rename = "ABSOLUTE")]
207    Absolute,
208}
209
210impl Default for LayoutPositioning {
211    fn default() -> LayoutPositioning {
212        Self::Auto
213    }
214}
215/// 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
216#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
217pub enum LayoutSizingHorizontal {
218    #[serde(rename = "FIXED")]
219    Fixed,
220    #[serde(rename = "HUG")]
221    Hug,
222    #[serde(rename = "FILL")]
223    Fill,
224}
225
226impl Default for LayoutSizingHorizontal {
227    fn default() -> LayoutSizingHorizontal {
228        Self::Fixed
229    }
230}
231/// 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
232#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
233pub enum LayoutSizingVertical {
234    #[serde(rename = "FIXED")]
235    Fixed,
236    #[serde(rename = "HUG")]
237    Hug,
238    #[serde(rename = "FILL")]
239    Fill,
240}
241
242impl Default for LayoutSizingVertical {
243    fn default() -> LayoutSizingVertical {
244        Self::Fixed
245    }
246}
247/// 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.
248#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
249pub enum MaskType {
250    #[serde(rename = "ALPHA")]
251    Alpha,
252    #[serde(rename = "VECTOR")]
253    Vector,
254    #[serde(rename = "LUMINANCE")]
255    Luminance,
256}
257
258impl Default for MaskType {
259    fn default() -> MaskType {
260        Self::Alpha
261    }
262}
263