{-# 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.NetworkManager.Types.Link
-- 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.NetworkManager.Types.Link where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.NetworkManager.Types.Bandwidth
import Amazonka.NetworkManager.Types.LinkState
import Amazonka.NetworkManager.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes a link.
--
-- /See:/ 'newLink' smart constructor.
data Link = Link'
  { -- | The bandwidth for the link.
    Link -> Maybe Bandwidth
bandwidth :: Prelude.Maybe Bandwidth,
    -- | The date and time that the link was created.
    Link -> Maybe POSIX
createdAt :: Prelude.Maybe Data.POSIX,
    -- | The description of the link.
    Link -> Maybe Text
description :: Prelude.Maybe Prelude.Text,
    -- | The ID of the global network.
    Link -> Maybe Text
globalNetworkId :: Prelude.Maybe Prelude.Text,
    -- | The Amazon Resource Name (ARN) of the link.
    Link -> Maybe Text
linkArn :: Prelude.Maybe Prelude.Text,
    -- | The ID of the link.
    Link -> Maybe Text
linkId :: Prelude.Maybe Prelude.Text,
    -- | The provider of the link.
    Link -> Maybe Text
provider :: Prelude.Maybe Prelude.Text,
    -- | The ID of the site.
    Link -> Maybe Text
siteId :: Prelude.Maybe Prelude.Text,
    -- | The state of the link.
    Link -> Maybe LinkState
state :: Prelude.Maybe LinkState,
    -- | The tags for the link.
    Link -> Maybe [Tag]
tags :: Prelude.Maybe [Tag],
    -- | The type of the link.
    Link -> Maybe Text
type' :: Prelude.Maybe Prelude.Text
  }
  deriving (Link -> Link -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Link -> Link -> Bool
$c/= :: Link -> Link -> Bool
== :: Link -> Link -> Bool
$c== :: Link -> Link -> Bool
Prelude.Eq, ReadPrec [Link]
ReadPrec Link
Int -> ReadS Link
ReadS [Link]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Link]
$creadListPrec :: ReadPrec [Link]
readPrec :: ReadPrec Link
$creadPrec :: ReadPrec Link
readList :: ReadS [Link]
$creadList :: ReadS [Link]
readsPrec :: Int -> ReadS Link
$creadsPrec :: Int -> ReadS Link
Prelude.Read, Int -> Link -> ShowS
[Link] -> ShowS
Link -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Link] -> ShowS
$cshowList :: [Link] -> ShowS
show :: Link -> String
$cshow :: Link -> String
showsPrec :: Int -> Link -> ShowS
$cshowsPrec :: Int -> Link -> ShowS
Prelude.Show, forall x. Rep Link x -> Link
forall x. Link -> Rep Link x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Link x -> Link
$cfrom :: forall x. Link -> Rep Link x
Prelude.Generic)

-- |
-- Create a value of 'Link' 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:
--
-- 'bandwidth', 'link_bandwidth' - The bandwidth for the link.
--
-- 'createdAt', 'link_createdAt' - The date and time that the link was created.
--
-- 'description', 'link_description' - The description of the link.
--
-- 'globalNetworkId', 'link_globalNetworkId' - The ID of the global network.
--
-- 'linkArn', 'link_linkArn' - The Amazon Resource Name (ARN) of the link.
--
-- 'linkId', 'link_linkId' - The ID of the link.
--
-- 'provider', 'link_provider' - The provider of the link.
--
-- 'siteId', 'link_siteId' - The ID of the site.
--
-- 'state', 'link_state' - The state of the link.
--
-- 'tags', 'link_tags' - The tags for the link.
--
-- 'type'', 'link_type' - The type of the link.
newLink ::
  Link
