packages feed

amazonka-outposts-2.0: gen/Amazonka/Outposts/Types/Site.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.Outposts.Types.Site
-- 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.Outposts.Types.Site where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Outposts.Types.RackPhysicalProperties
import qualified Amazonka.Prelude as Prelude

-- | Information about a site.
--
-- /See:/ 'newSite' smart constructor.
data Site = Site'
  { accountId :: Prelude.Maybe Prelude.Text,
    description :: Prelude.Maybe Prelude.Text,
    name :: Prelude.Maybe Prelude.Text,
    -- | Notes about a site.
    notes :: Prelude.Maybe Prelude.Text,
    -- | City where the hardware is installed and powered on.
    operatingAddressCity :: Prelude.Maybe Prelude.Text,
    -- | The ISO-3166 two-letter country code where the hardware is installed and
    -- powered on.
    operatingAddressCountryCode :: Prelude.Maybe Prelude.Text,
    -- | State or region where the hardware is installed and powered on.
    operatingAddressStateOrRegion :: Prelude.Maybe Prelude.Text,
    -- | Information about the physical and logistical details for a rack at the
    -- site.
    rackPhysicalProperties :: Prelude.Maybe RackPhysicalProperties,
    siteArn :: Prelude.Maybe Prelude.Text,
    siteId :: Prelude.Maybe Prelude.Text,
    -- | The site tags.
    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'Site' 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:
--
-- 'accountId', 'site_accountId' - Undocumented member.
--
-- 'description', 'site_description' - Undocumented member.
--
-- 'name', 'site_name' - Undocumented member.
--
-- 'notes', 'site_notes' - Notes about a site.
--
-- 'operatingAddressCity', 'site_operatingAddressCity' - City where the hardware is installed and powered on.
--
-- 'operatingAddressCountryCode', 'site_operatingAddressCountryCode' - The ISO-3166 two-letter country code where the hardware is installed and
-- powered on.
--
-- 'operatingAddressStateOrRegion', 'site_operatingAddressStateOrRegion' - State or region where the hardware is installed and powered on.
--
-- 'rackPhysicalProperties', 'site_rackPhysicalProperties' - Information about the physical and logistical details for a rack at the
-- site.
--
-- 'siteArn', 'site_siteArn' - Undocumented member.
--
-- 'siteId', 'site_siteId' - Undocumented member.
--
-- 'tags', 'site_tags' - The site tags.
newSite ::
  Site
newSite =
  Site'
    { accountId = Prelude.Nothing,
      description = Prelude.Nothing,
      name = Prelude.Nothing,
      notes = Prelude.Nothing,
      operatingAddressCity = Prelude.Nothing,
      operatingAddressCountryCode = Prelude.Nothing,
      operatingAddressStateOrRegion = Prelude.Nothing,
      rackPhysicalProperties = Prelude.Nothing,
      siteArn = Prelude.Nothing,
      siteId = Prelude.Nothing,
      tags = Prelude.Nothing
    }

-- | Undocumented member.
site_accountId :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_accountId = Lens.lens (\Site' {accountId} -> accountId) (\s@Site' {} a -> s {accountId = a} :: Site)

-- | Undocumented member.
site_description :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_description = Lens.lens (\Site' {description} -> description) (\s@Site' {} a -> s {description = a} :: Site)

-- | Undocumented member.
site_name :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_name = Lens.lens (\Site' {name} -> name) (\s@Site' {} a -> s {name = a} :: Site)

-- | Notes about a site.
site_notes :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_notes = Lens.lens (\Site' {notes} -> notes) (\s@Site' {} a -> s {notes = a} :: Site)

-- | City where the hardware is installed and powered on.
site_operatingAddressCity :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_operatingAddressCity = Lens.lens (\Site' {operatingAddressCity} -> operatingAddressCity) (\s@Site' {} a -> s {operatingAddressCity = a} :: Site)

-- | The ISO-3166 two-letter country code where the hardware is installed and
-- powered on.
site_operatingAddressCountryCode :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_operatingAddressCountryCode = Lens.lens (\Site' {operatingAddressCountryCode} -> operatingAddressCountryCode) (\s@Site' {} a -> s {operatingAddressCountryCode = a} :: Site)

-- | State or region where the hardware is installed and powered on.
site_operatingAddressStateOrRegion :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_operatingAddressStateOrRegion = Lens.lens (\Site' {operatingAddressStateOrRegion} -> operatingAddressStateOrRegion) (\s@Site' {} a -> s {operatingAddressStateOrRegion = a} :: Site)

-- | Information about the physical and logistical details for a rack at the
-- site.
site_rackPhysicalProperties :: Lens.Lens' Site (Prelude.Maybe RackPhysicalProperties)
site_rackPhysicalProperties = Lens.lens (\Site' {rackPhysicalProperties} -> rackPhysicalProperties) (\s@Site' {} a -> s {rackPhysicalProperties = a} :: Site)

-- | Undocumented member.
site_siteArn :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_siteArn = Lens.lens (\Site' {siteArn} -> siteArn) (\s@Site' {} a -> s {siteArn = a} :: Site)

-- | Undocumented member.
site_siteId :: Lens.Lens' Site (Prelude.Maybe Prelude.Text)
site_siteId = Lens.lens (\Site' {siteId} -> siteId) (\s@Site' {} a -> s {siteId = a} :: Site)

-- | The site tags.
site_tags :: Lens.Lens' Site (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
site_tags = Lens.lens (\Site' {tags} -> tags) (\s@Site' {} a -> s {tags = a} :: Site) Prelude.. Lens.mapping Lens.coerced

instance Data.FromJSON Site where
  parseJSON =
    Data.withObject
      "Site"
      ( \x ->
          Site'
            Prelude.<$> (x Data..:? "AccountId")
            Prelude.<*> (x Data..:? "Description")
            Prelude.<*> (x Data..:? "Name")
            Prelude.<*> (x Data..:? "Notes")
            Prelude.<*> (x Data..:? "OperatingAddressCity")
            Prelude.<*> (x Data..:? "OperatingAddressCountryCode")
            Prelude.<*> (x Data..:? "OperatingAddressStateOrRegion")
            Prelude.<*> (x Data..:? "RackPhysicalProperties")
            Prelude.<*> (x Data..:? "SiteArn")
            Prelude.<*> (x Data..:? "SiteId")
            Prelude.<*> (x Data..:? "Tags" Data..!= Prelude.mempty)
      )

instance Prelude.Hashable Site where
  hashWithSalt _salt Site' {..} =
    _salt
      `Prelude.hashWithSalt` accountId
      `Prelude.hashWithSalt` description
      `Prelude.hashWithSalt` name
      `Prelude.hashWithSalt` notes
      `Prelude.hashWithSalt` operatingAddressCity
      `Prelude.hashWithSalt` operatingAddressCountryCode
      `Prelude.hashWithSalt` operatingAddressStateOrRegion
      `Prelude.hashWithSalt` rackPhysicalProperties
      `Prelude.hashWithSalt` siteArn
      `Prelude.hashWithSalt` siteId
      `Prelude.hashWithSalt` tags

instance Prelude.NFData Site where
  rnf Site' {..} =
    Prelude.rnf accountId
      `Prelude.seq` Prelude.rnf description
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf notes
      `Prelude.seq` Prelude.rnf operatingAddressCity
      `Prelude.seq` Prelude.rnf operatingAddressCountryCode
      `Prelude.seq` Prelude.rnf operatingAddressStateOrRegion
      `Prelude.seq` Prelude.rnf rackPhysicalProperties
      `Prelude.seq` Prelude.rnf siteArn
      `Prelude.seq` Prelude.rnf siteId
      `Prelude.seq` Prelude.rnf tags