{-# 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.Lightsail.Types.KeyPair
-- 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.Lightsail.Types.KeyPair where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Lightsail.Types.ResourceLocation
import Amazonka.Lightsail.Types.ResourceType
import Amazonka.Lightsail.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes an SSH key pair.
--
-- /See:/ 'newKeyPair' smart constructor.
data KeyPair = KeyPair'
  { -- | The Amazon Resource Name (ARN) of the key pair (e.g.,
    -- @arn:aws:lightsail:us-east-2:123456789101:KeyPair\/05859e3d-331d-48ba-9034-12345EXAMPLE@).
    KeyPair -> Maybe Text
arn :: Prelude.Maybe Prelude.Text,
    -- | The timestamp when the key pair was created (e.g., @1479816991.349@).
    KeyPair -> Maybe POSIX
createdAt :: Prelude.Maybe Data.POSIX,
    -- | The RSA fingerprint of the key pair.
    KeyPair -> Maybe Text
fingerprint :: Prelude.Maybe Prelude.Text,
    -- | The region name and Availability Zone where the key pair was created.
    KeyPair -> Maybe ResourceLocation
location :: Prelude.Maybe ResourceLocation,
    -- | The friendly name of the SSH key pair.
    KeyPair -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The resource type (usually @KeyPair@).
    KeyPair -> Maybe ResourceType
resourceType :: Prelude.Maybe ResourceType,
    -- | The support code. Include this code in your email to support when you
    -- have questions about an instance or another resource in Lightsail. This
    -- code enables our support team to look up your Lightsail information more
    -- easily.
    KeyPair -> Maybe Text
supportCode :: Prelude.Maybe Prelude.Text,
    -- | The tag keys and optional values for the resource. For more information
    -- about tags in Lightsail, see the
    -- <https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags Amazon Lightsail Developer Guide>.
    KeyPair -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (KeyPair -> KeyPair -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KeyPair -> KeyPair -> Bool
$c/= :: KeyPair -> KeyPair -> Bool
== :: KeyPair -> KeyPair -> Bool
$c== :: KeyPair -> KeyPair -> Bool
Prelude.Eq, ReadPrec [KeyPair]
ReadPrec KeyPair
Int -> ReadS KeyPair
ReadS [KeyPair]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [KeyPair]
$creadListPrec :: ReadPrec [KeyPair]
readPrec :: ReadPrec KeyPair
$creadPrec :: ReadPrec KeyPair
readList :: ReadS [KeyPair]
$creadList :: ReadS [KeyPair]
readsPrec :: Int -> ReadS KeyPair
$creadsPrec :: Int -> ReadS KeyPair
Prelude.Read, Int -> KeyPair -> ShowS
[KeyPair] -> ShowS
KeyPair -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KeyPair] -> ShowS
$cshowList :: [KeyPair] -> ShowS
show :: KeyPair -> String
$cshow :: KeyPair -> String
showsPrec :: Int -> KeyPair -> ShowS
$cshowsPrec :: Int -> KeyPair -> ShowS
Prelude.Show, forall x. Rep KeyPair x -> KeyPair
forall x. KeyPair -> Rep KeyPair x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep KeyPair x -> KeyPair
$cfrom :: forall x. KeyPair -> Rep KeyPair x
Prelude.Generic)

-- |
-- Create a value of 'KeyPair' 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:
--
-- 'arn', 'keyPair_arn' - The Amazon Resource Name (ARN) of the key pair (e.g.,
-- @arn:aws:lightsail:us-east-2:123456789101:KeyPair\/05859e3d-331d-48ba-9034-12345EXAMPLE@).
--
-- 'createdAt', 'keyPair_createdAt' - The timestamp when the key pair was created (e.g., @1479816991.349@).
--
-- 'fingerprint', 'keyPair_fingerprint' - The RSA fingerprint of the key pair.
--
-- 'location', 'keyPair_location' - The region name and Availability Zone where the key pair was created.
--
-- 'name', 'keyPair_name' - The friendly name of the SSH key pair.
--
-- 'resourceType', 'keyPair_resourceType' - The resource type (usually @KeyPair@).
--
-- 'supportCode', 'keyPair_supportCode' - The support code. Include this code in your email to support when you
-- have questions about an instance or another resource in Lightsail. This
-- code enables our support team to look up your Lightsail information more
-- easily.
--
-- 'tags', 'keyPair_tags' - The tag keys and optional values for the resource. For more information
-- about tags in Lightsail, see the
-- <https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags Amazon Lightsail Developer Guide>.
newKeyPair ::
  KeyPair
newKeyPair :: KeyPair
newKeyPair =
  KeyPair'
    { $sel:arn:KeyPair' :: Maybe Text
arn = forall a. Maybe a
Prelude.Nothing,
      $sel:createdAt:KeyPair' :: Maybe POSIX
createdAt = forall a. Maybe a
Prelude.Nothing,
      $sel:fingerprint:KeyPair' :: Maybe Text
fingerprint = forall a. Maybe a
Prelude.Nothing,
      $sel:location:KeyPair' :: Maybe ResourceLocation
location = forall a. Maybe a
Prelude.Nothing,
      $sel:name:KeyPair' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:resourceType:KeyPair' :: Maybe ResourceType
resourceType = forall a. Maybe a
Prelude.Nothing,
      $sel:supportCode:KeyPair' :: Maybe Text
supportCode = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:KeyPair' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | The Amazon Resource Name (ARN) of the key pair (e.g.,
-- @arn:aws:lightsail:us-east-2:123456789101:KeyPair\/05859e3d-331d-48ba-9034-12345EXAMPLE@).
keyPair_arn :: Lens.Lens' KeyPair (Prelude.Maybe Prelude.Text)
keyPair_arn :: Lens' KeyPair (Maybe Text)
keyPair_arn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe Text
arn :: Maybe Text
$sel:arn:KeyPair' :: KeyPair -> Maybe Text
arn} -> Maybe Text
arn) (\s :: KeyPair
s@KeyPair' {} Maybe Text
a -> KeyPair
s {$sel:arn:KeyPair' :: Maybe Text
arn = Maybe Text
a} :: KeyPair)

