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
//! Model struct for OrderFulfillment type

use std::collections::HashMap;

use serde::{Deserialize, Serialize};

use super::{
    enums::{
        OrderFulfillmentFulfillmentLineItemApplication, OrderFulfillmentState, OrderFulfillmentType,
    },
    OrderFulfillmentFulfillmentEntry, OrderFulfillmentPickupDetails,
    OrderFulfillmentShipmentDetails,
};

/// This is a model struct for OrderFulfillment type.
///
/// Contains details about how to fulfill this order.
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub struct OrderFulfillment {
    /// A unique ID that identifies the fulfillment only within this order.
    pub uid: Option<String>,
    /// The type of the fulfillment.
    pub r#type: Option<OrderFulfillmentType>,
    /// The state of the fulfillment.
    pub state: Option<OrderFulfillmentState>,
    /// Describes what order line items this fulfillment applies to. It can be ALL or ENTRY_LIST
    /// with a supplied list of fulfillment entries.
    pub line_item_application: Option<OrderFulfillmentFulfillmentLineItemApplication>,
    /// A list of entries pertaining to the fulfillment of an order. Each entry must reference a
    /// valid uid for an order line item in the line_item_uid field, as well as a quantity to
    /// fulfill.
    ///
    /// Multiple entries can reference the same line item uid, as long as the total quantity among
    /// all fulfillment entries referencing a single line item does not exceed the quantity of the
    /// order's line item itself.
    ///
    /// An order cannot be marked as COMPLETED before all fulfillments are COMPLETED, CANCELED, or
    /// FAILED. Fulfillments can be created and completed independently before order completion.
    pub entries: Option<Vec<OrderFulfillmentFulfillmentEntry>>,
    /// Application-defined data attached to this fulfillment. Metadata fields are intended to store
    /// descriptive references or associations with an entity in another system or store brief
    /// information about the object. Square does not process this field; it only stores and returns
    /// it in relevant API calls. Do not use metadata to store any sensitive information (such as
    /// personally identifiable information or card details).
    ///
    /// Keys written by applications must be 60 characters or less and must be in the character set
    /// [a-zA-Z0-9_-]. Entries can also include metadata generated by Square. These keys are
    /// prefixed with a namespace, separated from the key with a ':' character.
    ///
    /// Values have a maximum length of 255 characters.
    ///
    /// An application can have up to 10 entries per metadata field.
    ///
    /// Entries written by applications are private and can only be read or modified by the same
    /// application.
    ///
    /// For more information, see
    /// [Metadata](https://developer.squareup.com/docs/build-basics/metadata).
    pub metadata: Option<HashMap<String, String>>,
    /// Contains details for a pickup fulfillment. These details are required when the fulfillment
    /// type is PICKUP.
    pub pickup_details: Option<OrderFulfillmentPickupDetails>,
    /// Contains details for a shipment fulfillment. These details are required when the fulfillment
    /// type is SHIPMENT.
    ///
    /// A shipment fulfillment's relationship to fulfillment state: PROPOSED: A shipment is
    /// requested. RESERVED: Fulfillment accepted. Shipment processing. PREPARED: Shipment packaged.
    /// Shipping label created. COMPLETED: Package has been shipped. CANCELED: Shipment has been
    /// canceled. FAILED: Shipment has failed.
    pub shipment_details: Option<OrderFulfillmentShipmentDetails>,
}