packages feed

amazonka-snowball-2.0: gen/Amazonka/Snowball/Types/Address.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.Snowball.Types.Address
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Snowball.Types.Address where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude

-- | The address that you want the Snow device(s) associated with a specific
-- job to be shipped to. Addresses are validated at the time of creation.
-- The address you provide must be located within the serviceable area of
-- your region. Although no individual elements of the @Address@ are
-- required, if the address is invalid or unsupported, then an exception is
-- thrown.
--
-- /See:/ 'newAddress' smart constructor.
data Address = Address'
  { -- | The unique ID for an address.
    addressId :: Prelude.Maybe Prelude.Text,
    -- | The city in an address that a Snow device is to be delivered to.
    city :: Prelude.Maybe Prelude.Text,
    -- | The name of the company to receive a Snow device at an address.
    company :: Prelude.Maybe Prelude.Text,
    -- | The country in an address that a Snow device is to be delivered to.
    country :: Prelude.Maybe Prelude.Text,
    -- | If the address you are creating is a primary address, then set this
    -- option to true. This field is not supported in most regions.
    isRestricted :: Prelude.Maybe Prelude.Bool,
    -- | This field is no longer used and the value is ignored.
    landmark :: Prelude.Maybe Prelude.Text,
    -- | The name of a person to receive a Snow device at an address.
    name :: Prelude.Maybe Prelude.Text,
    -- | The phone number associated with an address that a Snow device is to be
    -- delivered to.
    phoneNumber :: Prelude.Maybe Prelude.Text,
    -- | The postal code in an address that a Snow device is to be delivered to.
    postalCode :: Prelude.Maybe Prelude.Text,
    -- | This field is no longer used and the value is ignored.
    prefectureOrDistrict :: Prelude.Maybe Prelude.Text,
    -- | The state or province in an address that a Snow device is to be
    -- delivered to.
    stateOrProvince :: Prelude.Maybe Prelude.Text,
    -- | The first line in a street address that a Snow device is to be delivered
    -- to.
    street1 :: Prelude.Maybe Prelude.Text,
    -- | The second line in a street address that a Snow device is to be
    -- delivered to.
    street2 :: Prelude.Maybe Prelude.Text,
    -- | The third line in a street address that a Snow device is to be delivered
    -- to.
    street3 :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Address' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'addressId', 'address_addressId' - The unique ID for an address.
--
-- 'city', 'address_city' - The city in an address that a Snow device is to be delivered to.
--
-- 'company', 'address_company' - The name of the company to receive a Snow device at an address.
--
-- 'country', 'address_country' - The country in an address that a Snow device is to be delivered to.
--
-- 'isRestricted', 'address_isRestricted' - If the address you are creating is a primary address, then set this
-- option to true. This field is not supported in most regions.
--
-- 'landmark', 'address_landmark' - This field is no longer used and the value is ignored.
--
-- 'name', 'address_name' - The name of a person to receive a Snow device at an address.
--
-- 'phoneNumber', 'address_phoneNumber' - The phone number associated with an address that a Snow device is to be
-- delivered to.
--
-- 'postalCode', 'address_postalCode' - The postal code in an address that a Snow device is to be delivered to.
--
-- 'prefectureOrDistrict', 'address_prefectureOrDistrict' - This field is no longer used and the value is ignored.
--
-- 'stateOrProvince', 'address_stateOrProvince' - The state or province in an address that a Snow device is to be
-- delivered to.
--
-- 'street1', 'address_street1' - The first line in a street address that a Snow device is to be delivered
-- to.
--
-- 'street2', 'address_street2' - The second line in a street address that a Snow device is to be
-- delivered to.
--
-- 'street3', 'address_street3' - The third line in a street address that a Snow device is to be delivered
-- to.
newAddress ::
  Address
newAddress =
  Address'
    { addressId = Prelude.Nothing,
      city = Prelude.Nothing,
      company = Prelude.Nothing,
      country = Prelude.Nothing,
      isRestricted = Prelude.Nothing,
      landmark = Prelude.Nothing,
      name = Prelude.Nothing,
      phoneNumber = Prelude.Nothing,
      postalCode = Prelude.Nothing,
      prefectureOrDistrict = Prelude.Nothing,
      stateOrProvince = Prelude.Nothing,
      street1 = Prelude.Nothing,
      street2 = Prelude.Nothing,
      street3 = Prelude.Nothing
    }

-- | The unique ID for an address.
address_addressId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_addressId = Lens.lens (\Address' {addressId} -> addressId) (\s@Address' {} a -> s {addressId = a} :: Address)

-- | The city in an address that a Snow device is to be delivered to.
address_city :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_city = Lens.lens (\Address' {city} -> city) (\s@Address' {} a -> s {city = a} :: Address)

-- | The name of the company to receive a Snow device at an address.
address_company :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_company = Lens.lens (\Address' {company} -> company) (\s@Address' {} a -> s {company = a} :: Address)

-- | The country in an address that a Snow device is to be delivered to.
address_country :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_country = Lens.lens (\Address' {country} -> country) (\s@Address' {} a -> s {country = a} :: Address)

-- | If the address you are creating is a primary address, then set this
-- option to true. This field is not supported in most regions.
address_isRestricted :: Lens.Lens' Address (Prelude.Maybe Prelude.Bool)
address_isRestricted = Lens.lens (\Address' {isRestricted} -> isRestricted) (\s@Address' {} a -> s {isRestricted = a} :: Address)

-- | This field is no longer used and the value is ignored.
address_landmark :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_landmark = Lens.lens (\Address' {landmark} -> landmark) (\s@Address' {} a -> s {landmark = a} :: Address)

-- | The name of a person to receive a Snow device at an address.
address_name :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_name = Lens.lens (\Address' {name} -> name) (\s@Address' {} a -> s {name = a} :: Address)

-- | The phone number associated with an address that a Snow device is to be
-- delivered to.
address_phoneNumber :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_phoneNumber = Lens.lens (\Address' {phoneNumber} -> phoneNumber) (\s@Address' {} a -> s {phoneNumber = a} :: Address)

-- | The postal code in an address that a Snow device is to be delivered to.
address_postalCode :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_postalCode = Lens.lens (\Address' {postalCode} -> postalCode) (\s@Address' {} a -> s {postalCode = a} :: Address)

-- | This field is no longer used and the value is ignored.
address_prefectureOrDistrict :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_prefectureOrDistrict = Lens.lens (\Address' {prefectureOrDistrict} -> prefectureOrDistrict) (\s@Address' {} a -> s {prefectureOrDistrict = a} :: Address)

-- | The state or province in an address that a Snow device is to be
-- delivered to.
address_stateOrProvince :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_stateOrProvince = Lens.lens (\Address' {stateOrProvince} -> stateOrProvince) (\s@Address' {} a -> s {stateOrProvince = a} :: Address)

-- | The first line in a street address that a Snow device is to be delivered
-- to.
address_street1 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_street1 = Lens.lens (\Address' {street1} -> street1) (\s@Address' {} a -> s {street1 = a} :: Address)

-- | The second line in a street address that a Snow device is to be
-- delivered to.
address_street2 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_street2 = Lens.lens (\Address' {street2} -> street2) (\s@Address' {} a -> s {street2 = a} :: Address)

-- | The third line in a street address that a Snow device is to be delivered
-- to.
address_street3 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
address_street3 = Lens.lens (\Address' {street3} -> street3) (\s@Address' {} a -> s {street3 = a} :: Address)

instance Data.FromJSON Address where
  parseJSON =
    Data.withObject
      "Address"
      ( \x ->
          Address'
            Prelude.<$> (x Data..:? "AddressId")
            Prelude.<*> (x Data..:? "City")
            Prelude.<*> (x Data..:? "Company")
            Prelude.<*> (x Data..:? "Country")
            Prelude.<*> (x Data..:? "IsRestricted")
            Prelude.<*> (x Data..:? "Landmark")
            Prelude.<*> (x Data..:? "Name")
            Prelude.<*> (x Data..:? "PhoneNumber")
            Prelude.<*> (x Data..:? "PostalCode")
            Prelude.<*> (x Data..:? "PrefectureOrDistrict")
            Prelude.<*> (x Data..:? "StateOrProvince")
            Prelude.<*> (x Data..:? "Street1")
            Prelude.<*> (x Data..:? "Street2")
            Prelude.<*> (x Data..:? "Street3")
      )

instance Prelude.Hashable Address where
  hashWithSalt _salt Address' {..} =
    _salt
      `Prelude.hashWithSalt` addressId
      `Prelude.hashWithSalt` city
      `Prelude.hashWithSalt` company
      `Prelude.hashWithSalt` country
      `Prelude.hashWithSalt` isRestricted
      `Prelude.hashWithSalt` landmark
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` phoneNumber
      `Prelude.hashWithSalt` postalCode
      `Prelude.hashWithSalt` prefectureOrDistrict
      `Prelude.hashWithSalt` stateOrProvince
      `Prelude.hashWithSalt` street1
      `Prelude.hashWithSalt` street2
      `Prelude.hashWithSalt` street3

instance Prelude.NFData Address where
  rnf Address' {..} =
    Prelude.rnf addressId
      `Prelude.seq` Prelude.rnf city
      `Prelude.seq` Prelude.rnf company
      `Prelude.seq` Prelude.rnf country
      `Prelude.seq` Prelude.rnf isRestricted
      `Prelude.seq` Prelude.rnf landmark
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf phoneNumber
      `Prelude.seq` Prelude.rnf postalCode
      `Prelude.seq` Prelude.rnf prefectureOrDistrict
      `Prelude.seq` Prelude.rnf stateOrProvince
      `Prelude.seq` Prelude.rnf street1
      `Prelude.seq` Prelude.rnf street2
      `Prelude.seq` Prelude.rnf street3

instance Data.ToJSON Address where
  toJSON Address' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("AddressId" Data..=) Prelude.<$> addressId,
            ("City" Data..=) Prelude.<$> city,
            ("Company" Data..=) Prelude.<$> company,
            ("Country" Data..=) Prelude.<$> country,
            ("IsRestricted" Data..=) Prelude.<$> isRestricted,
            ("Landmark" Data..=) Prelude.<$> landmark,
            ("Name" Data..=) Prelude.<$> name,
            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
            ("PostalCode" Data..=) Prelude.<$> postalCode,
            ("PrefectureOrDistrict" Data..=)
              Prelude.<$> prefectureOrDistrict,
            ("StateOrProvince" Data..=)
              Prelude.<$> stateOrProvince,
            ("Street1" Data..=) Prelude.<$> street1,
            ("Street2" Data..=) Prelude.<$> street2,
            ("Street3" Data..=) Prelude.<$> street3
          ]
      )