use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct Shipment {
#[serde(rename = "vendorShipmentIdentifier")]
pub vendor_shipment_identifier: String,
#[serde(rename = "transactionType")]
pub transaction_type: TransactionType,
#[serde(rename = "buyerReferenceNumber", skip_serializing_if = "Option::is_none")]
pub buyer_reference_number: Option<String>,
#[serde(rename = "transactionDate")]
pub transaction_date: String,
#[serde(rename = "currentShipmentStatus", skip_serializing_if = "Option::is_none")]
pub current_shipment_status: Option<CurrentShipmentStatus>,
#[serde(rename = "currentshipmentStatusDate", skip_serializing_if = "Option::is_none")]
pub currentshipment_status_date: Option<String>,
#[serde(rename = "shipmentStatusDetails", skip_serializing_if = "Option::is_none")]
pub shipment_status_details: Option<Vec<models::vendor_shipments::ShipmentStatusDetails>>,
#[serde(rename = "shipmentCreateDate", skip_serializing_if = "Option::is_none")]
pub shipment_create_date: Option<String>,
#[serde(rename = "shipmentConfirmDate", skip_serializing_if = "Option::is_none")]
pub shipment_confirm_date: Option<String>,
#[serde(rename = "packageLabelCreateDate", skip_serializing_if = "Option::is_none")]
pub package_label_create_date: Option<String>,
#[serde(rename = "shipmentFreightTerm", skip_serializing_if = "Option::is_none")]
pub shipment_freight_term: Option<ShipmentFreightTerm>,
#[serde(rename = "sellingParty")]
pub selling_party: Box<models::vendor_shipments::PartyIdentification>,
#[serde(rename = "shipFromParty")]
pub ship_from_party: Box<models::vendor_shipments::PartyIdentification>,
#[serde(rename = "shipToParty")]
pub ship_to_party: Box<models::vendor_shipments::PartyIdentification>,
#[serde(rename = "shipmentMeasurements", skip_serializing_if = "Option::is_none")]
pub shipment_measurements: Option<Box<models::vendor_shipments::TransportShipmentMeasurements>>,
#[serde(rename = "collectFreightPickupDetails", skip_serializing_if = "Option::is_none")]
pub collect_freight_pickup_details: Option<Box<models::vendor_shipments::CollectFreightPickupDetails>>,
#[serde(rename = "purchaseOrders", skip_serializing_if = "Option::is_none")]
pub purchase_orders: Option<Vec<models::vendor_shipments::PurchaseOrders>>,
#[serde(rename = "importDetails", skip_serializing_if = "Option::is_none")]
pub import_details: Option<Box<models::vendor_shipments::ImportDetails>>,
#[serde(rename = "containers", skip_serializing_if = "Option::is_none")]
pub containers: Option<Vec<models::vendor_shipments::Containers>>,
#[serde(rename = "transportationDetails", skip_serializing_if = "Option::is_none")]
pub transportation_details: Option<Box<models::vendor_shipments::TransportationDetails>>,
}
impl Shipment {
pub fn new(vendor_shipment_identifier: String, transaction_type: TransactionType, transaction_date: String, selling_party: models::vendor_shipments::PartyIdentification, ship_from_party: models::vendor_shipments::PartyIdentification, ship_to_party: models::vendor_shipments::PartyIdentification) -> Shipment {
Shipment {
vendor_shipment_identifier,
transaction_type,
buyer_reference_number: None,
transaction_date,
current_shipment_status: None,
currentshipment_status_date: None,
shipment_status_details: None,
shipment_create_date: None,
shipment_confirm_date: None,
package_label_create_date: None,
shipment_freight_term: None,
selling_party: Box::new(selling_party),
ship_from_party: Box::new(ship_from_party),
ship_to_party: Box::new(ship_to_party),
shipment_measurements: None,
collect_freight_pickup_details: None,
purchase_orders: None,
import_details: None,
containers: None,
transportation_details: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum TransactionType {
#[serde(rename = "New")]
New,
#[serde(rename = "Cancel")]
Cancel,
}
impl Default for TransactionType {
fn default() -> TransactionType {
Self::New
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum CurrentShipmentStatus {
#[serde(rename = "Created")]
Created,
#[serde(rename = "TransportationRequested")]
TransportationRequested,
#[serde(rename = "CarrierAssigned")]
CarrierAssigned,
#[serde(rename = "Shipped")]
Shipped,
}
impl Default for CurrentShipmentStatus {
fn default() -> CurrentShipmentStatus {
Self::Created
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum ShipmentFreightTerm {
#[serde(rename = "Collect")]
Collect,
#[serde(rename = "Prepaid")]
Prepaid,
}
impl Default for ShipmentFreightTerm {
fn default() -> ShipmentFreightTerm {
Self::Collect
}
}