-- | The timestamp when the key pair was created (e.g., @1479816991.349@).
keyPair_createdAt :: Lens.Lens' KeyPair (Prelude.Maybe Prelude.UTCTime)
keyPair_createdAt :: Lens' KeyPair (Maybe UTCTime)
keyPair_createdAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe POSIX
createdAt :: Maybe POSIX
$sel:createdAt:KeyPair' :: KeyPair -> Maybe POSIX
createdAt} -> Maybe POSIX
createdAt) (\s :: KeyPair
s@KeyPair' {} Maybe POSIX
a -> KeyPair
s {$sel:createdAt:KeyPair' :: Maybe POSIX
createdAt = Maybe POSIX
a} :: KeyPair) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | The RSA fingerprint of the key pair.
keyPair_fingerprint :: Lens.Lens' KeyPair (Prelude.Maybe Prelude.Text)
keyPair_fingerprint :: Lens' KeyPair (Maybe Text)
keyPair_fingerprint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe Text
fingerprint :: Maybe Text
$sel:fingerprint:KeyPair' :: KeyPair -> Maybe Text
fingerprint} -> Maybe Text
fingerprint) (\s :: KeyPair
s@KeyPair' {} Maybe Text
a -> KeyPair
s {$sel:fingerprint:KeyPair' :: Maybe Text
fingerprint = Maybe Text
a} :: KeyPair)

-- | The region name and Availability Zone where the key pair was created.
keyPair_location :: Lens.Lens' KeyPair (Prelude.Maybe ResourceLocation)
keyPair_location :: Lens' KeyPair (Maybe ResourceLocation)
keyPair_location = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe ResourceLocation
location :: Maybe ResourceLocation
$sel:location:KeyPair' :: KeyPair -> Maybe ResourceLocation
location} -> Maybe ResourceLocation
location) (\s :: KeyPair
s@KeyPair' {} Maybe ResourceLocation
a -> KeyPair
s {$sel:location:KeyPair' :: Maybe ResourceLocation
location = Maybe ResourceLocation
a} :: KeyPair)

-- | The friendly name of the SSH key pair.
keyPair_name :: Lens.Lens' KeyPair (Prelude.Maybe Prelude.Text)
keyPair_name :: Lens' KeyPair (Maybe Text)
keyPair_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe Text
name :: Maybe Text
$sel:name:KeyPair' :: KeyPair -> Maybe Text
name} -> Maybe Text
name) (\s :: KeyPair
s@KeyPair' {} Maybe Text
a -> KeyPair
s {$sel:name:KeyPair' :: Maybe Text
name = Maybe Text
a} :: KeyPair)

-- | The resource type (usually @KeyPair@).
keyPair_resourceType :: Lens.Lens' KeyPair (Prelude.Maybe ResourceType)
keyPair_resourceType :: Lens' KeyPair (Maybe ResourceType)
keyPair_resourceType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe ResourceType
resourceType :: Maybe ResourceType
$sel:resourceType:KeyPair' :: KeyPair -> Maybe ResourceType
resourceType} -> Maybe ResourceType
resourceType) (\s :: KeyPair
s@KeyPair' {} Maybe ResourceType
a -> KeyPair
s {$sel:resourceType:KeyPair' :: Maybe ResourceType
resourceType = Maybe ResourceType
a} :: KeyPair)

