1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//! Model struct for CatalogItem type.

use serde::{Deserialize, Serialize};

use super::{
    enums::CatalogItemProductType, CatalogItemModifierListInfo, CatalogItemOptionForItem,
    CatalogObject,
};

/// A [CatalogObject] instance of the `ITEM` type, also referred to as an item, in the catalog.
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub struct CatalogItem {
    /// The item's name. This is a searchable attribute for use in applicable query filters, its
    /// value must not be empty, and the length is of Unicode code points.
    pub name: Option<String>,
    /// The item's description. This is a searchable attribute for use in applicable query filters,
    /// and its value length is of Unicode code points.
    pub description: Option<String>,
    /// The text of the item's display label in the Square Point of Sale app. Only up to the first
    /// five characters of the string are used. This attribute is searchable, and its value length
    /// is of Unicode code points.
    pub abbreviation: Option<String>,
    /// The color of the item's display label in the Square Point of Sale app. This must be a valid
    /// hex color code.
    pub label_color: Option<String>,
    /// If `true`, the item can be added to shipping orders from the merchant's online store.
    pub available_online: Option<bool>,
    /// If `true`, the item can be added to pickup orders from the merchant's online store.
    pub available_for_pickup: Option<bool>,
    /// If `true`, the item can be added to electronically fulfilled orders from the merchant's
    /// online store.
    pub available_electronically: Option<bool>,
    /// The ID of the item's category, if any.
    pub category_id: Option<String>,
    /// A set of IDs indicating the taxes enabled for this item. When updating an item, any taxes
    /// listed here will be added to the item. Taxes may also be added to or deleted from an item
    /// using `UpdateItemTaxes`.
    pub tax_ids: Option<Vec<String>>,
    /// A set of `CatalogItemModifierListInfo` objects representing the modifier lists that apply to
    /// this item, along with the overrides and min and max limits that are specific to this item.
    /// Modifier lists may also be added to or deleted from an item using `UpdateItemModifierLists`.
    pub modifier_list_info: Option<Vec<CatalogItemModifierListInfo>>,
    /// A list of [CatalogItemVariation] objects for this item. An item must have at least one
    /// variation.
    pub variations: Option<Vec<CatalogObject>>,
    /// The product type of the item. May not be changed once an item has been created.
    ///
    /// Only items of product type `REGULAR` or `APPOINTMENTS_SERVICE` may be created by this API;
    /// items with other product types are read-only.
    pub product_type: Option<CatalogItemProductType>,
    /// If `false`, the Square Point of Sale app will present the `CatalogItem`'s details screen
    /// immediately, allowing the merchant to choose `CatalogModifier`s before adding the item to
    /// the cart. This is the default behavior.
    ///
    /// If `true`, the Square Point of Sale app will immediately add the item to the cart with the
    /// pre-selected modifiers, and merchants can edit modifiers by drilling down onto the item's
    /// details.
    ///
    /// Third-party clients are encouraged to implement similar behaviors.
    pub skip_modifier_screen: Option<bool>,
    /// List of item options IDs for this item. Used to manage and group item variations in a
    /// specified order.
    ///
    /// Maximum: 6 item options.
    pub item_options: Option<Vec<CatalogItemOptionForItem>>,
    /// The IDs of images associated with this `CatalogItem` instance. These images will be shown to
    /// customers in Square Online Store. The first image will show up as the icon for this item in
    /// POS.
    pub image_ids: Option<Vec<String>>,
    /// A name to sort the item by. If this name is unspecified, namely, the `sort_name` field is
    /// absent, the regular `name` field is used for sorting.
    ///
    /// It is currently supported for sellers of the Japanese locale only.
    pub sort_name: Option<String>,
}