newLink :: Link
newLink =
  Link'
    { $sel:bandwidth:Link' :: Maybe Bandwidth
bandwidth = forall a. Maybe a
Prelude.Nothing,
      $sel:createdAt:Link' :: Maybe POSIX
createdAt = forall a. Maybe a
Prelude.Nothing,
      $sel:description:Link' :: Maybe Text
description = forall a. Maybe a
Prelude.Nothing,
      $sel:globalNetworkId:Link' :: Maybe Text
globalNetworkId = forall a. Maybe a
Prelude.Nothing,
      $sel:linkArn:Link' :: Maybe Text
linkArn = forall a. Maybe a
Prelude.Nothing,
      $sel:linkId:Link' :: Maybe Text
linkId = forall a. Maybe a
Prelude.Nothing,
      $sel:provider:Link' :: Maybe Text
provider = forall a. Maybe a
Prelude.Nothing,
      $sel:siteId:Link' :: Maybe Text
siteId = forall a. Maybe a
Prelude.Nothing,
      $sel:state:Link' :: Maybe LinkState
state = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:Link' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing,
      $sel:type':Link' :: Maybe Text
type' = forall a. Maybe a
Prelude.Nothing
    }

-- | The bandwidth for the link.
link_bandwidth :: Lens.Lens' Link (Prelude.Maybe Bandwidth)
link_bandwidth :: Lens' Link (Maybe Bandwidth)
link_bandwidth = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Bandwidth
bandwidth :: Maybe Bandwidth
$sel:bandwidth:Link' :: Link -> Maybe Bandwidth
bandwidth} -> Maybe Bandwidth
bandwidth) (\s :: Link
s@Link' {} Maybe Bandwidth
a -> Link
s {$sel:bandwidth:Link' :: Maybe Bandwidth
bandwidth = Maybe Bandwidth
a} :: Link)

-- | The date and time that the link was created.
link_createdAt :: Lens.Lens' Link (Prelude.Maybe Prelude.UTCTime)
link_createdAt :: Lens' Link (Maybe UTCTime)
link_createdAt = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe POSIX
createdAt :: Maybe POSIX
$sel:createdAt:Link' :: Link -> Maybe POSIX
createdAt} -> Maybe POSIX
createdAt) (\s :: Link
s@Link' {} Maybe POSIX
a -> Link
s {$sel:createdAt:Link' :: Maybe POSIX
createdAt = Maybe POSIX
a} :: Link) 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 description of the link.
link_description :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_description :: Lens' Link (Maybe Text)
link_description = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
description :: Maybe Text
$sel:description:Link' :: Link -> Maybe Text
description} -> Maybe Text
description) (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:description:Link' :: Maybe Text
description = Maybe Text
a} :: Link)

-- | The ID of the global network.
link_globalNetworkId :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_globalNetworkId :: Lens' Link (Maybe Text)
link_globalNetworkId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
globalNetworkId :: Maybe Text
$sel:globalNetworkId:Link' :: Link -> Maybe Text
globalNetworkId} -> Maybe Text
globalNetworkId) (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:globalNetworkId:Link' :: Maybe Text
globalNetworkId = Maybe Text
a} :: Link)

-- | The Amazon Resource Name (ARN) of the link.
link_linkArn :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_linkArn :: Lens' Link (Maybe Text)
link_linkArn = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
linkArn :: Maybe Text
$sel:linkArn:Link' :: Link -> Maybe Text
linkArn} -> Maybe Text
linkArn) (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:linkArn:Link' :: Maybe Text
linkArn = Maybe Text
a} :: Link)

-- | The ID of the link.
link_linkId :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_linkId :: Lens' Link (Maybe Text)
link_linkId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
linkId :: Maybe Text
$sel:linkId:Link' :: Link -> Maybe Text
linkId} -> Maybe Text
linkId) (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:linkId:Link' :: Maybe Text
linkId = Maybe Text
a} :: Link)

-- | The provider of the link.
link_provider :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_provider :: Lens' Link (Maybe Text)
link_provider = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
provider :: Maybe Text
$sel:provider:Link' :: Link -> Maybe Text
provider} -> Maybe Text
provider) (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:provider:Link' :: Maybe Text
provider = Maybe Text
a} :: Link)

-- | The ID of the site.
link_siteId :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_siteId :: Lens' Link (Maybe Text)
link_siteId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
siteId :: Maybe Text
$sel:siteId:Link' :: Link -> Maybe Text
siteId} -> Maybe Text
siteId) (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:siteId:Link' :: Maybe Text
siteId = Maybe Text
a} :: Link)

-- | The state of the link.
link_state :: Lens.Lens' Link (Prelude.Maybe LinkState)
link_state :: Lens' Link (Maybe LinkState)
link_state = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe LinkState
state :: Maybe LinkState
$sel:state:Link' :: Link -> Maybe LinkState
state} -> Maybe LinkState
state) (\s :: Link
s@Link' {} Maybe LinkState
a -> Link
s {$sel:state:Link' :: Maybe LinkState
state = Maybe LinkState
a} :: Link)