-- | The support code. Include this code in your email to support when you
-- have questions about an instance or another resource in Lightsail. This
-- code enables our support team to look up your Lightsail information more
-- easily.
keyPair_supportCode :: Lens.Lens' KeyPair (Prelude.Maybe Prelude.Text)
keyPair_supportCode :: Lens' KeyPair (Maybe Text)
keyPair_supportCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe Text
supportCode :: Maybe Text
$sel:supportCode:KeyPair' :: KeyPair -> Maybe Text
supportCode} -> Maybe Text
supportCode) (\s :: KeyPair
s@KeyPair' {} Maybe Text
a -> KeyPair
s {$sel:supportCode:KeyPair' :: Maybe Text
supportCode = Maybe Text
a} :: KeyPair)

-- | The tag keys and optional values for the resource. For more information
-- about tags in Lightsail, see the
-- <https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-tags Amazon Lightsail Developer Guide>.
keyPair_tags :: Lens.Lens' KeyPair (Prelude.Maybe [Tag])
keyPair_tags :: Lens' KeyPair (Maybe [Tag])
keyPair_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPair' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:KeyPair' :: KeyPair -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: KeyPair
s@KeyPair' {} Maybe [Tag]
a -> KeyPair
s {$sel:tags:KeyPair' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: KeyPair) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromJSON KeyPair where
  parseJSON :: Value -> Parser KeyPair
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"KeyPair"
      ( \Object
x ->
          Maybe Text
-> Maybe POSIX
-> Maybe Text
-> Maybe ResourceLocation
-> Maybe Text
-> Maybe ResourceType
-> Maybe Text
-> Maybe [Tag]
-> KeyPair
KeyPair'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"arn")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"createdAt")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"fingerprint")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"location")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"name")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"resourceType")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"supportCode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
Data..:? Key
"tags" forall a. Parser (Maybe a) -> a -> Parser a
Data..!= forall a. Monoid a => a
Prelude.mempty)
      )

instance Prelude.Hashable KeyPair where
  hashWithSalt :: Int -> KeyPair -> Int
hashWithSalt Int
_salt KeyPair' {Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe ResourceLocation
Maybe ResourceType
tags :: Maybe [Tag]
supportCode :: Maybe Text
resourceType :: Maybe ResourceType
name :: Maybe Text
location :: Maybe ResourceLocation
fingerprint :: Maybe Text
createdAt :: Maybe POSIX
arn :: Maybe Text
$sel:tags:KeyPair' :: KeyPair -> Maybe [Tag]
$sel:supportCode:KeyPair' :: KeyPair -> Maybe Text
$sel:resourceType:KeyPair' :: KeyPair -> Maybe ResourceType
$sel:name:KeyPair' :: KeyPair -> Maybe Text
$sel:location:KeyPair' :: KeyPair -> Maybe ResourceLocation
$sel:fingerprint:KeyPair' :: KeyPair -> Maybe Text
$sel:createdAt:KeyPair' :: KeyPair -> Maybe POSIX
$sel:arn:KeyPair' :: KeyPair -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
arn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
createdAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
fingerprint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceLocation
location
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ResourceType
resourceType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
supportCode
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData KeyPair where
  rnf :: KeyPair -> ()
rnf KeyPair' {Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe ResourceLocation
Maybe ResourceType
tags :: Maybe [Tag]
supportCode :: Maybe Text
resourceType :: Maybe ResourceType
name :: Maybe Text
location :: Maybe ResourceLocation
fingerprint :: Maybe Text
createdAt :: Maybe POSIX
arn :: Maybe Text
$sel:tags:KeyPair' :: KeyPair -> Maybe [Tag]
$sel:supportCode:KeyPair' :: KeyPair -> Maybe Text
$sel:resourceType:KeyPair' :: KeyPair -> Maybe ResourceType
$sel:name:KeyPair' :: KeyPair -> Maybe Text
$sel:location:KeyPair' :: KeyPair -> Maybe ResourceLocation
$sel:fingerprint:KeyPair' :: KeyPair -> Maybe Text
$sel:createdAt:KeyPair' :: KeyPair -> Maybe POSIX
$sel:arn:KeyPair' :: KeyPair -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
arn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
createdAt
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
fingerprint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceLocation
location
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
name
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ResourceType
resourceType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
supportCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags