packages feed

amazonka-migrationhubstrategy-2.0: gen/Amazonka/MigrationHubStrategy/Types/SystemInfo.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.MigrationHubStrategy.Types.SystemInfo
-- 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.MigrationHubStrategy.Types.SystemInfo where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.MigrationHubStrategy.Types.NetworkInfo
import Amazonka.MigrationHubStrategy.Types.OSInfo
import qualified Amazonka.Prelude as Prelude

-- | Information about the server that hosts application components.
--
-- /See:/ 'newSystemInfo' smart constructor.
data SystemInfo = SystemInfo'
  { -- | CPU architecture type for the server.
    cpuArchitecture :: Prelude.Maybe Prelude.Text,
    -- | File system type for the server.
    fileSystemType :: Prelude.Maybe Prelude.Text,
    -- | Networking information related to a server.
    networkInfoList :: Prelude.Maybe [NetworkInfo],
    -- | Operating system corresponding to a server.
    osInfo :: Prelude.Maybe OSInfo
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'SystemInfo' 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:
--
-- 'cpuArchitecture', 'systemInfo_cpuArchitecture' - CPU architecture type for the server.
--
-- 'fileSystemType', 'systemInfo_fileSystemType' - File system type for the server.
--
-- 'networkInfoList', 'systemInfo_networkInfoList' - Networking information related to a server.
--
-- 'osInfo', 'systemInfo_osInfo' - Operating system corresponding to a server.
newSystemInfo ::
  SystemInfo
newSystemInfo =
  SystemInfo'
    { cpuArchitecture = Prelude.Nothing,
      fileSystemType = Prelude.Nothing,
      networkInfoList = Prelude.Nothing,
      osInfo = Prelude.Nothing
    }

-- | CPU architecture type for the server.
systemInfo_cpuArchitecture :: Lens.Lens' SystemInfo (Prelude.Maybe Prelude.Text)
systemInfo_cpuArchitecture = Lens.lens (\SystemInfo' {cpuArchitecture} -> cpuArchitecture) (\s@SystemInfo' {} a -> s {cpuArchitecture = a} :: SystemInfo)

-- | File system type for the server.
systemInfo_fileSystemType :: Lens.Lens' SystemInfo (Prelude.Maybe Prelude.Text)
systemInfo_fileSystemType = Lens.lens (\SystemInfo' {fileSystemType} -> fileSystemType) (\s@SystemInfo' {} a -> s {fileSystemType = a} :: SystemInfo)

-- | Networking information related to a server.
systemInfo_networkInfoList :: Lens.Lens' SystemInfo (Prelude.Maybe [NetworkInfo])
systemInfo_networkInfoList = Lens.lens (\SystemInfo' {networkInfoList} -> networkInfoList) (\s@SystemInfo' {} a -> s {networkInfoList = a} :: SystemInfo) Prelude.. Lens.mapping Lens.coerced

-- | Operating system corresponding to a server.
systemInfo_osInfo :: Lens.Lens' SystemInfo (Prelude.Maybe OSInfo)
systemInfo_osInfo = Lens.lens (\SystemInfo' {osInfo} -> osInfo) (\s@SystemInfo' {} a -> s {osInfo = a} :: SystemInfo)

instance Data.FromJSON SystemInfo where
  parseJSON =
    Data.withObject
      "SystemInfo"
      ( \x ->
          SystemInfo'
            Prelude.<$> (x Data..:? "cpuArchitecture")
            Prelude.<*> (x Data..:? "fileSystemType")
            Prelude.<*> ( x
                            Data..:? "networkInfoList"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "osInfo")
      )

instance Prelude.Hashable SystemInfo where
  hashWithSalt _salt SystemInfo' {..} =
    _salt
      `Prelude.hashWithSalt` cpuArchitecture
      `Prelude.hashWithSalt` fileSystemType
      `Prelude.hashWithSalt` networkInfoList
      `Prelude.hashWithSalt` osInfo

instance Prelude.NFData SystemInfo where
  rnf SystemInfo' {..} =
    Prelude.rnf cpuArchitecture
      `Prelude.seq` Prelude.rnf fileSystemType
      `Prelude.seq` Prelude.rnf networkInfoList
      `Prelude.seq` Prelude.rnf osInfo