# DO NOT EDIT! This file is automatically generated
import marshmallow
import marshmallow_enum

from commercetools import helpers, types
from commercetools._schemas._common import BaseResourceSchema, LocalizedStringField
from commercetools._schemas._type import FieldContainerField

__all__ = [
    "MyCartAddDiscountCodeActionSchema",
    "MyCartAddItemShippingAddressActionSchema",
    "MyCartAddLineItemActionSchema",
    "MyCartAddPaymentActionSchema",
    "MyCartApplyDeltaToLineItemShippingDetailsTargetsActionSchema",
    "MyCartChangeLineItemQuantityActionSchema",
    "MyCartChangeTaxModeActionSchema",
    "MyCartDraftSchema",
    "MyCartRecalculateActionSchema",
    "MyCartRemoveDiscountCodeActionSchema",
    "MyCartRemoveItemShippingAddressActionSchema",
    "MyCartRemoveLineItemActionSchema",
    "MyCartRemovePaymentActionSchema",
    "MyCartSchema",
    "MyCartSetBillingAddressActionSchema",
    "MyCartSetCountryActionSchema",
    "MyCartSetCustomFieldActionSchema",
    "MyCartSetCustomShippingMethodActionSchema",
    "MyCartSetCustomTypeActionSchema",
    "MyCartSetDeleteDaysAfterLastModificationActionSchema",
    "MyCartSetLineItemCustomFieldActionSchema",
    "MyCartSetLineItemCustomTypeActionSchema",
    "MyCartSetLineItemDistributionChannelActionSchema",
    "MyCartSetLineItemShippingDetailsActionSchema",
    "MyCartSetLocaleActionSchema",
    "MyCartSetShippingAddressActionSchema",
    "MyCartSetShippingMethodActionSchema",
    "MyCartUpdateActionSchema",
    "MyCartUpdateItemShippingAddressActionSchema",
    "MyCustomerAddAddressActionSchema",
    "MyCustomerAddBillingAddressIdActionSchema",
    "MyCustomerAddShippingAddressIdActionSchema",
    "MyCustomerChangeAddressActionSchema",
    "MyCustomerChangeEmailActionSchema",
    "MyCustomerDraftSchema",
    "MyCustomerRemoveAddressActionSchema",
    "MyCustomerRemoveBillingAddressIdActionSchema",
    "MyCustomerRemoveShippingAddressIdActionSchema",
    "MyCustomerSchema",
    "MyCustomerSetCompanyNameActionSchema",
    "MyCustomerSetCustomFieldActionSchema",
    "MyCustomerSetCustomTypeActionSchema",
    "MyCustomerSetDateOfBirthActionSchema",
    "MyCustomerSetDefaultBillingAddressActionSchema",
    "MyCustomerSetDefaultShippingAddressActionSchema",
    "MyCustomerSetFirstNameActionSchema",
    "MyCustomerSetLastNameActionSchema",
    "MyCustomerSetLocaleActionSchema",
    "MyCustomerSetMiddleNameActionSchema",
    "MyCustomerSetSalutationActionSchema",
    "MyCustomerSetTitleActionSchema",
    "MyCustomerSetVatIdActionSchema",
    "MyCustomerUpdateActionSchema",
    "MyLineItemDraftSchema",
    "MyOrderFromCartDraftSchema",
    "MyOrderSchema",
    "MyPaymentAddTransactionActionSchema",
    "MyPaymentChangeAmountPlannedActionSchema",
    "MyPaymentDraftSchema",
    "MyPaymentPagedQueryResponseSchema",
    "MyPaymentSchema",
    "MyPaymentSetCustomFieldActionSchema",
    "MyPaymentSetMethodInfoInterfaceActionSchema",
    "MyPaymentSetMethodInfoMethodActionSchema",
    "MyPaymentSetMethodInfoNameActionSchema",
    "MyPaymentUpdateActionSchema",
    "MyPaymentUpdateSchema",
    "MyShoppingListAddLineItemActionSchema",
    "MyShoppingListAddTextLineItemActionSchema",
    "MyShoppingListChangeLineItemQuantityActionSchema",
    "MyShoppingListChangeLineItemsOrderActionSchema",
    "MyShoppingListChangeNameActionSchema",
    "MyShoppingListChangeTextLineItemNameActionSchema",
    "MyShoppingListChangeTextLineItemQuantityActionSchema",
    "MyShoppingListChangeTextLineItemsOrderActionSchema",
    "MyShoppingListDraftSchema",
    "MyShoppingListRemoveLineItemActionSchema",
    "MyShoppingListRemoveTextLineItemActionSchema",
    "MyShoppingListSetCustomFieldActionSchema",
    "MyShoppingListSetCustomTypeActionSchema",
    "MyShoppingListSetDeleteDaysAfterLastModificationActionSchema",
    "MyShoppingListSetDescriptionActionSchema",
    "MyShoppingListSetLineItemCustomFieldActionSchema",
    "MyShoppingListSetLineItemCustomTypeActionSchema",
    "MyShoppingListSetTextLineItemCustomFieldActionSchema",
    "MyShoppingListSetTextLineItemCustomTypeActionSchema",
    "MyShoppingListSetTextLineItemDescriptionActionSchema",
    "MyShoppingListUpdateActionSchema",
    "MyShoppingListUpdateSchema",
    "MyTransactionDraftSchema",
]


class MyCartDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyCartDraft`."""

    currency = marshmallow.fields.String()
    customer_email = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="customerEmail"
    )
    country = marshmallow.fields.String(allow_none=True, missing=None)
    inventory_mode = marshmallow_enum.EnumField(
        types.InventoryMode, by_value=True, missing=None, data_key="inventoryMode"
    )
    line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._me.MyLineItemDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="lineItems",
    )
    shipping_address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingAddress",
    )
    billing_address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="billingAddress",
    )
    shipping_method = helpers.LazyNestedField(
        nested="commercetools._schemas._shipping_method.ShippingMethodResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingMethod",
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    locale = marshmallow.fields.String(allow_none=True, missing=None)
    tax_mode = marshmallow_enum.EnumField(
        types.TaxMode, by_value=True, missing=None, data_key="taxMode"
    )
    delete_days_after_last_modification = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="deleteDaysAfterLastModification"
    )
    item_shipping_addresses = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="itemShippingAddresses",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyCartDraft(**data)


class MyCartSchema(BaseResourceSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCart`."""

    id = marshmallow.fields.String(allow_none=True)
    version = marshmallow.fields.Integer(allow_none=True)
    created_at = marshmallow.fields.DateTime(allow_none=True, data_key="createdAt")
    last_modified_at = marshmallow.fields.DateTime(
        allow_none=True, data_key="lastModifiedAt"
    )
    last_modified_by = helpers.LazyNestedField(
        nested="commercetools._schemas._common.LastModifiedBySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="lastModifiedBy",
    )
    created_by = helpers.LazyNestedField(
        nested="commercetools._schemas._common.CreatedBySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="createdBy",
    )
    customer_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="customerId"
    )
    customer_email = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="customerEmail"
    )
    anonymous_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="anonymousId"
    )
    store = helpers.LazyNestedField(
        nested="commercetools._schemas._store.StoreKeyReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.LineItemSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="lineItems",
    )
    custom_line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.CustomLineItemSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="customLineItems",
    )
    total_price = helpers.Discriminator(
        discriminator_field=("type", "type"),
        discriminator_schemas={
            "centPrecision": "commercetools._schemas._common.CentPrecisionMoneySchema",
            "highPrecision": "commercetools._schemas._common.HighPrecisionMoneySchema",
        },
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="totalPrice",
    )
    taxed_price = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.TaxedPriceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="taxedPrice",
    )
    cart_state = marshmallow_enum.EnumField(
        types.CartState, by_value=True, data_key="cartState"
    )
    shipping_address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingAddress",
    )
    billing_address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="billingAddress",
    )
    inventory_mode = marshmallow_enum.EnumField(
        types.InventoryMode, by_value=True, missing=None, data_key="inventoryMode"
    )
    tax_mode = marshmallow_enum.EnumField(
        types.TaxMode, by_value=True, data_key="taxMode"
    )
    tax_rounding_mode = marshmallow_enum.EnumField(
        types.RoundingMode, by_value=True, data_key="taxRoundingMode"
    )
    tax_calculation_mode = marshmallow_enum.EnumField(
        types.TaxCalculationMode, by_value=True, data_key="taxCalculationMode"
    )
    customer_group = helpers.LazyNestedField(
        nested="commercetools._schemas._customer_group.CustomerGroupReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="customerGroup",
    )
    country = marshmallow.fields.String(missing=None)
    shipping_info = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ShippingInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingInfo",
    )
    discount_codes = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.DiscountCodeInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="discountCodes",
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    payment_info = helpers.LazyNestedField(
        nested="commercetools._schemas._order.PaymentInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="paymentInfo",
    )
    locale = marshmallow.fields.String(allow_none=True, missing=None)
    delete_days_after_last_modification = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="deleteDaysAfterLastModification"
    )
    refused_gifts = helpers.LazyNestedField(
        nested="commercetools._schemas._cart_discount.CartDiscountReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="refusedGifts",
    )
    origin = marshmallow_enum.EnumField(types.CartOrigin, by_value=True)
    shipping_rate_input = helpers.Discriminator(
        discriminator_field=("type", "type"),
        discriminator_schemas={
            "Classification": "commercetools._schemas._cart.ClassificationShippingRateInputSchema",
            "Score": "commercetools._schemas._cart.ScoreShippingRateInputSchema",
        },
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingRateInput",
    )
    item_shipping_addresses = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="itemShippingAddresses",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyCart(**data)


class MyCartUpdateActionSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyCartUpdateAction`."""

    action = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartUpdateAction(**data)


class MyCustomerDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerDraft`."""

    email = marshmallow.fields.String(allow_none=True)
    password = marshmallow.fields.String(allow_none=True)
    first_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="firstName"
    )
    last_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="lastName"
    )
    middle_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="middleName"
    )
    title = marshmallow.fields.String(allow_none=True, missing=None)
    date_of_birth = marshmallow.fields.Date(
        allow_none=True, missing=None, data_key="dateOfBirth"
    )
    company_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="companyName"
    )
    vat_id = marshmallow.fields.String(allow_none=True, missing=None, data_key="vatId")
    addresses = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
    )
    default_shipping_address = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="defaultShippingAddress"
    )
    default_billing_address = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="defaultBillingAddress"
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    locale = marshmallow.fields.String(allow_none=True, missing=None)
    stores = helpers.LazyNestedField(
        nested="commercetools._schemas._store.StoreResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyCustomerDraft(**data)


class MyCustomerSchema(BaseResourceSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomer`."""

    id = marshmallow.fields.String(allow_none=True)
    version = marshmallow.fields.Integer(allow_none=True)
    created_at = marshmallow.fields.DateTime(allow_none=True, data_key="createdAt")
    last_modified_at = marshmallow.fields.DateTime(
        allow_none=True, data_key="lastModifiedAt"
    )
    last_modified_by = helpers.LazyNestedField(
        nested="commercetools._schemas._common.LastModifiedBySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="lastModifiedBy",
    )
    created_by = helpers.LazyNestedField(
        nested="commercetools._schemas._common.CreatedBySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="createdBy",
    )
    customer_number = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="customerNumber"
    )
    email = marshmallow.fields.String(allow_none=True)
    password = marshmallow.fields.String(allow_none=True)
    first_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="firstName"
    )
    last_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="lastName"
    )
    middle_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="middleName"
    )
    title = marshmallow.fields.String(allow_none=True, missing=None)
    date_of_birth = marshmallow.fields.Date(
        allow_none=True, missing=None, data_key="dateOfBirth"
    )
    company_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="companyName"
    )
    vat_id = marshmallow.fields.String(allow_none=True, missing=None, data_key="vatId")
    addresses = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
    )
    default_shipping_address_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="defaultShippingAddressId"
    )
    shipping_address_ids = marshmallow.fields.List(
        marshmallow.fields.String(allow_none=True),
        missing=None,
        data_key="shippingAddressIds",
    )
    default_billing_address_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="defaultBillingAddressId"
    )
    billing_address_ids = marshmallow.fields.List(
        marshmallow.fields.String(allow_none=True),
        missing=None,
        data_key="billingAddressIds",
    )
    is_email_verified = marshmallow.fields.Bool(
        allow_none=True, data_key="isEmailVerified"
    )
    external_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="externalId"
    )
    customer_group = helpers.LazyNestedField(
        nested="commercetools._schemas._customer_group.CustomerGroupReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="customerGroup",
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    locale = marshmallow.fields.String(allow_none=True, missing=None)
    salutation = marshmallow.fields.String(allow_none=True, missing=None)
    key = marshmallow.fields.String(allow_none=True, missing=None)
    stores = helpers.LazyNestedField(
        nested="commercetools._schemas._store.StoreKeyReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyCustomer(**data)


class MyCustomerUpdateActionSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerUpdateAction`."""

    action = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerUpdateAction(**data)


class MyLineItemDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyLineItemDraft`."""

    product_id = marshmallow.fields.String(allow_none=True, data_key="productId")
    variant_id = marshmallow.fields.Integer(allow_none=True, data_key="variantId")
    quantity = marshmallow.fields.Integer(allow_none=True)
    added_at = marshmallow.fields.DateTime(
        allow_none=True, missing=None, data_key="addedAt"
    )
    supply_channel = helpers.LazyNestedField(
        nested="commercetools._schemas._channel.ChannelResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="supplyChannel",
    )
    distribution_channel = helpers.LazyNestedField(
        nested="commercetools._schemas._channel.ChannelResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="distributionChannel",
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    shipping_details = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ItemShippingDetailsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingDetails",
    )
    sku = marshmallow.fields.String(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyLineItemDraft(**data)


class MyOrderFromCartDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyOrderFromCartDraft`."""

    id = marshmallow.fields.String(allow_none=True)
    version = marshmallow.fields.Integer(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyOrderFromCartDraft(**data)


class MyOrderSchema(BaseResourceSchema):
    """Marshmallow schema for :class:`commercetools.types.MyOrder`."""

    id = marshmallow.fields.String(allow_none=True)
    version = marshmallow.fields.Integer(allow_none=True)
    created_at = marshmallow.fields.DateTime(allow_none=True, data_key="createdAt")
    last_modified_at = marshmallow.fields.DateTime(
        allow_none=True, data_key="lastModifiedAt"
    )
    last_modified_by = helpers.LazyNestedField(
        nested="commercetools._schemas._common.LastModifiedBySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="lastModifiedBy",
    )
    created_by = helpers.LazyNestedField(
        nested="commercetools._schemas._common.CreatedBySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="createdBy",
    )
    completed_at = marshmallow.fields.DateTime(
        allow_none=True, missing=None, data_key="completedAt"
    )
    order_number = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="orderNumber"
    )
    customer_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="customerId"
    )
    customer_email = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="customerEmail"
    )
    anonymous_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="anonymousId"
    )
    store = helpers.LazyNestedField(
        nested="commercetools._schemas._store.StoreKeyReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.LineItemSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="lineItems",
    )
    custom_line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.CustomLineItemSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="customLineItems",
    )
    total_price = helpers.Discriminator(
        discriminator_field=("type", "type"),
        discriminator_schemas={
            "centPrecision": "commercetools._schemas._common.CentPrecisionMoneySchema",
            "highPrecision": "commercetools._schemas._common.HighPrecisionMoneySchema",
        },
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="totalPrice",
    )
    taxed_price = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.TaxedPriceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="taxedPrice",
    )
    shipping_address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingAddress",
    )
    billing_address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="billingAddress",
    )
    tax_mode = marshmallow_enum.EnumField(
        types.TaxMode, by_value=True, missing=None, data_key="taxMode"
    )
    tax_rounding_mode = marshmallow_enum.EnumField(
        types.RoundingMode, by_value=True, missing=None, data_key="taxRoundingMode"
    )
    customer_group = helpers.LazyNestedField(
        nested="commercetools._schemas._customer_group.CustomerGroupReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="customerGroup",
    )
    country = marshmallow.fields.String(allow_none=True, missing=None)
    order_state = marshmallow_enum.EnumField(
        types.OrderState, by_value=True, data_key="orderState"
    )
    state = helpers.LazyNestedField(
        nested="commercetools._schemas._state.StateReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    shipment_state = marshmallow_enum.EnumField(
        types.ShipmentState, by_value=True, missing=None, data_key="shipmentState"
    )
    payment_state = marshmallow_enum.EnumField(
        types.PaymentState, by_value=True, missing=None, data_key="paymentState"
    )
    shipping_info = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ShippingInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingInfo",
    )
    sync_info = helpers.LazyNestedField(
        nested="commercetools._schemas._order.SyncInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="syncInfo",
    )
    return_info = helpers.LazyNestedField(
        nested="commercetools._schemas._order.ReturnInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="returnInfo",
    )
    discount_codes = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.DiscountCodeInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="discountCodes",
    )
    last_message_sequence_number = marshmallow.fields.Integer(
        allow_none=True, data_key="lastMessageSequenceNumber"
    )
    cart = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.CartReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    payment_info = helpers.LazyNestedField(
        nested="commercetools._schemas._order.PaymentInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="paymentInfo",
    )
    locale = marshmallow.fields.String(allow_none=True, missing=None)
    inventory_mode = marshmallow_enum.EnumField(
        types.InventoryMode, by_value=True, missing=None, data_key="inventoryMode"
    )
    origin = marshmallow_enum.EnumField(types.CartOrigin, by_value=True)
    tax_calculation_mode = marshmallow_enum.EnumField(
        types.TaxCalculationMode,
        by_value=True,
        missing=None,
        data_key="taxCalculationMode",
    )
    shipping_rate_input = helpers.Discriminator(
        discriminator_field=("type", "type"),
        discriminator_schemas={
            "Classification": "commercetools._schemas._cart.ClassificationShippingRateInputSchema",
            "Score": "commercetools._schemas._cart.ScoreShippingRateInputSchema",
        },
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingRateInput",
    )
    item_shipping_addresses = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="itemShippingAddresses",
    )
    refused_gifts = helpers.LazyNestedField(
        nested="commercetools._schemas._cart_discount.CartDiscountReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="refusedGifts",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyOrder(**data)


class MyPaymentDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentDraft`."""

    amount_planned = helpers.LazyNestedField(
        nested="commercetools._schemas._common.MoneySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="amountPlanned",
    )
    payment_method_info = helpers.LazyNestedField(
        nested="commercetools._schemas._payment.PaymentMethodInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="paymentMethodInfo",
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    transaction = helpers.LazyNestedField(
        nested="commercetools._schemas._me.MyTransactionDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyPaymentDraft(**data)


class MyPaymentPagedQueryResponseSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentPagedQueryResponse`."""

    limit = marshmallow.fields.Integer(allow_none=True)
    count = marshmallow.fields.Integer(allow_none=True)
    total = marshmallow.fields.Integer(allow_none=True, missing=None)
    offset = marshmallow.fields.Integer(allow_none=True)
    results = helpers.LazyNestedField(
        nested="commercetools._schemas._me.MyPaymentSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyPaymentPagedQueryResponse(**data)


class MyPaymentSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyPayment`."""

    id = marshmallow.fields.String(allow_none=True)
    version = marshmallow.fields.Integer(allow_none=True)
    customer = helpers.LazyNestedField(
        nested="commercetools._schemas._customer.CustomerReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    anonymous_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="anonymousId"
    )
    amount_planned = helpers.Discriminator(
        discriminator_field=("type", "type"),
        discriminator_schemas={
            "centPrecision": "commercetools._schemas._common.CentPrecisionMoneySchema",
            "highPrecision": "commercetools._schemas._common.HighPrecisionMoneySchema",
        },
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="amountPlanned",
    )
    payment_method_info = helpers.LazyNestedField(
        nested="commercetools._schemas._payment.PaymentMethodInfoSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="paymentMethodInfo",
    )
    transactions = helpers.LazyNestedField(
        nested="commercetools._schemas._payment.TransactionSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyPayment(**data)


class MyPaymentUpdateActionSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentUpdateAction`."""

    action = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentUpdateAction(**data)


class MyPaymentUpdateSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentUpdate`."""

    version = marshmallow.fields.Integer(allow_none=True)
    actions = marshmallow.fields.List(
        helpers.Discriminator(
            discriminator_field=("action", "action"),
            discriminator_schemas={
                "addTransaction": "commercetools._schemas._me.MyPaymentAddTransactionActionSchema",
                "changeAmountPlanned": "commercetools._schemas._me.MyPaymentChangeAmountPlannedActionSchema",
                "setCustomField": "commercetools._schemas._me.MyPaymentSetCustomFieldActionSchema",
                "setMethodInfoInterface": "commercetools._schemas._me.MyPaymentSetMethodInfoInterfaceActionSchema",
                "setMethodInfoMethod": "commercetools._schemas._me.MyPaymentSetMethodInfoMethodActionSchema",
                "setMethodInfoName": "commercetools._schemas._me.MyPaymentSetMethodInfoNameActionSchema",
            },
            unknown=marshmallow.EXCLUDE,
            allow_none=True,
        ),
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyPaymentUpdate(**data)


class MyShoppingListDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListDraft`."""

    name = LocalizedStringField(allow_none=True)
    description = LocalizedStringField(allow_none=True, missing=None)
    line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._shopping_list.ShoppingListLineItemDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="lineItems",
    )
    text_line_items = helpers.LazyNestedField(
        nested="commercetools._schemas._shopping_list.TextLineItemDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        missing=None,
        data_key="textLineItems",
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    delete_days_after_last_modification = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="deleteDaysAfterLastModification"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyShoppingListDraft(**data)


class MyShoppingListUpdateActionSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListUpdateAction`."""

    action = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListUpdateAction(**data)


class MyShoppingListUpdateSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListUpdate`."""

    version = marshmallow.fields.Integer(allow_none=True)
    actions = marshmallow.fields.List(
        helpers.Discriminator(
            discriminator_field=("action", "action"),
            discriminator_schemas={
                "addLineItem": "commercetools._schemas._me.MyShoppingListAddLineItemActionSchema",
                "addTextLineItem": "commercetools._schemas._me.MyShoppingListAddTextLineItemActionSchema",
                "changeLineItemQuantity": "commercetools._schemas._me.MyShoppingListChangeLineItemQuantityActionSchema",
                "changeLineItemsOrder": "commercetools._schemas._me.MyShoppingListChangeLineItemsOrderActionSchema",
                "changeName": "commercetools._schemas._me.MyShoppingListChangeNameActionSchema",
                "changeTextLineItemName": "commercetools._schemas._me.MyShoppingListChangeTextLineItemNameActionSchema",
                "changeTextLineItemQuantity": "commercetools._schemas._me.MyShoppingListChangeTextLineItemQuantityActionSchema",
                "changeTextLineItemsOrder": "commercetools._schemas._me.MyShoppingListChangeTextLineItemsOrderActionSchema",
                "removeLineItem": "commercetools._schemas._me.MyShoppingListRemoveLineItemActionSchema",
                "removeTextLineItem": "commercetools._schemas._me.MyShoppingListRemoveTextLineItemActionSchema",
                "setCustomField": "commercetools._schemas._me.MyShoppingListSetCustomFieldActionSchema",
                "setCustomType": "commercetools._schemas._me.MyShoppingListSetCustomTypeActionSchema",
                "setDeleteDaysAfterLastModification": "commercetools._schemas._me.MyShoppingListSetDeleteDaysAfterLastModificationActionSchema",
                "setDescription": "commercetools._schemas._me.MyShoppingListSetDescriptionActionSchema",
                "setLineItemCustomField": "commercetools._schemas._me.MyShoppingListSetLineItemCustomFieldActionSchema",
                "setLineItemCustomType": "commercetools._schemas._me.MyShoppingListSetLineItemCustomTypeActionSchema",
                "setTextLineItemCustomField": "commercetools._schemas._me.MyShoppingListSetTextLineItemCustomFieldActionSchema",
                "setTextLineItemCustomType": "commercetools._schemas._me.MyShoppingListSetTextLineItemCustomTypeActionSchema",
                "setTextLineItemDescription": "commercetools._schemas._me.MyShoppingListSetTextLineItemDescriptionActionSchema",
            },
            unknown=marshmallow.EXCLUDE,
            allow_none=True,
        ),
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyShoppingListUpdate(**data)


class MyTransactionDraftSchema(marshmallow.Schema):
    """Marshmallow schema for :class:`commercetools.types.MyTransactionDraft`."""

    timestamp = marshmallow.fields.DateTime(allow_none=True, missing=None)
    type = marshmallow_enum.EnumField(types.TransactionType, by_value=True)
    amount = helpers.LazyNestedField(
        nested="commercetools._schemas._common.MoneySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )
    interaction_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="interactionId"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        return types.MyTransactionDraft(**data)


class MyCartAddDiscountCodeActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartAddDiscountCodeAction`."""

    code = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartAddDiscountCodeAction(**data)


class MyCartAddItemShippingAddressActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartAddItemShippingAddressAction`."""

    address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartAddItemShippingAddressAction(**data)


class MyCartAddLineItemActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartAddLineItemAction`."""

    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    distribution_channel = helpers.LazyNestedField(
        nested="commercetools._schemas._channel.ChannelResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="distributionChannel",
    )
    external_tax_rate = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ExternalTaxRateDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalTaxRate",
    )
    product_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="productId"
    )
    variant_id = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="variantId"
    )
    sku = marshmallow.fields.String(allow_none=True, missing=None)
    quantity = marshmallow.fields.Integer(allow_none=True, missing=None)
    supply_channel = helpers.LazyNestedField(
        nested="commercetools._schemas._channel.ChannelResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="supplyChannel",
    )
    external_price = helpers.LazyNestedField(
        nested="commercetools._schemas._common.MoneySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalPrice",
    )
    external_total_price = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ExternalLineItemTotalPriceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalTotalPrice",
    )
    shipping_details = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ItemShippingDetailsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingDetails",
    )
    added_at = marshmallow.fields.DateTime(
        allow_none=True, missing=None, data_key="addedAt"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartAddLineItemAction(**data)


class MyCartAddPaymentActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartAddPaymentAction`."""

    payment = helpers.LazyNestedField(
        nested="commercetools._schemas._payment.PaymentResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartAddPaymentAction(**data)


class MyCartApplyDeltaToLineItemShippingDetailsTargetsActionSchema(
    MyCartUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyCartApplyDeltaToLineItemShippingDetailsTargetsAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    targets_delta = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ItemShippingTargetSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        many=True,
        data_key="targetsDelta",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartApplyDeltaToLineItemShippingDetailsTargetsAction(**data)


class MyCartChangeLineItemQuantityActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartChangeLineItemQuantityAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    quantity = marshmallow.fields.Integer(allow_none=True)
    external_price = helpers.LazyNestedField(
        nested="commercetools._schemas._common.MoneySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalPrice",
    )
    external_total_price = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ExternalLineItemTotalPriceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalTotalPrice",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartChangeLineItemQuantityAction(**data)


class MyCartChangeTaxModeActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartChangeTaxModeAction`."""

    tax_mode = marshmallow_enum.EnumField(
        types.TaxMode, by_value=True, data_key="taxMode"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartChangeTaxModeAction(**data)


class MyCartRecalculateActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartRecalculateAction`."""

    update_product_data = marshmallow.fields.Bool(
        allow_none=True, missing=None, data_key="updateProductData"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartRecalculateAction(**data)


class MyCartRemoveDiscountCodeActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartRemoveDiscountCodeAction`."""

    discount_code = helpers.LazyNestedField(
        nested="commercetools._schemas._discount_code.DiscountCodeReferenceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="discountCode",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartRemoveDiscountCodeAction(**data)


class MyCartRemoveItemShippingAddressActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartRemoveItemShippingAddressAction`."""

    address_key = marshmallow.fields.String(allow_none=True, data_key="addressKey")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartRemoveItemShippingAddressAction(**data)


class MyCartRemoveLineItemActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartRemoveLineItemAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    quantity = marshmallow.fields.Integer(allow_none=True, missing=None)
    external_price = helpers.LazyNestedField(
        nested="commercetools._schemas._common.MoneySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalPrice",
    )
    external_total_price = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ExternalLineItemTotalPriceSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalTotalPrice",
    )
    shipping_details_to_remove = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ItemShippingDetailsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingDetailsToRemove",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartRemoveLineItemAction(**data)


class MyCartRemovePaymentActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartRemovePaymentAction`."""

    payment = helpers.LazyNestedField(
        nested="commercetools._schemas._payment.PaymentResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartRemovePaymentAction(**data)


class MyCartSetBillingAddressActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetBillingAddressAction`."""

    address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetBillingAddressAction(**data)


class MyCartSetCountryActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetCountryAction`."""

    country = marshmallow.fields.String(missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetCountryAction(**data)


class MyCartSetCustomFieldActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetCustomFieldAction`."""

    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetCustomFieldAction(**data)


class MyCartSetCustomShippingMethodActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetCustomShippingMethodAction`."""

    shipping_method_name = marshmallow.fields.String(
        allow_none=True, data_key="shippingMethodName"
    )
    shipping_rate = helpers.LazyNestedField(
        nested="commercetools._schemas._shipping_method.ShippingRateDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        data_key="shippingRate",
    )
    tax_category = helpers.LazyNestedField(
        nested="commercetools._schemas._tax_category.TaxCategoryResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="taxCategory",
    )
    external_tax_rate = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ExternalTaxRateDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalTaxRate",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetCustomShippingMethodAction(**data)


class MyCartSetCustomTypeActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetCustomTypeAction`."""

    type = helpers.LazyNestedField(
        nested="commercetools._schemas._type.TypeResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    fields = FieldContainerField(allow_none=True, missing=None)  # type: ignore

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetCustomTypeAction(**data)


class MyCartSetDeleteDaysAfterLastModificationActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetDeleteDaysAfterLastModificationAction`."""

    delete_days_after_last_modification = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="deleteDaysAfterLastModification"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetDeleteDaysAfterLastModificationAction(**data)


class MyCartSetLineItemCustomFieldActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetLineItemCustomFieldAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetLineItemCustomFieldAction(**data)


class MyCartSetLineItemCustomTypeActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetLineItemCustomTypeAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    type = helpers.LazyNestedField(
        nested="commercetools._schemas._type.TypeResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    fields = FieldContainerField(allow_none=True, missing=None)  # type: ignore

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetLineItemCustomTypeAction(**data)


class MyCartSetLineItemDistributionChannelActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetLineItemDistributionChannelAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    distribution_channel = helpers.LazyNestedField(
        nested="commercetools._schemas._channel.ChannelResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="distributionChannel",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetLineItemDistributionChannelAction(**data)


class MyCartSetLineItemShippingDetailsActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetLineItemShippingDetailsAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    shipping_details = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ItemShippingDetailsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingDetails",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetLineItemShippingDetailsAction(**data)


class MyCartSetLocaleActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetLocaleAction`."""

    locale = marshmallow.fields.String(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetLocaleAction(**data)


class MyCartSetShippingAddressActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetShippingAddressAction`."""

    address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetShippingAddressAction(**data)


class MyCartSetShippingMethodActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartSetShippingMethodAction`."""

    shipping_method = helpers.LazyNestedField(
        nested="commercetools._schemas._shipping_method.ShippingMethodResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="shippingMethod",
    )
    external_tax_rate = helpers.LazyNestedField(
        nested="commercetools._schemas._cart.ExternalTaxRateDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
        data_key="externalTaxRate",
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartSetShippingMethodAction(**data)


class MyCartUpdateItemShippingAddressActionSchema(MyCartUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCartUpdateItemShippingAddressAction`."""

    address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCartUpdateItemShippingAddressAction(**data)


class MyCustomerAddAddressActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerAddAddressAction`."""

    address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerAddAddressAction(**data)


class MyCustomerAddBillingAddressIdActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerAddBillingAddressIdAction`."""

    address_id = marshmallow.fields.String(allow_none=True, data_key="addressId")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerAddBillingAddressIdAction(**data)


class MyCustomerAddShippingAddressIdActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerAddShippingAddressIdAction`."""

    address_id = marshmallow.fields.String(allow_none=True, data_key="addressId")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerAddShippingAddressIdAction(**data)


class MyCustomerChangeAddressActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerChangeAddressAction`."""

    address_id = marshmallow.fields.String(allow_none=True, data_key="addressId")
    address = helpers.LazyNestedField(
        nested="commercetools._schemas._common.AddressSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerChangeAddressAction(**data)


class MyCustomerChangeEmailActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerChangeEmailAction`."""

    email = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerChangeEmailAction(**data)


class MyCustomerRemoveAddressActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerRemoveAddressAction`."""

    address_id = marshmallow.fields.String(allow_none=True, data_key="addressId")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerRemoveAddressAction(**data)


class MyCustomerRemoveBillingAddressIdActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerRemoveBillingAddressIdAction`."""

    address_id = marshmallow.fields.String(allow_none=True, data_key="addressId")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerRemoveBillingAddressIdAction(**data)


class MyCustomerRemoveShippingAddressIdActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerRemoveShippingAddressIdAction`."""

    address_id = marshmallow.fields.String(allow_none=True, data_key="addressId")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerRemoveShippingAddressIdAction(**data)


class MyCustomerSetCompanyNameActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetCompanyNameAction`."""

    company_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="companyName"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetCompanyNameAction(**data)


class MyCustomerSetCustomFieldActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetCustomFieldAction`."""

    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetCustomFieldAction(**data)


class MyCustomerSetCustomTypeActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetCustomTypeAction`."""

    type = helpers.LazyNestedField(
        nested="commercetools._schemas._type.TypeResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    fields = FieldContainerField(allow_none=True, missing=None)  # type: ignore

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetCustomTypeAction(**data)


class MyCustomerSetDateOfBirthActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetDateOfBirthAction`."""

    date_of_birth = marshmallow.fields.Date(
        allow_none=True, missing=None, data_key="dateOfBirth"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetDateOfBirthAction(**data)


class MyCustomerSetDefaultBillingAddressActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetDefaultBillingAddressAction`."""

    address_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="addressId"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetDefaultBillingAddressAction(**data)


class MyCustomerSetDefaultShippingAddressActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetDefaultShippingAddressAction`."""

    address_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="addressId"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetDefaultShippingAddressAction(**data)


class MyCustomerSetFirstNameActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetFirstNameAction`."""

    first_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="firstName"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetFirstNameAction(**data)


class MyCustomerSetLastNameActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetLastNameAction`."""

    last_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="lastName"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetLastNameAction(**data)


class MyCustomerSetLocaleActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetLocaleAction`."""

    locale = marshmallow.fields.String(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetLocaleAction(**data)


class MyCustomerSetMiddleNameActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetMiddleNameAction`."""

    middle_name = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="middleName"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetMiddleNameAction(**data)


class MyCustomerSetSalutationActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetSalutationAction`."""

    salutation = marshmallow.fields.String(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetSalutationAction(**data)


class MyCustomerSetTitleActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetTitleAction`."""

    title = marshmallow.fields.String(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetTitleAction(**data)


class MyCustomerSetVatIdActionSchema(MyCustomerUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyCustomerSetVatIdAction`."""

    vat_id = marshmallow.fields.String(allow_none=True, missing=None, data_key="vatId")

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyCustomerSetVatIdAction(**data)


class MyPaymentAddTransactionActionSchema(MyPaymentUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentAddTransactionAction`."""

    transaction = helpers.LazyNestedField(
        nested="commercetools._schemas._payment.TransactionDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentAddTransactionAction(**data)


class MyPaymentChangeAmountPlannedActionSchema(MyPaymentUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentChangeAmountPlannedAction`."""

    amount = helpers.LazyNestedField(
        nested="commercetools._schemas._common.MoneySchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentChangeAmountPlannedAction(**data)


class MyPaymentSetCustomFieldActionSchema(MyPaymentUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentSetCustomFieldAction`."""

    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentSetCustomFieldAction(**data)


class MyPaymentSetMethodInfoInterfaceActionSchema(MyPaymentUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentSetMethodInfoInterfaceAction`."""

    interface = marshmallow.fields.String(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentSetMethodInfoInterfaceAction(**data)


class MyPaymentSetMethodInfoMethodActionSchema(MyPaymentUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentSetMethodInfoMethodAction`."""

    method = marshmallow.fields.String(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentSetMethodInfoMethodAction(**data)


class MyPaymentSetMethodInfoNameActionSchema(MyPaymentUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyPaymentSetMethodInfoNameAction`."""

    name = LocalizedStringField(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyPaymentSetMethodInfoNameAction(**data)


class MyShoppingListAddLineItemActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListAddLineItemAction`."""

    sku = marshmallow.fields.String(allow_none=True, missing=None)
    product_id = marshmallow.fields.String(
        allow_none=True, missing=None, data_key="productId"
    )
    variant_id = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="variantId"
    )
    quantity = marshmallow.fields.Integer(allow_none=True, missing=None)
    added_at = marshmallow.fields.DateTime(
        allow_none=True, missing=None, data_key="addedAt"
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListAddLineItemAction(**data)


class MyShoppingListAddTextLineItemActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListAddTextLineItemAction`."""

    name = LocalizedStringField(allow_none=True)
    description = LocalizedStringField(allow_none=True, missing=None)
    quantity = marshmallow.fields.Integer(allow_none=True, missing=None)
    added_at = marshmallow.fields.DateTime(
        allow_none=True, missing=None, data_key="addedAt"
    )
    custom = helpers.LazyNestedField(
        nested="commercetools._schemas._type.CustomFieldsDraftSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListAddTextLineItemAction(**data)


class MyShoppingListChangeLineItemQuantityActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListChangeLineItemQuantityAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    quantity = marshmallow.fields.Integer(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListChangeLineItemQuantityAction(**data)


class MyShoppingListChangeLineItemsOrderActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListChangeLineItemsOrderAction`."""

    line_item_order = marshmallow.fields.List(
        marshmallow.fields.String(allow_none=True), data_key="lineItemOrder"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListChangeLineItemsOrderAction(**data)


class MyShoppingListChangeNameActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListChangeNameAction`."""

    name = LocalizedStringField(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListChangeNameAction(**data)


class MyShoppingListChangeTextLineItemNameActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListChangeTextLineItemNameAction`."""

    text_line_item_id = marshmallow.fields.String(
        allow_none=True, data_key="textLineItemId"
    )
    name = LocalizedStringField(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListChangeTextLineItemNameAction(**data)


class MyShoppingListChangeTextLineItemQuantityActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListChangeTextLineItemQuantityAction`."""

    text_line_item_id = marshmallow.fields.String(
        allow_none=True, data_key="textLineItemId"
    )
    quantity = marshmallow.fields.Integer(allow_none=True)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListChangeTextLineItemQuantityAction(**data)


class MyShoppingListChangeTextLineItemsOrderActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListChangeTextLineItemsOrderAction`."""

    text_line_item_order = marshmallow.fields.List(
        marshmallow.fields.String(allow_none=True), data_key="textLineItemOrder"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListChangeTextLineItemsOrderAction(**data)


class MyShoppingListRemoveLineItemActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListRemoveLineItemAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    quantity = marshmallow.fields.Integer(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListRemoveLineItemAction(**data)


class MyShoppingListRemoveTextLineItemActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListRemoveTextLineItemAction`."""

    text_line_item_id = marshmallow.fields.String(
        allow_none=True, data_key="textLineItemId"
    )
    quantity = marshmallow.fields.Integer(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListRemoveTextLineItemAction(**data)


class MyShoppingListSetCustomFieldActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetCustomFieldAction`."""

    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetCustomFieldAction(**data)


class MyShoppingListSetCustomTypeActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetCustomTypeAction`."""

    type = helpers.LazyNestedField(
        nested="commercetools._schemas._type.TypeResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    fields = FieldContainerField(allow_none=True, missing=None)  # type: ignore

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetCustomTypeAction(**data)


class MyShoppingListSetDeleteDaysAfterLastModificationActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetDeleteDaysAfterLastModificationAction`."""

    delete_days_after_last_modification = marshmallow.fields.Integer(
        allow_none=True, missing=None, data_key="deleteDaysAfterLastModification"
    )

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetDeleteDaysAfterLastModificationAction(**data)


class MyShoppingListSetDescriptionActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetDescriptionAction`."""

    description = LocalizedStringField(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetDescriptionAction(**data)


class MyShoppingListSetLineItemCustomFieldActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetLineItemCustomFieldAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetLineItemCustomFieldAction(**data)


class MyShoppingListSetLineItemCustomTypeActionSchema(MyShoppingListUpdateActionSchema):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetLineItemCustomTypeAction`."""

    line_item_id = marshmallow.fields.String(allow_none=True, data_key="lineItemId")
    type = helpers.LazyNestedField(
        nested="commercetools._schemas._type.TypeResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    fields = FieldContainerField(allow_none=True, missing=None)  # type: ignore

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetLineItemCustomTypeAction(**data)


class MyShoppingListSetTextLineItemCustomFieldActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetTextLineItemCustomFieldAction`."""

    text_line_item_id = marshmallow.fields.String(
        allow_none=True, data_key="textLineItemId"
    )
    name = marshmallow.fields.String(allow_none=True)
    value = marshmallow.fields.Raw(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetTextLineItemCustomFieldAction(**data)


class MyShoppingListSetTextLineItemCustomTypeActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetTextLineItemCustomTypeAction`."""

    text_line_item_id = marshmallow.fields.String(
        allow_none=True, data_key="textLineItemId"
    )
    type = helpers.LazyNestedField(
        nested="commercetools._schemas._type.TypeResourceIdentifierSchema",
        unknown=marshmallow.EXCLUDE,
        allow_none=True,
        missing=None,
    )
    fields = FieldContainerField(allow_none=True, missing=None)  # type: ignore

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetTextLineItemCustomTypeAction(**data)


class MyShoppingListSetTextLineItemDescriptionActionSchema(
    MyShoppingListUpdateActionSchema
):
    """Marshmallow schema for :class:`commercetools.types.MyShoppingListSetTextLineItemDescriptionAction`."""

    text_line_item_id = marshmallow.fields.String(
        allow_none=True, data_key="textLineItemId"
    )
    description = LocalizedStringField(allow_none=True, missing=None)

    class Meta:
        unknown = marshmallow.EXCLUDE

    @marshmallow.post_load
    def post_load(self, data, **kwargs):
        del data["action"]
        return types.MyShoppingListSetTextLineItemDescriptionAction(**data)
