// Package merchantFulfillment provides primitives to interact the openapi HTTP API.
//
// Code generated by go-sdk-codegen DO NOT EDIT.
package merchantFulfillment

import (
	"time"
)

// AdditionalInputs defines model for AdditionalInputs.
type AdditionalInputs struct {

	// The field name.
	AdditionalInputFieldName *string `json:"AdditionalInputFieldName,omitempty"`

	// Specifies characteristics that apply to a seller input.
	SellerInputDefinition *SellerInputDefinition `json:"SellerInputDefinition,omitempty"`
}

// AdditionalInputsList defines model for AdditionalInputsList.
type AdditionalInputsList []AdditionalInputs

// AdditionalSellerInput defines model for AdditionalSellerInput.
type AdditionalSellerInput struct {

	// The data type of the additional information.
	DataType *string `json:"DataType,omitempty"`

	// The postal address information.
	ValueAsAddress *Address `json:"ValueAsAddress,omitempty"`

	// The value when the data type is boolean.
	ValueAsBoolean *bool `json:"ValueAsBoolean,omitempty"`

	// Currency type and amount.
	ValueAsCurrency *CurrencyAmount `json:"ValueAsCurrency,omitempty"`

	// The length.
	ValueAsDimension *Length `json:"ValueAsDimension,omitempty"`

	// The value when the data type is integer.
	ValueAsInteger *int `json:"ValueAsInteger,omitempty"`

	// The value when the data type is string.
	ValueAsString    *string    `json:"ValueAsString,omitempty"`
	ValueAsTimestamp *Timestamp `json:"ValueAsTimestamp,omitempty"`

	// The weight.
	ValueAsWeight *Weight `json:"ValueAsWeight,omitempty"`
}

// AdditionalSellerInputs defines model for AdditionalSellerInputs.
type AdditionalSellerInputs struct {

	// The name of the additional input field.
	AdditionalInputFieldName string `json:"AdditionalInputFieldName"`

	// Additional information required to purchase shipping.
	AdditionalSellerInput AdditionalSellerInput `json:"AdditionalSellerInput"`
}

// AdditionalSellerInputsList defines model for AdditionalSellerInputsList.
type AdditionalSellerInputsList []AdditionalSellerInputs

// Address defines model for Address.
type Address struct {

	// The street address information.
	AddressLine1 AddressLine1 `json:"AddressLine1"`

	// Additional street address information.
	AddressLine2 *AddressLine2 `json:"AddressLine2,omitempty"`

	// Additional street address information.
	AddressLine3 *AddressLine3 `json:"AddressLine3,omitempty"`

	// The city.
	City City `json:"City"`

	// The country code. A two-character country code, in ISO 3166-1 alpha-2 format.
	CountryCode CountryCode `json:"CountryCode"`

	// The district or county.
	DistrictOrCounty *DistrictOrCounty `json:"DistrictOrCounty,omitempty"`

	// The email address.
	Email EmailAddress `json:"Email"`

	// The name of the addressee, or business name.
	Name AddressName `json:"Name"`

	// The phone number.
	Phone PhoneNumber `json:"Phone"`

	// The zip code or postal code.
	PostalCode PostalCode `json:"PostalCode"`

	// The state or province code.
	StateOrProvinceCode *StateOrProvinceCode `json:"StateOrProvinceCode,omitempty"`
}

// AddressLine1 defines model for AddressLine1.
type AddressLine1 string

// AddressLine2 defines model for AddressLine2.
type AddressLine2 string

// AddressLine3 defines model for AddressLine3.
type AddressLine3 string

// AddressName defines model for AddressName.
type AddressName string

// AmazonOrderId defines model for AmazonOrderId.
type AmazonOrderId string

// AvailableCarrierWillPickUpOption defines model for AvailableCarrierWillPickUpOption.
type AvailableCarrierWillPickUpOption struct {

	// Carrier will pick up option.
	CarrierWillPickUpOption CarrierWillPickUpOption `json:"CarrierWillPickUpOption"`

	// Currency type and amount.
	Charge CurrencyAmount `json:"Charge"`
}

// AvailableCarrierWillPickUpOptionsList defines model for AvailableCarrierWillPickUpOptionsList.
type AvailableCarrierWillPickUpOptionsList []AvailableCarrierWillPickUpOption

// AvailableDeliveryExperienceOption defines model for AvailableDeliveryExperienceOption.
type AvailableDeliveryExperienceOption struct {

	// Currency type and amount.
	Charge CurrencyAmount `json:"Charge"`

	// The delivery confirmation level.
	DeliveryExperienceOption DeliveryExperienceOption `json:"DeliveryExperienceOption"`
}

// AvailableDeliveryExperienceOptionsList defines model for AvailableDeliveryExperienceOptionsList.
type AvailableDeliveryExperienceOptionsList []AvailableDeliveryExperienceOption

// AvailableFormatOptionsForLabel defines model for AvailableFormatOptionsForLabel.
type AvailableFormatOptionsForLabel AvailableFormatOptionsForLabelList

// AvailableFormatOptionsForLabelList defines model for AvailableFormatOptionsForLabelList.
type AvailableFormatOptionsForLabelList []LabelFormatOption