-- | The tags for the link.
link_tags :: Lens.Lens' Link (Prelude.Maybe [Tag])
link_tags :: Lens' Link (Maybe [Tag])
link_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:Link' :: Link -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: Link
s@Link' {} Maybe [Tag]
a -> Link
s {$sel:tags:Link' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: Link) 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

-- | The type of the link.
link_type :: Lens.Lens' Link (Prelude.Maybe Prelude.Text)
link_type :: Lens' Link (Maybe Text)
link_type = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\Link' {Maybe Text
type' :: Maybe Text
$sel:type':Link' :: Link -> Maybe Text
type'} -> Maybe Text
type') (\s :: Link
s@Link' {} Maybe Text
a -> Link
s {$sel:type':Link' :: Maybe Text
type' = Maybe Text
a} :: Link)

instance Data.FromJSON Link where
  parseJSON :: Value -> Parser Link
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"Link"
      ( \Object
x ->
          Maybe Bandwidth
-> Maybe POSIX
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe LinkState
-> Maybe [Tag]
-> Maybe Text
-> Link
Link'
            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
"Bandwidth")
            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
"Description")
            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
"GlobalNetworkId")
            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
"LinkArn")
            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
"LinkId")
            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
"Provider")
            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
"SiteId")
            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
"State")
            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)
            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
"Type")
      )

instance Prelude.Hashable Link where
  hashWithSalt :: Int -> Link -> Int
hashWithSalt Int
_salt Link' {Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe Bandwidth
Maybe LinkState
type' :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe LinkState
siteId :: Maybe Text
provider :: Maybe Text
linkId :: Maybe Text
linkArn :: Maybe Text
globalNetworkId :: Maybe Text
description :: Maybe Text
createdAt :: Maybe POSIX
bandwidth :: Maybe Bandwidth
$sel:type':Link' :: Link -> Maybe Text
$sel:tags:Link' :: Link -> Maybe [Tag]
$sel:state:Link' :: Link -> Maybe LinkState
$sel:siteId:Link' :: Link -> Maybe Text
$sel:provider:Link' :: Link -> Maybe Text
$sel:linkId:Link' :: Link -> Maybe Text
$sel:linkArn:Link' :: Link -> Maybe Text
$sel:globalNetworkId:Link' :: Link -> Maybe Text
$sel:description:Link' :: Link -> Maybe Text
$sel:createdAt:Link' :: Link -> Maybe POSIX
$sel:bandwidth:Link' :: Link -> Maybe Bandwidth
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Bandwidth
bandwidth
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
createdAt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
description
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
globalNetworkId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
linkArn
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
linkId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
provider
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
siteId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe LinkState
state
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
type'

instance Prelude.NFData Link where
  rnf :: Link -> ()
rnf Link' {Maybe [Tag]
Maybe Text
Maybe POSIX
Maybe Bandwidth
Maybe LinkState
type' :: Maybe Text
tags :: Maybe [Tag]
state :: Maybe LinkState
siteId :: Maybe Text
provider :: Maybe Text
linkId :: Maybe Text
linkArn :: Maybe Text
globalNetworkId :: Maybe Text
description :: Maybe Text
createdAt :: Maybe POSIX
bandwidth :: Maybe Bandwidth
$sel:type':Link' :: Link -> Maybe Text
$sel:tags:Link' :: Link -> Maybe [Tag]
$sel:state:Link' :: Link -> Maybe LinkState
$sel:siteId:Link' :: Link -> Maybe Text
$sel:provider:Link' :: Link -> Maybe Text
$sel:linkId:Link' :: Link -> Maybe Text
$sel:linkArn:Link' :: Link -> Maybe Text
$sel:globalNetworkId:Link' :: Link -> Maybe Text
$sel:description:Link' :: Link -> Maybe Text
$sel:createdAt:Link' :: Link -> Maybe POSIX
$sel:bandwidth:Link' :: Link -> Maybe Bandwidth
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Bandwidth
bandwidth
      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
description
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
globalNetworkId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
linkArn
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
linkId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
provider
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
siteId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe LinkState
state
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
type'