// AvailableShippingServiceOptions defines model for AvailableShippingServiceOptions.
type AvailableShippingServiceOptions struct {

	// List of available carrier pickup options.
	AvailableCarrierWillPickUpOptions AvailableCarrierWillPickUpOptionsList `json:"AvailableCarrierWillPickUpOptions"`

	// List of available delivery experience options.
	AvailableDeliveryExperienceOptions AvailableDeliveryExperienceOptionsList `json:"AvailableDeliveryExperienceOptions"`
}

// CancelShipmentResponse defines model for CancelShipmentResponse.
type CancelShipmentResponse struct {

	// A list of error responses returned when a request is unsuccessful.
	Errors *ErrorList `json:"errors,omitempty"`

	// The details of a shipment, including the shipment status.
	Payload *Shipment `json:"payload,omitempty"`
}

// CarrierWillPickUpOption defines model for CarrierWillPickUpOption.
type CarrierWillPickUpOption string

// List of CarrierWillPickUpOption
const (
	CarrierWillPickUpOption_CarrierWillPickUp  CarrierWillPickUpOption = "CarrierWillPickUp"
	CarrierWillPickUpOption_NoPreference       CarrierWillPickUpOption = "NoPreference"
	CarrierWillPickUpOption_ShipperWillDropOff CarrierWillPickUpOption = "ShipperWillDropOff"
)

// City defines model for City.
type City string

// Constraint defines model for Constraint.
type Constraint struct {

	// A regular expression.
	ValidationRegEx *string `json:"ValidationRegEx,omitempty"`

	// A validation string.
	ValidationString string `json:"ValidationString"`
}

// Constraints defines model for Constraints.
type Constraints []Constraint

// CountryCode defines model for CountryCode.
type CountryCode string

// CreateShipmentRequest defines model for CreateShipmentRequest.
type CreateShipmentRequest struct {

	// Hazardous materials options for a package. Consult the terms and conditions for each carrier for more information on hazardous materials.
	HazmatType *HazmatType `json:"HazmatType,omitempty"`

	// Whether to include a packing slip.
	LabelFormatOption *LabelFormatOptionRequest `json:"LabelFormatOption,omitempty"`

	// A list of additional seller input pairs required to purchase shipping.
	ShipmentLevelSellerInputsList *AdditionalSellerInputsList `json:"ShipmentLevelSellerInputsList,omitempty"`

	// Shipment information required for requesting shipping service offers or for creating a shipment.
	ShipmentRequestDetails ShipmentRequestDetails `json:"ShipmentRequestDetails"`

	// An Amazon-defined shipping service identifier.
	ShippingServiceId ShippingServiceIdentifier `json:"ShippingServiceId"`

	// Identifies a shipping service order made by a carrier.
	ShippingServiceOfferId *string `json:"ShippingServiceOfferId,omitempty"`
}

// CreateShipmentResponse defines model for CreateShipmentResponse.
type CreateShipmentResponse struct {

	// A list of error responses returned when a request is unsuccessful.
	Errors *ErrorList `json:"errors,omitempty"`

	// The details of a shipment, including the shipment status.
	Payload *Shipment `json:"payload,omitempty"`
}

// CurrencyAmount defines model for CurrencyAmount.
type CurrencyAmount struct {

	// The currency amount.
	Amount float64 `json:"Amount"`

	// Three-digit currency code in ISO 4217 format.
	CurrencyCode string `json:"CurrencyCode"`
}

// CustomTextForLabel defines model for CustomTextForLabel.
type CustomTextForLabel string

// DeliveryExperienceOption defines model for DeliveryExperienceOption.
type DeliveryExperienceOption string

// List of DeliveryExperienceOption
const (
	DeliveryExperienceOption_DeliveryConfirmationWithAdultSignature DeliveryExperienceOption = "DeliveryConfirmationWithAdultSignature"
	DeliveryExperienceOption_DeliveryConfirmationWithSignature      DeliveryExperienceOption = "DeliveryConfirmationWithSignature"
	DeliveryExperienceOption_DeliveryConfirmationWithoutSignature   DeliveryExperienceOption = "DeliveryConfirmationWithoutSignature"
	DeliveryExperienceOption_NoPreference                           DeliveryExperienceOption = "NoPreference"
	DeliveryExperienceOption_NoTracking                             DeliveryExperienceOption = "NoTracking"
)

// DeliveryExperienceType defines model for DeliveryExperienceType.
type DeliveryExperienceType string

// List of DeliveryExperienceType
const (
	DeliveryExperienceType_DeliveryConfirmationWithAdultSignature DeliveryExperienceType = "DeliveryConfirmationWithAdultSignature"
	DeliveryExperienceType_DeliveryConfirmationWithSignature      DeliveryExperienceType = "DeliveryConfirmationWithSignature"
	DeliveryExperienceType_DeliveryConfirmationWithoutSignature   DeliveryExperienceType = "DeliveryConfirmationWithoutSignature"
	DeliveryExperienceType_NoTracking                             DeliveryExperienceType = "NoTracking"
)

// DistrictOrCounty defines model for DistrictOrCounty.
type DistrictOrCounty string

// EmailAddress defines model for EmailAddress.
type EmailAddress string

// Error defines model for Error.
type Error struct {

	// An error code that identifies the type of error that occured.
	Code string `json:"code"`

	// Additional details that can help the caller understand or fix the issue.
	Details *string `json:"details,omitempty"`

	// A message that describes the error condition in a human-readable form.
	Message string `json:"message"`
}

// ErrorList defines model for ErrorList.
type ErrorList []Error

// FileContents defines model for FileContents.
type FileContents struct {

	// An MD5 hash to validate the PDF document data, in the form of a Base64-encoded string.
	Checksum string `json:"Checksum"`

	// Data for printing labels, in the form of a Base64-encoded, GZip-compressed string.
	Contents string `json:"Contents"`

	// The file type for a label.
	FileType FileType `json:"FileType"`
}

// FileType defines model for FileType.
type FileType string

// List of FileType
const (
	FileType_application_pdf FileType = "application/pdf"
	FileType_application_zpl FileType = "application/zpl"
	FileType_image_png       FileType = "image/png"
)

// GetAdditionalSellerInputsRequest defines model for GetAdditionalSellerInputsRequest.
type GetAdditionalSellerInputsRequest struct {

	// An Amazon-defined order identifier, in 3-7-7 format. <br>**Pattern** : `[0-9A-Z]{3}-[0-9]{7}-[0-9]{7}`.
	OrderId AmazonOrderId `json:"OrderId"`

	// The postal address information.
	ShipFromAddress Address `json:"ShipFromAddress"`

	// An Amazon-defined shipping service identifier.
	ShippingServiceId ShippingServiceIdentifier `json:"ShippingServiceId"`
}

// GetAdditionalSellerInputsResponse defines model for GetAdditionalSellerInputsResponse.
type GetAdditionalSellerInputsResponse struct {

	// A list of error responses returned when a request is unsuccessful.
	Errors *ErrorList `json:"errors,omitempty"`

	// The payload for the getAdditionalSellerInputs operation.
	Payload *GetAdditionalSellerInputsResult `json:"payload,omitempty"`
}

// GetAdditionalSellerInputsResult defines model for GetAdditionalSellerInputsResult.
type GetAdditionalSellerInputsResult struct {

	// A list of item level fields.
	ItemLevelFieldsList *ItemLevelFieldsList `json:"ItemLevelFieldsList,omitempty"`

	// A list of additional inputs.
	ShipmentLevelFields *AdditionalInputsList `json:"ShipmentLevelFields,omitempty"`
}

// GetEligibleShipmentServicesRequest defines model for GetEligibleShipmentServicesRequest.
type GetEligibleShipmentServicesRequest struct {

	// Shipment information required for requesting shipping service offers or for creating a shipment.
	ShipmentRequestDetails ShipmentRequestDetails `json:"ShipmentRequestDetails"`

	// Filter for use when requesting eligible shipping services.
	ShippingOfferingFilter *ShippingOfferingFilter `json:"ShippingOfferingFilter,omitempty"`
}

// GetEligibleShipmentServicesResponse defines model for GetEligibleShipmentServicesResponse.
type GetEligibleShipmentServicesResponse struct {

	// A list of error responses returned when a request is unsuccessful.
	Errors *ErrorList `json:"errors,omitempty"`

	// The payload for the getEligibleShipmentServices operation.
	Payload *GetEligibleShipmentServicesResult `json:"payload,omitempty"`
}

// GetEligibleShipmentServicesResult defines model for GetEligibleShipmentServicesResult.
type GetEligibleShipmentServicesResult struct {

	// List of services that were for some reason unavailable for this request
	RejectedShippingServiceList *RejectedShippingServiceList `json:"RejectedShippingServiceList,omitempty"`

	// A list of shipping services offers.
	ShippingServiceList ShippingServiceList `json:"ShippingServiceList"`

	// A list of temporarily unavailable carriers.
	TemporarilyUnavailableCarrierList *TemporarilyUnavailableCarrierList `json:"TemporarilyUnavailableCarrierList,omitempty"`

	// List of carriers whose terms and conditions were not accepted by the seller.
	TermsAndConditionsNotAcceptedCarrierList *TermsAndConditionsNotAcceptedCarrierList `json:"TermsAndConditionsNotAcceptedCarrierList,omitempty"`
}

// GetShipmentResponse defines model for GetShipmentResponse.
type GetShipmentResponse struct {

	// A list of error responses returned when a request is unsuccessful.
	Errors *ErrorList `json:"errors,omitempty"`

	// The details of a shipment, including the shipment status.
	Payload *Shipment `json:"payload,omitempty"`
}

// HazmatType defines model for HazmatType.
type HazmatType string

// List of HazmatType
const (
	HazmatType_LQHazmat HazmatType = "LQHazmat"
	HazmatType_None     HazmatType = "None"
)

// InputTargetType defines model for InputTargetType.
type InputTargetType string

// List of InputTargetType
const (
	InputTargetType_ITEM_LEVEL     InputTargetType = "ITEM_LEVEL"
	InputTargetType_SHIPMENT_LEVEL InputTargetType = "SHIPMENT_LEVEL"
)

// Item defines model for Item.
type Item struct {

	// The description of the item.
	ItemDescription *ItemDescription `json:"ItemDescription,omitempty"`

	// A list of additional seller input pairs required to purchase shipping.
	ItemLevelSellerInputsList *AdditionalSellerInputsList `json:"ItemLevelSellerInputsList,omitempty"`

	// The weight.
	ItemWeight *Weight `json:"ItemWeight,omitempty"`

	// An Amazon-defined identifier for an individual item in an order.
	OrderItemId OrderItemId `json:"OrderItemId"`

	// The number of items.
	Quantity ItemQuantity `json:"Quantity"`

	// A list of transparency codes.
	TransparencyCodeList *TransparencyCodeList `json:"TransparencyCodeList,omitempty"`
}

// ItemDescription defines model for ItemDescription.
type ItemDescription string

// ItemLevelFields defines model for ItemLevelFields.
type ItemLevelFields struct {

	// A list of additional inputs.
	AdditionalInputs AdditionalInputsList `json:"AdditionalInputs"`

	// The Amazon Standard Identification Number (ASIN) of the item.
	Asin string `json:"Asin"`
}

// ItemLevelFieldsList defines model for ItemLevelFieldsList.
type ItemLevelFieldsList []ItemLevelFields

// ItemList defines model for ItemList.
type ItemList []Item

// ItemQuantity defines model for ItemQuantity.
type ItemQuantity int32

// Label defines model for Label.
type Label struct {

	// Custom text to print on the label.
	//
	// Note: Custom text is only included on labels that are in ZPL format (ZPL203). FedEx does not support CustomTextForLabel.
	CustomTextForLabel *CustomTextForLabel `json:"CustomTextForLabel,omitempty"`

	// Dimensions for printing a shipping label.
	Dimensions LabelDimensions `json:"Dimensions"`

	// The document data and checksum.
	FileContents FileContents `json:"FileContents"`

	// The label format.
	LabelFormat *LabelFormat `json:"LabelFormat,omitempty"`

	// The type of standard identifier to print on the label.
	StandardIdForLabel *StandardIdForLabel `json:"StandardIdForLabel,omitempty"`
}

// LabelCustomization defines model for LabelCustomization.
type LabelCustomization struct {

	// Custom text to print on the label.
	//
	// Note: Custom text is only included on labels that are in ZPL format (ZPL203). FedEx does not support CustomTextForLabel.
	CustomTextForLabel *CustomTextForLabel `json:"CustomTextForLabel,omitempty"`

	// The type of standard identifier to print on the label.
	StandardIdForLabel *StandardIdForLabel `json:"StandardIdForLabel,omitempty"`
}

// LabelDimension defines model for LabelDimension.
type LabelDimension float32

// LabelDimensions defines model for LabelDimensions.
type LabelDimensions struct {

	// A label dimension.
	Length LabelDimension `json:"Length"`

	// The unit of length.
	Unit UnitOfLength `json:"Unit"`

	// A label dimension.
	Width LabelDimension `json:"Width"`
}

// LabelFormat defines model for LabelFormat.
type LabelFormat string

// List of LabelFormat
const (
	LabelFormat_PDF                    LabelFormat = "PDF"
	LabelFormat_PNG                    LabelFormat = "PNG"
	LabelFormat_ShippingServiceDefault LabelFormat = "ShippingServiceDefault"
	LabelFormat_ZPL203                 LabelFormat = "ZPL203"
	LabelFormat_ZPL300                 LabelFormat = "ZPL300"
)

// LabelFormatList defines model for LabelFormatList.
type LabelFormatList []LabelFormat

// LabelFormatOption defines model for LabelFormatOption.
type LabelFormatOption struct {

	// When true, include a packing slip with the label.
	IncludePackingSlipWithLabel *bool `json:"IncludePackingSlipWithLabel,omitempty"`

	// The label format.
	LabelFormat *LabelFormat `json:"LabelFormat,omitempty"`
}

// LabelFormatOptionRequest defines model for LabelFormatOptionRequest.
type LabelFormatOptionRequest struct {

	// When true, include a packing slip with the label.
	IncludePackingSlipWithLabel *bool `json:"IncludePackingSlipWithLabel,omitempty"`
}

// Length defines model for Length.
type Length struct {

	// The unit of length.
	Unit *UnitOfLength `json:"unit,omitempty"`

	// The value in units.
	Value *float32 `json:"value,omitempty"`
}

// OrderItemId defines model for OrderItemId.
type OrderItemId string

// PackageDimension defines model for PackageDimension.
type PackageDimension float64

// PackageDimensions defines model for PackageDimensions.
type PackageDimensions struct {
	Height *PackageDimension `json:"Height,omitempty"`
	Length *PackageDimension `json:"Length,omitempty"`

	// An enumeration of predefined parcel tokens. If you specify a PredefinedPackageDimensions token, you are not obligated to use a branded package from a carrier. For example, if you specify the FedEx_Box_10kg token, you do not have to use that particular package from FedEx. You are only obligated to use a box that matches the dimensions specified by the token.
	//
	// Note: Please note that carriers can have restrictions on the type of package allowed for certain ship methods. Check the carrier website for all details. Example: Flat rate pricing is available when materials are sent by USPS in a USPS-produced Flat Rate Envelope or Box.
	PredefinedPackageDimensions *PredefinedPackageDimensions `json:"PredefinedPackageDimensions,omitempty"`

	// The unit of length.
	Unit  *UnitOfLength     `json:"Unit,omitempty"`
	Width *PackageDimension `json:"Width,omitempty"`
}

// PhoneNumber defines model for PhoneNumber.
type PhoneNumber string

// PostalCode defines model for PostalCode.
type PostalCode string

// PredefinedPackageDimensions defines model for PredefinedPackageDimensions.
type PredefinedPackageDimensions string

// List of PredefinedPackageDimensions
const (
	PredefinedPackageDimensions_FedEx_Box_10kg                 PredefinedPackageDimensions = "FedEx_Box_10kg"
	PredefinedPackageDimensions_FedEx_Box_25kg                 PredefinedPackageDimensions = "FedEx_Box_25kg"
	PredefinedPackageDimensions_FedEx_Box_Extra_Large_1        PredefinedPackageDimensions = "FedEx_Box_Extra_Large_1"
	PredefinedPackageDimensions_FedEx_Box_Extra_Large_2        PredefinedPackageDimensions = "FedEx_Box_Extra_Large_2"
	PredefinedPackageDimensions_FedEx_Box_Large_1              PredefinedPackageDimensions = "FedEx_Box_Large_1"
	PredefinedPackageDimensions_FedEx_Box_Large_2              PredefinedPackageDimensions = "FedEx_Box_Large_2"
	PredefinedPackageDimensions_FedEx_Box_Medium_1             PredefinedPackageDimensions = "FedEx_Box_Medium_1"
	PredefinedPackageDimensions_FedEx_Box_Medium_2             PredefinedPackageDimensions = "FedEx_Box_Medium_2"
	PredefinedPackageDimensions_FedEx_Box_Small_1              PredefinedPackageDimensions = "FedEx_Box_Small_1"
	PredefinedPackageDimensions_FedEx_Box_Small_2              PredefinedPackageDimensions = "FedEx_Box_Small_2"
	PredefinedPackageDimensions_FedEx_Envelope                 PredefinedPackageDimensions = "FedEx_Envelope"
	PredefinedPackageDimensions_FedEx_Padded_Pak               PredefinedPackageDimensions = "FedEx_Padded_Pak"
	PredefinedPackageDimensions_FedEx_Pak_1                    PredefinedPackageDimensions = "FedEx_Pak_1"
	PredefinedPackageDimensions_FedEx_Pak_2                    PredefinedPackageDimensions = "FedEx_Pak_2"
	PredefinedPackageDimensions_FedEx_Tube                     PredefinedPackageDimensions = "FedEx_Tube"
	PredefinedPackageDimensions_FedEx_XL_Pak                   PredefinedPackageDimensions = "FedEx_XL_Pak"
	PredefinedPackageDimensions_UPS_Box_10kg                   PredefinedPackageDimensions = "UPS_Box_10kg"
	PredefinedPackageDimensions_UPS_Box_25kg                   PredefinedPackageDimensions = "UPS_Box_25kg"
	PredefinedPackageDimensions_UPS_Express_Box                PredefinedPackageDimensions = "UPS_Express_Box"
	PredefinedPackageDimensions_UPS_Express_Box_Large          PredefinedPackageDimensions = "UPS_Express_Box_Large"
	PredefinedPackageDimensions_UPS_Express_Box_Medium         PredefinedPackageDimensions = "UPS_Express_Box_Medium"
	PredefinedPackageDimensions_UPS_Express_Box_Small          PredefinedPackageDimensions = "UPS_Express_Box_Small"
	PredefinedPackageDimensions_UPS_Express_Envelope           PredefinedPackageDimensions = "UPS_Express_Envelope"
	PredefinedPackageDimensions_UPS_Express_Hard_Pak           PredefinedPackageDimensions = "UPS_Express_Hard_Pak"
	PredefinedPackageDimensions_UPS_Express_Legal_Envelope     PredefinedPackageDimensions = "UPS_Express_Legal_Envelope"
	PredefinedPackageDimensions_UPS_Express_Pak                PredefinedPackageDimensions = "UPS_Express_Pak"
	PredefinedPackageDimensions_UPS_Express_Tube               PredefinedPackageDimensions = "UPS_Express_Tube"
	PredefinedPackageDimensions_UPS_Laboratory_Pak             PredefinedPackageDimensions = "UPS_Laboratory_Pak"
	PredefinedPackageDimensions_UPS_Pad_Pak                    PredefinedPackageDimensions = "UPS_Pad_Pak"
	PredefinedPackageDimensions_UPS_Pallet                     PredefinedPackageDimensions = "UPS_Pallet"
	PredefinedPackageDimensions_USPS_Card                      PredefinedPackageDimensions = "USPS_Card"
	PredefinedPackageDimensions_USPS_Flat                      PredefinedPackageDimensions = "USPS_Flat"
	PredefinedPackageDimensions_USPS_FlatRateCardboardEnvelope PredefinedPackageDimensions = "USPS_FlatRateCardboardEnvelope"
	PredefinedPackageDimensions_USPS_FlatRateEnvelope          PredefinedPackageDimensions = "USPS_FlatRateEnvelope"
	PredefinedPackageDimensions_USPS_FlatRateGiftCardEnvelope  PredefinedPackageDimensions = "USPS_FlatRateGiftCardEnvelope"
	PredefinedPackageDimensions_USPS_FlatRateLegalEnvelope     PredefinedPackageDimensions = "USPS_FlatRateLegalEnvelope"
	PredefinedPackageDimensions_USPS_FlatRatePaddedEnvelope    PredefinedPackageDimensions = "USPS_FlatRatePaddedEnvelope"
	PredefinedPackageDimensions_USPS_FlatRateWindowEnvelope    PredefinedPackageDimensions = "USPS_FlatRateWindowEnvelope"
	PredefinedPackageDimensions_USPS_LargeFlatRateBoardGameBox PredefinedPackageDimensions = "USPS_LargeFlatRateBoardGameBox"
	PredefinedPackageDimensions_USPS_LargeFlatRateBox          PredefinedPackageDimensions = "USPS_LargeFlatRateBox"
	PredefinedPackageDimensions_USPS_Letter                    PredefinedPackageDimensions = "USPS_Letter"
	PredefinedPackageDimensions_USPS_MediumFlatRateBox1        PredefinedPackageDimensions = "USPS_MediumFlatRateBox1"
	PredefinedPackageDimensions_USPS_MediumFlatRateBox2        PredefinedPackageDimensions = "USPS_MediumFlatRateBox2"
	PredefinedPackageDimensions_USPS_RegionalRateBoxA1         PredefinedPackageDimensions = "USPS_RegionalRateBoxA1"
	PredefinedPackageDimensions_USPS_RegionalRateBoxA2         PredefinedPackageDimensions = "USPS_RegionalRateBoxA2"
	PredefinedPackageDimensions_USPS_RegionalRateBoxB1         PredefinedPackageDimensions = "USPS_RegionalRateBoxB1"
	PredefinedPackageDimensions_USPS_RegionalRateBoxB2         PredefinedPackageDimensions = "USPS_RegionalRateBoxB2"
	PredefinedPackageDimensions_USPS_RegionalRateBoxC          PredefinedPackageDimensions = "USPS_RegionalRateBoxC"
	PredefinedPackageDimensions_USPS_SmallFlatRateBox          PredefinedPackageDimensions = "USPS_SmallFlatRateBox"
	PredefinedPackageDimensions_USPS_SmallFlatRateEnvelope     PredefinedPackageDimensions = "USPS_SmallFlatRateEnvelope"
)

// RejectedShippingService defines model for RejectedShippingService.
type RejectedShippingService struct {

	// The rejected shipping carrier name. e.g. USPS
	CarrierName string `json:"CarrierName"`

	// A reason code meant to be consumed programatically. e.g. CARRIER_CANNOT_SHIP_TO_POBOX
	RejectionReasonCode string `json:"RejectionReasonCode"`

	// A localized human readable description of the rejected reason.
	RejectionReasonMessage *string `json:"RejectionReasonMessage,omitempty"`

	// An Amazon-defined shipping service identifier.
	ShippingServiceId ShippingServiceIdentifier `json:"ShippingServiceId"`

	// The rejected shipping service localized name. e.g. FedEx Standard Overnight
	ShippingServiceName string `json:"ShippingServiceName"`
}

// RejectedShippingServiceList defines model for RejectedShippingServiceList.
type RejectedShippingServiceList []RejectedShippingService

// RestrictedSetValues defines model for RestrictedSetValues.
type RestrictedSetValues []string

// SellerInputDefinition defines model for SellerInputDefinition.
type SellerInputDefinition struct {

	// List of constraints.
	Constraints Constraints `json:"Constraints"`

	// The data type of the additional input field.
	DataType string `json:"DataType"`

	// The display text for the additional input field.
	InputDisplayText string `json:"InputDisplayText"`

	// Indicates whether the additional seller input is at the item or shipment level.
	InputTarget *InputTargetType `json:"InputTarget,omitempty"`

	// When true, the additional input field is required.
	IsRequired bool `json:"IsRequired"`

	// The set of fixed values in an additional seller input.
	RestrictedSetValues *RestrictedSetValues `json:"RestrictedSetValues,omitempty"`

	// Additional information required to purchase shipping.
	StoredValue AdditionalSellerInput `json:"StoredValue"`
}

// SellerOrderId defines model for SellerOrderId.
type SellerOrderId string

// Shipment defines model for Shipment.
type Shipment struct {

	// An Amazon-defined order identifier, in 3-7-7 format. <br>**Pattern** : `[0-9A-Z]{3}-[0-9]{7}-[0-9]{7}`.
	AmazonOrderId AmazonOrderId `json:"AmazonOrderId"`
	CreatedDate   Timestamp     `json:"CreatedDate"`

	// Currency type and amount.
	Insurance CurrencyAmount `json:"Insurance"`

	// The list of items to be included in a shipment.
	ItemList ItemList `json:"ItemList"`

	// Data for creating a shipping label and dimensions for printing the label.
	Label           Label      `json:"Label"`
	LastUpdatedDate *Timestamp `json:"LastUpdatedDate,omitempty"`

	// The dimensions of a package contained in a shipment.
	PackageDimensions PackageDimensions `json:"PackageDimensions"`

	// A seller-defined order identifier.
	SellerOrderId *SellerOrderId `json:"SellerOrderId,omitempty"`

	// The postal address information.
	ShipFromAddress Address `json:"ShipFromAddress"`

	// The postal address information.
	ShipToAddress Address `json:"ShipToAddress"`

	// An Amazon-defined shipment identifier.
	ShipmentId ShipmentId `json:"ShipmentId"`

	// A shipping service offer made by a carrier.
	ShippingService ShippingService `json:"ShippingService"`

	// The shipment status.
	Status ShipmentStatus `json:"Status"`

	// The shipment tracking identifier provided by the carrier.
	TrackingId *TrackingId `json:"TrackingId,omitempty"`

	// The weight.
	Weight Weight `json:"Weight"`
}

// ShipmentId defines model for ShipmentId.
type ShipmentId string

// ShipmentRequestDetails defines model for ShipmentRequestDetails.
type ShipmentRequestDetails struct {

	// An Amazon-defined order identifier, in 3-7-7 format. <br>**Pattern** : `[0-9A-Z]{3}-[0-9]{7}-[0-9]{7}`.
	AmazonOrderId AmazonOrderId `json:"AmazonOrderId"`

	// The list of items to be included in a shipment.
	ItemList ItemList `json:"ItemList"`

	// Custom text for shipping labels.
	LabelCustomization *LabelCustomization `json:"LabelCustomization,omitempty"`
	MustArriveByDate   *Timestamp          `json:"MustArriveByDate,omitempty"`

	// The dimensions of a package contained in a shipment.
	PackageDimensions PackageDimensions `json:"PackageDimensions"`

	// A seller-defined order identifier.
	SellerOrderId *SellerOrderId `json:"SellerOrderId,omitempty"`
	ShipDate      *Timestamp     `json:"ShipDate,omitempty"`

	// The postal address information.
	ShipFromAddress Address `json:"ShipFromAddress"`

	// Extra services provided by a carrier.
	ShippingServiceOptions ShippingServiceOptions `json:"ShippingServiceOptions"`

	// The weight.
	Weight Weight `json:"Weight"`
}

// ShipmentStatus defines model for ShipmentStatus.
type ShipmentStatus string

// List of ShipmentStatus
const (
	ShipmentStatus_Purchased      ShipmentStatus = "Purchased"
	ShipmentStatus_RefundApplied  ShipmentStatus = "RefundApplied"
	ShipmentStatus_RefundPending  ShipmentStatus = "RefundPending"
	ShipmentStatus_RefundRejected ShipmentStatus = "RefundRejected"
)

// ShippingOfferingFilter defines model for ShippingOfferingFilter.
type ShippingOfferingFilter struct {

	// Carrier will pick up option.
	CarrierWillPickUp *CarrierWillPickUpOption `json:"CarrierWillPickUp,omitempty"`

	// The delivery confirmation level.
	DeliveryExperience *DeliveryExperienceOption `json:"DeliveryExperience,omitempty"`

	// When true, include complex shipping options.
	IncludeComplexShippingOptions *bool `json:"IncludeComplexShippingOptions,omitempty"`

	// When true, include a packing slip with the label.
	IncludePackingSlipWithLabel *bool `json:"IncludePackingSlipWithLabel,omitempty"`
}

// ShippingService defines model for ShippingService.
type ShippingService struct {

	// The available label formats.
	AvailableFormatOptionsForLabel *AvailableFormatOptionsForLabelList `json:"AvailableFormatOptionsForLabel,omitempty"`

	// List of label formats.
	AvailableLabelFormats *LabelFormatList `json:"AvailableLabelFormats,omitempty"`

	// The available shipping service options.
	AvailableShippingServiceOptions *AvailableShippingServiceOptions `json:"AvailableShippingServiceOptions,omitempty"`

	// The name of the carrier.
	CarrierName                   string     `json:"CarrierName"`
	EarliestEstimatedDeliveryDate *Timestamp `json:"EarliestEstimatedDeliveryDate,omitempty"`
	LatestEstimatedDeliveryDate   *Timestamp `json:"LatestEstimatedDeliveryDate,omitempty"`

	// Currency type and amount.
	Rate CurrencyAmount `json:"Rate"`

	// When true, additional seller inputs are required.
	RequiresAdditionalSellerInputs bool      `json:"RequiresAdditionalSellerInputs"`
	ShipDate                       Timestamp `json:"ShipDate"`

	// An Amazon-defined shipping service identifier.
	ShippingServiceId ShippingServiceIdentifier `json:"ShippingServiceId"`

	// A plain text representation of a carrier's shipping service. For example, "UPS Ground" or "FedEx Standard Overnight".
	ShippingServiceName string `json:"ShippingServiceName"`

	// An Amazon-defined shipping service offer identifier.
	ShippingServiceOfferId string `json:"ShippingServiceOfferId"`

	// Extra services provided by a carrier.
	ShippingServiceOptions ShippingServiceOptions `json:"ShippingServiceOptions"`
}

// ShippingServiceIdentifier defines model for ShippingServiceIdentifier.
type ShippingServiceIdentifier string

// ShippingServiceList defines model for ShippingServiceList.
type ShippingServiceList []ShippingService

// ShippingServiceOptions defines model for ShippingServiceOptions.
type ShippingServiceOptions struct {

	// When true, the carrier will pick up the package.
	//
	// Note: Scheduled carrier pickup is available only using Dynamex (US), DPD (UK), and Royal Mail (UK).
	CarrierWillPickUp bool `json:"CarrierWillPickUp"`

	// Carrier will pick up option.
	CarrierWillPickUpOption *CarrierWillPickUpOption `json:"CarrierWillPickUpOption,omitempty"`

	// Currency type and amount.
	DeclaredValue *CurrencyAmount `json:"DeclaredValue,omitempty"`

	// The delivery confirmation level.
	DeliveryExperience DeliveryExperienceType `json:"DeliveryExperience"`

	// The label format.
	LabelFormat *LabelFormat `json:"LabelFormat,omitempty"`
}

// StandardIdForLabel defines model for StandardIdForLabel.
type StandardIdForLabel string

// List of StandardIdForLabel
const (
	StandardIdForLabel_AmazonOrderId StandardIdForLabel = "AmazonOrderId"
)

// StateOrProvinceCode defines model for StateOrProvinceCode.
type StateOrProvinceCode string

// TemporarilyUnavailableCarrier defines model for TemporarilyUnavailableCarrier.
type TemporarilyUnavailableCarrier struct {

	// The name of the carrier.
	CarrierName string `json:"CarrierName"`
}

// TemporarilyUnavailableCarrierList defines model for TemporarilyUnavailableCarrierList.
type TemporarilyUnavailableCarrierList []TemporarilyUnavailableCarrier

// TermsAndConditionsNotAcceptedCarrier defines model for TermsAndConditionsNotAcceptedCarrier.
type TermsAndConditionsNotAcceptedCarrier struct {

	// The name of the carrier.
	CarrierName string `json:"CarrierName"`
}

// TermsAndConditionsNotAcceptedCarrierList defines model for TermsAndConditionsNotAcceptedCarrierList.
type TermsAndConditionsNotAcceptedCarrierList []TermsAndConditionsNotAcceptedCarrier

// Timestamp defines model for Timestamp.
type Timestamp time.Time

// TrackingId defines model for TrackingId.
type TrackingId string

// TransparencyCode defines model for TransparencyCode.
type TransparencyCode string

// TransparencyCodeList defines model for TransparencyCodeList.
type TransparencyCodeList []TransparencyCode

// UnitOfLength defines model for UnitOfLength.
type UnitOfLength string

// List of UnitOfLength
const (
	UnitOfLength_centimeters UnitOfLength = "centimeters"
	UnitOfLength_inches      UnitOfLength = "inches"
)

// UnitOfWeight defines model for UnitOfWeight.
type UnitOfWeight string

// List of UnitOfWeight
const (
	UnitOfWeight_g  UnitOfWeight = "g"
	UnitOfWeight_oz UnitOfWeight = "oz"
)

// Weight defines model for Weight.
type Weight struct {

	// The unit of weight.
	Unit UnitOfWeight `json:"Unit"`

	// The weight value.
	Value WeightValue `json:"Value"`
}

// WeightValue defines model for WeightValue.
type WeightValue float64

// GetAdditionalSellerInputsJSONBody defines parameters for GetAdditionalSellerInputs.
type GetAdditionalSellerInputsJSONBody GetAdditionalSellerInputsRequest

// GetEligibleShipmentServicesOldJSONBody defines parameters for GetEligibleShipmentServicesOld.
type GetEligibleShipmentServicesOldJSONBody GetEligibleShipmentServicesRequest

// GetEligibleShipmentServicesJSONBody defines parameters for GetEligibleShipmentServices.
type GetEligibleShipmentServicesJSONBody GetEligibleShipmentServicesRequest

// GetAdditionalSellerInputsOldJSONBody defines parameters for GetAdditionalSellerInputsOld.
type GetAdditionalSellerInputsOldJSONBody GetAdditionalSellerInputsRequest

// CreateShipmentJSONBody defines parameters for CreateShipment.
type CreateShipmentJSONBody CreateShipmentRequest

// GetAdditionalSellerInputsRequestBody defines body for GetAdditionalSellerInputs for application/json ContentType.
type GetAdditionalSellerInputsJSONRequestBody GetAdditionalSellerInputsJSONBody

// GetEligibleShipmentServicesOldRequestBody defines body for GetEligibleShipmentServicesOld for application/json ContentType.
type GetEligibleShipmentServicesOldJSONRequestBody GetEligibleShipmentServicesOldJSONBody

// GetEligibleShipmentServicesRequestBody defines body for GetEligibleShipmentServices for application/json ContentType.
type GetEligibleShipmentServicesJSONRequestBody GetEligibleShipmentServicesJSONBody

// GetAdditionalSellerInputsOldRequestBody defines body for GetAdditionalSellerInputsOld for application/json ContentType.
type GetAdditionalSellerInputsOldJSONRequestBody GetAdditionalSellerInputsOldJSONBody

// CreateShipmentRequestBody defines body for CreateShipment for application/json ContentType.
type CreateShipmentJSONRequestBody CreateShipmentJSONBody
