{-# 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.Transfer.Types.DescribedServer
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.Transfer.Types.DescribedServer where

import qualified Amazonka.Core as Core
import qualified Amazonka.Lens as Lens
import qualified Amazonka.Prelude as Prelude
import Amazonka.Transfer.Types.Domain
import Amazonka.Transfer.Types.EndpointDetails
import Amazonka.Transfer.Types.EndpointType
import Amazonka.Transfer.Types.IdentityProviderDetails
import Amazonka.Transfer.Types.IdentityProviderType
import Amazonka.Transfer.Types.Protocol
import Amazonka.Transfer.Types.ProtocolDetails
import Amazonka.Transfer.Types.State
import Amazonka.Transfer.Types.Tag
import Amazonka.Transfer.Types.WorkflowDetails

-- | Describes the properties of a file transfer protocol-enabled server that
-- was specified.
--
-- /See:/ 'newDescribedServer' smart constructor.
data DescribedServer = DescribedServer'
  { -- | The protocol settings that are configured for your server.
    --
    -- Use the @PassiveIp@ parameter to indicate passive mode. Enter a single
    -- dotted-quad IPv4 address, such as the external IP address of a firewall,
    -- router, or load balancer.
    DescribedServer -> Maybe ProtocolDetails
protocolDetails :: Prelude.Maybe ProtocolDetails,
    -- | Specifies the Amazon Resource Name (ARN) of the Amazon Web Services
    -- Identity and Access Management (IAM) role that allows a server to turn
    -- on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When
    -- set, user activity can be viewed in your CloudWatch logs.
    DescribedServer -> Maybe Text
loggingRole :: Prelude.Maybe Prelude.Text,
    -- | Specifies the condition of a server for the server that was described. A
    -- value of @ONLINE@ indicates that the server can accept jobs and transfer
    -- files. A @State@ value of @OFFLINE@ means that the server cannot perform
    -- file transfer operations.
    --
    -- The states of @STARTING@ and @STOPPING@ indicate that the server is in
    -- an intermediate state, either not fully able to respond, or not fully
    -- offline. The values of @START_FAILED@ or @STOP_FAILED@ can indicate an
    -- error condition.
    DescribedServer -> Maybe State
state :: Prelude.Maybe State,
    -- | Specifies the mode of authentication for a server. The default value is
    -- @SERVICE_MANAGED@, which allows you to store and access user credentials
    -- within the Amazon Web Services Transfer Family service.
    --
    -- Use @AWS_DIRECTORY_SERVICE@ to provide access to Active Directory groups
    -- in Amazon Web Services Managed Active Directory or Microsoft Active
    -- Directory in your on-premises environment or in Amazon Web Services
    -- using AD Connectors. This option also requires you to provide a
    -- Directory ID using the @IdentityProviderDetails@ parameter.
    --
    -- Use the @API_GATEWAY@ value to integrate with an identity provider of
    -- your choosing. The @API_GATEWAY@ setting requires you to provide an API
    -- Gateway endpoint URL to call for authentication using the
    -- @IdentityProviderDetails@ parameter.
    DescribedServer -> Maybe IdentityProviderType
identityProviderType :: Prelude.Maybe IdentityProviderType,
    -- | Specifies the file transfer protocol or protocols over which your file
    -- transfer protocol client can connect to your server\'s endpoint. The
    -- available protocols are:
    --
    -- -   @SFTP@ (Secure Shell (SSH) File Transfer Protocol): File transfer
    --     over SSH
    --
    -- -   @FTPS@ (File Transfer Protocol Secure): File transfer with TLS
    --     encryption
    --
    -- -   @FTP@ (File Transfer Protocol): Unencrypted file transfer
    DescribedServer -> Maybe (NonEmpty Protocol)
protocols :: Prelude.Maybe (Prelude.NonEmpty Protocol),
    -- | Specifies the unique system-assigned identifier for a server that you
    -- instantiate.
    DescribedServer -> Maybe Text
serverId :: Prelude.Maybe Prelude.Text,
    -- | Specifies the domain of the storage system that is used for file
    -- transfers.
    DescribedServer -> Maybe Domain
domain :: Prelude.Maybe Domain,
    -- | Defines the type of endpoint that your server is connected to. If your
    -- server is connected to a VPC endpoint, your server isn\'t accessible
    -- over the public internet.
    DescribedServer -> Maybe EndpointType
endpointType :: Prelude.Maybe EndpointType,
    -- | Specifies the name of the security policy that is attached to the
    -- server.
    DescribedServer -> Maybe Text
securityPolicyName :: Prelude.Maybe Prelude.Text,
    -- | Specifies the Base64-encoded SHA256 fingerprint of the server\'s host
    -- key. This value is equivalent to the output of the
    -- @ssh-keygen -l -f my-new-server-key@ command.
    DescribedServer -> Maybe Text
hostKeyFingerprint :: Prelude.Maybe Prelude.Text,
    -- | Specifies the number of users that are assigned to a server you
    -- specified with the @ServerId@.
    DescribedServer -> Maybe Int
userCount :: Prelude.Maybe Prelude.Int,
    -- | Specifies the ARN of the Amazon Web ServicesCertificate Manager (ACM)
    -- certificate. Required when @Protocols@ is set to @FTPS@.
    DescribedServer -> Maybe Text
certificate :: Prelude.Maybe Prelude.Text,
    -- | Specifies information to call a customer-supplied authentication API.
    -- This field is not populated when the @IdentityProviderType@ of a server
    -- is @AWS_DIRECTORY_SERVICE@ or @SERVICE_MANAGED@.
    DescribedServer -> Maybe IdentityProviderDetails
identityProviderDetails :: Prelude.Maybe IdentityProviderDetails,
    -- | Specifies the workflow ID for the workflow to assign and the execution
    -- role used for executing the workflow.
    DescribedServer -> Maybe WorkflowDetails
workflowDetails :: Prelude.Maybe WorkflowDetails,
    -- | Specifies the key-value pairs that you can use to search for and group
    -- servers that were assigned to the server that was described.
    DescribedServer -> Maybe (NonEmpty Tag)
tags :: Prelude.Maybe (Prelude.NonEmpty Tag),
    -- | The virtual private cloud (VPC) endpoint settings that are configured
    -- for your server. When you host your endpoint within your VPC, you can
    -- make it accessible only to resources within your VPC, or you can attach
    -- Elastic IP addresses and make it accessible to clients over the
    -- internet. Your VPC\'s default security groups are automatically assigned
    -- to your endpoint.
    DescribedServer -> Maybe EndpointDetails
endpointDetails :: Prelude.Maybe EndpointDetails,
    -- | Specifies the unique Amazon Resource Name (ARN) of the server.
    DescribedServer -> Text
arn :: Prelude.Text
  }
  deriving (DescribedServer -> DescribedServer -> Bool
(DescribedServer -> DescribedServer -> Bool)
-> (DescribedServer -> DescribedServer -> Bool)
-> Eq DescribedServer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribedServer -> DescribedServer -> Bool
$c/= :: DescribedServer -> DescribedServer -> Bool
== :: DescribedServer -> DescribedServer -> Bool
$c== :: DescribedServer -> DescribedServer -> Bool
Prelude.Eq, ReadPrec [DescribedServer]
ReadPrec DescribedServer
Int -> ReadS DescribedServer
ReadS [DescribedServer]
(Int -> ReadS DescribedServer)
-> ReadS [DescribedServer]
-> ReadPrec DescribedServer
-> ReadPrec [DescribedServer]
-> Read DescribedServer
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribedServer]
$creadListPrec :: ReadPrec [DescribedServer]
readPrec :: ReadPrec DescribedServer
$creadPrec :: ReadPrec DescribedServer
readList :: ReadS [DescribedServer]
$creadList :: ReadS [DescribedServer]
readsPrec :: Int -> ReadS DescribedServer
$creadsPrec :: Int -> ReadS DescribedServer
Prelude.Read, Int -> DescribedServer -> ShowS
[DescribedServer] -> ShowS
DescribedServer -> String
(Int -> DescribedServer -> ShowS)
-> (DescribedServer -> String)
-> ([DescribedServer] -> ShowS)
-> Show DescribedServer
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribedServer] -> ShowS
$cshowList :: [DescribedServer] -> ShowS
show :: DescribedServer -> String
$cshow :: DescribedServer -> String
showsPrec :: Int -> DescribedServer -> ShowS
$cshowsPrec :: Int -> DescribedServer -> ShowS
Prelude.Show, (forall x. DescribedServer -> Rep DescribedServer x)
-> (forall x. Rep DescribedServer x -> DescribedServer)
-> Generic DescribedServer
forall x. Rep DescribedServer x -> DescribedServer
forall x. DescribedServer -> Rep DescribedServer x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribedServer x -> DescribedServer
$cfrom :: forall x. DescribedServer -> Rep DescribedServer x
Prelude.Generic)

-- |
-- Create a value of 'DescribedServer' 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:
--
-- 'protocolDetails', 'describedServer_protocolDetails' - The protocol settings that are configured for your server.
--
-- Use the @PassiveIp@ parameter to indicate passive mode. Enter a single
-- dotted-quad IPv4 address, such as the external IP address of a firewall,
-- router, or load balancer.
--
-- 'loggingRole', 'describedServer_loggingRole' - Specifies the Amazon Resource Name (ARN) of the Amazon Web Services
-- Identity and Access Management (IAM) role that allows a server to turn
-- on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When
-- set, user activity can be viewed in your CloudWatch logs.
--
-- 'state', 'describedServer_state' - Specifies the condition of a server for the server that was described. A
-- value of @ONLINE@ indicates that the server can accept jobs and transfer
-- files. A @State@ value of @OFFLINE@ means that the server cannot perform
-- file transfer operations.
--
-- The states of @STARTING@ and @STOPPING@ indicate that the server is in
-- an intermediate state, either not fully able to respond, or not fully
-- offline. The values of @START_FAILED@ or @STOP_FAILED@ can indicate an
-- error condition.
--
-- 'identityProviderType', 'describedServer_identityProviderType' - Specifies the mode of authentication for a server. The default value is
-- @SERVICE_MANAGED@, which allows you to store and access user credentials
-- within the Amazon Web Services Transfer Family service.
--
-- Use @AWS_DIRECTORY_SERVICE@ to provide access to Active Directory groups
-- in Amazon Web Services Managed Active Directory or Microsoft Active
-- Directory in your on-premises environment or in Amazon Web Services
-- using AD Connectors. This option also requires you to provide a
-- Directory ID using the @IdentityProviderDetails@ parameter.
--
-- Use the @API_GATEWAY@ value to integrate with an identity provider of
-- your choosing. The @API_GATEWAY@ setting requires you to provide an API
-- Gateway endpoint URL to call for authentication using the
-- @IdentityProviderDetails@ parameter.
--
-- 'protocols', 'describedServer_protocols' - Specifies the file transfer protocol or protocols over which your file
-- transfer protocol client can connect to your server\'s endpoint. The
-- available protocols are:
--
-- -   @SFTP@ (Secure Shell (SSH) File Transfer Protocol): File transfer
--     over SSH
--
-- -   @FTPS@ (File Transfer Protocol Secure): File transfer with TLS
--     encryption
--
-- -   @FTP@ (File Transfer Protocol): Unencrypted file transfer
--
-- 'serverId', 'describedServer_serverId' - Specifies the unique system-assigned identifier for a server that you
-- instantiate.
--
-- 'domain', 'describedServer_domain' - Specifies the domain of the storage system that is used for file
-- transfers.
--
-- 'endpointType', 'describedServer_endpointType' - Defines the type of endpoint that your server is connected to. If your
-- server is connected to a VPC endpoint, your server isn\'t accessible
-- over the public internet.
--
-- 'securityPolicyName', 'describedServer_securityPolicyName' - Specifies the name of the security policy that is attached to the
-- server.
--
-- 'hostKeyFingerprint', 'describedServer_hostKeyFingerprint' - Specifies the Base64-encoded SHA256 fingerprint of the server\'s host
-- key. This value is equivalent to the output of the
-- @ssh-keygen -l -f my-new-server-key@ command.
--
-- 'userCount', 'describedServer_userCount' - Specifies the number of users that are assigned to a server you
-- specified with the @ServerId@.
--
-- 'certificate', 'describedServer_certificate' - Specifies the ARN of the Amazon Web ServicesCertificate Manager (ACM)
-- certificate. Required when @Protocols@ is set to @FTPS@.
--
-- 'identityProviderDetails', 'describedServer_identityProviderDetails' - Specifies information to call a customer-supplied authentication API.
-- This field is not populated when the @IdentityProviderType@ of a server
-- is @AWS_DIRECTORY_SERVICE@ or @SERVICE_MANAGED@.
--
-- 'workflowDetails', 'describedServer_workflowDetails' - Specifies the workflow ID for the workflow to assign and the execution
-- role used for executing the workflow.
--
-- 'tags', 'describedServer_tags' - Specifies the key-value pairs that you can use to search for and group
-- servers that were assigned to the server that was described.
--
-- 'endpointDetails', 'describedServer_endpointDetails' - The virtual private cloud (VPC) endpoint settings that are configured
-- for your server. When you host your endpoint within your VPC, you can
-- make it accessible only to resources within your VPC, or you can attach
-- Elastic IP addresses and make it accessible to clients over the
-- internet. Your VPC\'s default security groups are automatically assigned
-- to your endpoint.
--
-- 'arn', 'describedServer_arn' - Specifies the unique Amazon Resource Name (ARN) of the server.
newDescribedServer ::
  -- | 'arn'
  Prelude.Text ->
  DescribedServer
newDescribedServer :: Text -> DescribedServer
newDescribedServer Text
pArn_ =
  DescribedServer' :: Maybe ProtocolDetails
-> Maybe Text
-> Maybe State
-> Maybe IdentityProviderType
-> Maybe (NonEmpty Protocol)
-> Maybe Text
-> Maybe Domain
-> Maybe EndpointType
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> Maybe Text
-> Maybe IdentityProviderDetails
-> Maybe WorkflowDetails
-> Maybe (NonEmpty Tag)
-> Maybe EndpointDetails
-> Text
-> DescribedServer
DescribedServer'
    { $sel:protocolDetails:DescribedServer' :: Maybe ProtocolDetails
protocolDetails = Maybe ProtocolDetails
forall a. Maybe a
Prelude.Nothing,
      $sel:loggingRole:DescribedServer' :: Maybe Text
loggingRole = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:state:DescribedServer' :: Maybe State
state = Maybe State
forall a. Maybe a
Prelude.Nothing,
      $sel:identityProviderType:DescribedServer' :: Maybe IdentityProviderType
identityProviderType = Maybe IdentityProviderType
forall a. Maybe a
Prelude.Nothing,
      $sel:protocols:DescribedServer' :: Maybe (NonEmpty Protocol)
protocols = Maybe (NonEmpty Protocol)
forall a. Maybe a
Prelude.Nothing,
      $sel:serverId:DescribedServer' :: Maybe Text
serverId = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:domain:DescribedServer' :: Maybe Domain
domain = Maybe Domain
forall a. Maybe a
Prelude.Nothing,
      $sel:endpointType:DescribedServer' :: Maybe EndpointType
endpointType = Maybe EndpointType
forall a. Maybe a
Prelude.Nothing,
      $sel:securityPolicyName:DescribedServer' :: Maybe Text
securityPolicyName = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:hostKeyFingerprint:DescribedServer' :: Maybe Text
hostKeyFingerprint = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:userCount:DescribedServer' :: Maybe Int
userCount = Maybe Int
forall a. Maybe a
Prelude.Nothing,
      $sel:certificate:DescribedServer' :: Maybe Text
certificate = Maybe Text
forall a. Maybe a
Prelude.Nothing,
      $sel:identityProviderDetails:DescribedServer' :: Maybe IdentityProviderDetails
identityProviderDetails = Maybe IdentityProviderDetails
forall a. Maybe a
Prelude.Nothing,
      $sel:workflowDetails:DescribedServer' :: Maybe WorkflowDetails
workflowDetails = Maybe WorkflowDetails
forall a. Maybe a
Prelude.Nothing,
      $sel:tags:DescribedServer' :: Maybe (NonEmpty Tag)
tags = Maybe (NonEmpty Tag)
forall a. Maybe a
Prelude.Nothing,
      $sel:endpointDetails:DescribedServer' :: Maybe EndpointDetails
endpointDetails = Maybe EndpointDetails
forall a. Maybe a
Prelude.Nothing,
      $sel:arn:DescribedServer' :: Text
arn = Text
pArn_
    }

-- | The protocol settings that are configured for your server.
--
-- Use the @PassiveIp@ parameter to indicate passive mode. Enter a single
-- dotted-quad IPv4 address, such as the external IP address of a firewall,
-- router, or load balancer.
describedServer_protocolDetails :: Lens.Lens' DescribedServer (Prelude.Maybe ProtocolDetails)
describedServer_protocolDetails :: (Maybe ProtocolDetails -> f (Maybe ProtocolDetails))
-> DescribedServer -> f DescribedServer
describedServer_protocolDetails = (DescribedServer -> Maybe ProtocolDetails)
-> (DescribedServer -> Maybe ProtocolDetails -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe ProtocolDetails)
     (Maybe ProtocolDetails)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe ProtocolDetails
protocolDetails :: Maybe ProtocolDetails
$sel:protocolDetails:DescribedServer' :: DescribedServer -> Maybe ProtocolDetails
protocolDetails} -> Maybe ProtocolDetails
protocolDetails) (\s :: DescribedServer
s@DescribedServer' {} Maybe ProtocolDetails
a -> DescribedServer
s {$sel:protocolDetails:DescribedServer' :: Maybe ProtocolDetails
protocolDetails = Maybe ProtocolDetails
a} :: DescribedServer)

-- | Specifies the Amazon Resource Name (ARN) of the Amazon Web Services
-- Identity and Access Management (IAM) role that allows a server to turn
-- on Amazon CloudWatch logging for Amazon S3 or Amazon EFS events. When
-- set, user activity can be viewed in your CloudWatch logs.
describedServer_loggingRole :: Lens.Lens' DescribedServer (Prelude.Maybe Prelude.Text)
describedServer_loggingRole :: (Maybe Text -> f (Maybe Text))
-> DescribedServer -> f DescribedServer
describedServer_loggingRole = (DescribedServer -> Maybe Text)
-> (DescribedServer -> Maybe Text -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Text
loggingRole :: Maybe Text
$sel:loggingRole:DescribedServer' :: DescribedServer -> Maybe Text
loggingRole} -> Maybe Text
loggingRole) (\s :: DescribedServer
s@DescribedServer' {} Maybe Text
a -> DescribedServer
s {$sel:loggingRole:DescribedServer' :: Maybe Text
loggingRole = Maybe Text
a} :: DescribedServer)

-- | Specifies the condition of a server for the server that was described. A
-- value of @ONLINE@ indicates that the server can accept jobs and transfer
-- files. A @State@ value of @OFFLINE@ means that the server cannot perform
-- file transfer operations.
--
-- The states of @STARTING@ and @STOPPING@ indicate that the server is in
-- an intermediate state, either not fully able to respond, or not fully
-- offline. The values of @START_FAILED@ or @STOP_FAILED@ can indicate an
-- error condition.
describedServer_state :: Lens.Lens' DescribedServer (Prelude.Maybe State)
describedServer_state :: (Maybe State -> f (Maybe State))
-> DescribedServer -> f DescribedServer
describedServer_state = (DescribedServer -> Maybe State)
-> (DescribedServer -> Maybe State -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe State) (Maybe State)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe State
state :: Maybe State
$sel:state:DescribedServer' :: DescribedServer -> Maybe State
state} -> Maybe State
state) (\s :: DescribedServer
s@DescribedServer' {} Maybe State
a -> DescribedServer
s {$sel:state:DescribedServer' :: Maybe State
state = Maybe State
a} :: DescribedServer)

-- | Specifies the mode of authentication for a server. The default value is
-- @SERVICE_MANAGED@, which allows you to store and access user credentials
-- within the Amazon Web Services Transfer Family service.
--
-- Use @AWS_DIRECTORY_SERVICE@ to provide access to Active Directory groups
-- in Amazon Web Services Managed Active Directory or Microsoft Active
-- Directory in your on-premises environment or in Amazon Web Services
-- using AD Connectors. This option also requires you to provide a
-- Directory ID using the @IdentityProviderDetails@ parameter.
--
-- Use the @API_GATEWAY@ value to integrate with an identity provider of
-- your choosing. The @API_GATEWAY@ setting requires you to provide an API
-- Gateway endpoint URL to call for authentication using the
-- @IdentityProviderDetails@ parameter.
describedServer_identityProviderType :: Lens.Lens' DescribedServer (Prelude.Maybe IdentityProviderType)
describedServer_identityProviderType :: (Maybe IdentityProviderType -> f (Maybe IdentityProviderType))
-> DescribedServer -> f DescribedServer
describedServer_identityProviderType = (DescribedServer -> Maybe IdentityProviderType)
-> (DescribedServer
    -> Maybe IdentityProviderType -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe IdentityProviderType)
     (Maybe IdentityProviderType)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe IdentityProviderType
identityProviderType :: Maybe IdentityProviderType
$sel:identityProviderType:DescribedServer' :: DescribedServer -> Maybe IdentityProviderType
identityProviderType} -> Maybe IdentityProviderType
identityProviderType) (\s :: DescribedServer
s@DescribedServer' {} Maybe IdentityProviderType
a -> DescribedServer
s {$sel:identityProviderType:DescribedServer' :: Maybe IdentityProviderType
identityProviderType = Maybe IdentityProviderType
a} :: DescribedServer)

-- | Specifies the file transfer protocol or protocols over which your file
-- transfer protocol client can connect to your server\'s endpoint. The
-- available protocols are:
--
-- -   @SFTP@ (Secure Shell (SSH) File Transfer Protocol): File transfer
--     over SSH
--
-- -   @FTPS@ (File Transfer Protocol Secure): File transfer with TLS
--     encryption
--
-- -   @FTP@ (File Transfer Protocol): Unencrypted file transfer
describedServer_protocols :: Lens.Lens' DescribedServer (Prelude.Maybe (Prelude.NonEmpty Protocol))
describedServer_protocols :: (Maybe (NonEmpty Protocol) -> f (Maybe (NonEmpty Protocol)))
-> DescribedServer -> f DescribedServer
describedServer_protocols = (DescribedServer -> Maybe (NonEmpty Protocol))
-> (DescribedServer
    -> Maybe (NonEmpty Protocol) -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe (NonEmpty Protocol))
     (Maybe (NonEmpty Protocol))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe (NonEmpty Protocol)
protocols :: Maybe (NonEmpty Protocol)
$sel:protocols:DescribedServer' :: DescribedServer -> Maybe (NonEmpty Protocol)
protocols} -> Maybe (NonEmpty Protocol)
protocols) (\s :: DescribedServer
s@DescribedServer' {} Maybe (NonEmpty Protocol)
a -> DescribedServer
s {$sel:protocols:DescribedServer' :: Maybe (NonEmpty Protocol)
protocols = Maybe (NonEmpty Protocol)
a} :: DescribedServer) ((Maybe (NonEmpty Protocol) -> f (Maybe (NonEmpty Protocol)))
 -> DescribedServer -> f DescribedServer)
-> ((Maybe (NonEmpty Protocol) -> f (Maybe (NonEmpty Protocol)))
    -> Maybe (NonEmpty Protocol) -> f (Maybe (NonEmpty Protocol)))
-> (Maybe (NonEmpty Protocol) -> f (Maybe (NonEmpty Protocol)))
-> DescribedServer
-> f DescribedServer
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso
  (NonEmpty Protocol)
  (NonEmpty Protocol)
  (NonEmpty Protocol)
  (NonEmpty Protocol)
-> Iso
     (Maybe (NonEmpty Protocol))
     (Maybe (NonEmpty Protocol))
     (Maybe (NonEmpty Protocol))
     (Maybe (NonEmpty Protocol))
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 AnIso
  (NonEmpty Protocol)
  (NonEmpty Protocol)
  (NonEmpty Protocol)
  (NonEmpty Protocol)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Specifies the unique system-assigned identifier for a server that you
-- instantiate.
describedServer_serverId :: Lens.Lens' DescribedServer (Prelude.Maybe Prelude.Text)
describedServer_serverId :: (Maybe Text -> f (Maybe Text))
-> DescribedServer -> f DescribedServer
describedServer_serverId = (DescribedServer -> Maybe Text)
-> (DescribedServer -> Maybe Text -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Text
serverId :: Maybe Text
$sel:serverId:DescribedServer' :: DescribedServer -> Maybe Text
serverId} -> Maybe Text
serverId) (\s :: DescribedServer
s@DescribedServer' {} Maybe Text
a -> DescribedServer
s {$sel:serverId:DescribedServer' :: Maybe Text
serverId = Maybe Text
a} :: DescribedServer)

-- | Specifies the domain of the storage system that is used for file
-- transfers.
describedServer_domain :: Lens.Lens' DescribedServer (Prelude.Maybe Domain)
describedServer_domain :: (Maybe Domain -> f (Maybe Domain))
-> DescribedServer -> f DescribedServer
describedServer_domain = (DescribedServer -> Maybe Domain)
-> (DescribedServer -> Maybe Domain -> DescribedServer)
-> Lens
     DescribedServer DescribedServer (Maybe Domain) (Maybe Domain)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Domain
domain :: Maybe Domain
$sel:domain:DescribedServer' :: DescribedServer -> Maybe Domain
domain} -> Maybe Domain
domain) (\s :: DescribedServer
s@DescribedServer' {} Maybe Domain
a -> DescribedServer
s {$sel:domain:DescribedServer' :: Maybe Domain
domain = Maybe Domain
a} :: DescribedServer)

-- | Defines the type of endpoint that your server is connected to. If your
-- server is connected to a VPC endpoint, your server isn\'t accessible
-- over the public internet.
describedServer_endpointType :: Lens.Lens' DescribedServer (Prelude.Maybe EndpointType)
describedServer_endpointType :: (Maybe EndpointType -> f (Maybe EndpointType))
-> DescribedServer -> f DescribedServer
describedServer_endpointType = (DescribedServer -> Maybe EndpointType)
-> (DescribedServer -> Maybe EndpointType -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe EndpointType)
     (Maybe EndpointType)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe EndpointType
endpointType :: Maybe EndpointType
$sel:endpointType:DescribedServer' :: DescribedServer -> Maybe EndpointType
endpointType} -> Maybe EndpointType
endpointType) (\s :: DescribedServer
s@DescribedServer' {} Maybe EndpointType
a -> DescribedServer
s {$sel:endpointType:DescribedServer' :: Maybe EndpointType
endpointType = Maybe EndpointType
a} :: DescribedServer)

-- | Specifies the name of the security policy that is attached to the
-- server.
describedServer_securityPolicyName :: Lens.Lens' DescribedServer (Prelude.Maybe Prelude.Text)
describedServer_securityPolicyName :: (Maybe Text -> f (Maybe Text))
-> DescribedServer -> f DescribedServer
describedServer_securityPolicyName = (DescribedServer -> Maybe Text)
-> (DescribedServer -> Maybe Text -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Text
securityPolicyName :: Maybe Text
$sel:securityPolicyName:DescribedServer' :: DescribedServer -> Maybe Text
securityPolicyName} -> Maybe Text
securityPolicyName) (\s :: DescribedServer
s@DescribedServer' {} Maybe Text
a -> DescribedServer
s {$sel:securityPolicyName:DescribedServer' :: Maybe Text
securityPolicyName = Maybe Text
a} :: DescribedServer)

-- | Specifies the Base64-encoded SHA256 fingerprint of the server\'s host
-- key. This value is equivalent to the output of the
-- @ssh-keygen -l -f my-new-server-key@ command.
describedServer_hostKeyFingerprint :: Lens.Lens' DescribedServer (Prelude.Maybe Prelude.Text)
describedServer_hostKeyFingerprint :: (Maybe Text -> f (Maybe Text))
-> DescribedServer -> f DescribedServer
describedServer_hostKeyFingerprint = (DescribedServer -> Maybe Text)
-> (DescribedServer -> Maybe Text -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Text
hostKeyFingerprint :: Maybe Text
$sel:hostKeyFingerprint:DescribedServer' :: DescribedServer -> Maybe Text
hostKeyFingerprint} -> Maybe Text
hostKeyFingerprint) (\s :: DescribedServer
s@DescribedServer' {} Maybe Text
a -> DescribedServer
s {$sel:hostKeyFingerprint:DescribedServer' :: Maybe Text
hostKeyFingerprint = Maybe Text
a} :: DescribedServer)

-- | Specifies the number of users that are assigned to a server you
-- specified with the @ServerId@.
describedServer_userCount :: Lens.Lens' DescribedServer (Prelude.Maybe Prelude.Int)
describedServer_userCount :: (Maybe Int -> f (Maybe Int))
-> DescribedServer -> f DescribedServer
describedServer_userCount = (DescribedServer -> Maybe Int)
-> (DescribedServer -> Maybe Int -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe Int) (Maybe Int)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Int
userCount :: Maybe Int
$sel:userCount:DescribedServer' :: DescribedServer -> Maybe Int
userCount} -> Maybe Int
userCount) (\s :: DescribedServer
s@DescribedServer' {} Maybe Int
a -> DescribedServer
s {$sel:userCount:DescribedServer' :: Maybe Int
userCount = Maybe Int
a} :: DescribedServer)

-- | Specifies the ARN of the Amazon Web ServicesCertificate Manager (ACM)
-- certificate. Required when @Protocols@ is set to @FTPS@.
describedServer_certificate :: Lens.Lens' DescribedServer (Prelude.Maybe Prelude.Text)
describedServer_certificate :: (Maybe Text -> f (Maybe Text))
-> DescribedServer -> f DescribedServer
describedServer_certificate = (DescribedServer -> Maybe Text)
-> (DescribedServer -> Maybe Text -> DescribedServer)
-> Lens DescribedServer DescribedServer (Maybe Text) (Maybe Text)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe Text
certificate :: Maybe Text
$sel:certificate:DescribedServer' :: DescribedServer -> Maybe Text
certificate} -> Maybe Text
certificate) (\s :: DescribedServer
s@DescribedServer' {} Maybe Text
a -> DescribedServer
s {$sel:certificate:DescribedServer' :: Maybe Text
certificate = Maybe Text
a} :: DescribedServer)

-- | Specifies information to call a customer-supplied authentication API.
-- This field is not populated when the @IdentityProviderType@ of a server
-- is @AWS_DIRECTORY_SERVICE@ or @SERVICE_MANAGED@.
describedServer_identityProviderDetails :: Lens.Lens' DescribedServer (Prelude.Maybe IdentityProviderDetails)
describedServer_identityProviderDetails :: (Maybe IdentityProviderDetails
 -> f (Maybe IdentityProviderDetails))
-> DescribedServer -> f DescribedServer
describedServer_identityProviderDetails = (DescribedServer -> Maybe IdentityProviderDetails)
-> (DescribedServer
    -> Maybe IdentityProviderDetails -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe IdentityProviderDetails)
     (Maybe IdentityProviderDetails)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe IdentityProviderDetails
identityProviderDetails :: Maybe IdentityProviderDetails
$sel:identityProviderDetails:DescribedServer' :: DescribedServer -> Maybe IdentityProviderDetails
identityProviderDetails} -> Maybe IdentityProviderDetails
identityProviderDetails) (\s :: DescribedServer
s@DescribedServer' {} Maybe IdentityProviderDetails
a -> DescribedServer
s {$sel:identityProviderDetails:DescribedServer' :: Maybe IdentityProviderDetails
identityProviderDetails = Maybe IdentityProviderDetails
a} :: DescribedServer)

-- | Specifies the workflow ID for the workflow to assign and the execution
-- role used for executing the workflow.
describedServer_workflowDetails :: Lens.Lens' DescribedServer (Prelude.Maybe WorkflowDetails)
describedServer_workflowDetails :: (Maybe WorkflowDetails -> f (Maybe WorkflowDetails))
-> DescribedServer -> f DescribedServer
describedServer_workflowDetails = (DescribedServer -> Maybe WorkflowDetails)
-> (DescribedServer -> Maybe WorkflowDetails -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe WorkflowDetails)
     (Maybe WorkflowDetails)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe WorkflowDetails
workflowDetails :: Maybe WorkflowDetails
$sel:workflowDetails:DescribedServer' :: DescribedServer -> Maybe WorkflowDetails
workflowDetails} -> Maybe WorkflowDetails
workflowDetails) (\s :: DescribedServer
s@DescribedServer' {} Maybe WorkflowDetails
a -> DescribedServer
s {$sel:workflowDetails:DescribedServer' :: Maybe WorkflowDetails
workflowDetails = Maybe WorkflowDetails
a} :: DescribedServer)

-- | Specifies the key-value pairs that you can use to search for and group
-- servers that were assigned to the server that was described.
describedServer_tags :: Lens.Lens' DescribedServer (Prelude.Maybe (Prelude.NonEmpty Tag))
describedServer_tags :: (Maybe (NonEmpty Tag) -> f (Maybe (NonEmpty Tag)))
-> DescribedServer -> f DescribedServer
describedServer_tags = (DescribedServer -> Maybe (NonEmpty Tag))
-> (DescribedServer -> Maybe (NonEmpty Tag) -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe (NonEmpty Tag))
     (Maybe (NonEmpty Tag))
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe (NonEmpty Tag)
tags :: Maybe (NonEmpty Tag)
$sel:tags:DescribedServer' :: DescribedServer -> Maybe (NonEmpty Tag)
tags} -> Maybe (NonEmpty Tag)
tags) (\s :: DescribedServer
s@DescribedServer' {} Maybe (NonEmpty Tag)
a -> DescribedServer
s {$sel:tags:DescribedServer' :: Maybe (NonEmpty Tag)
tags = Maybe (NonEmpty Tag)
a} :: DescribedServer) ((Maybe (NonEmpty Tag) -> f (Maybe (NonEmpty Tag)))
 -> DescribedServer -> f DescribedServer)
-> ((Maybe (NonEmpty Tag) -> f (Maybe (NonEmpty Tag)))
    -> Maybe (NonEmpty Tag) -> f (Maybe (NonEmpty Tag)))
-> (Maybe (NonEmpty Tag) -> f (Maybe (NonEmpty Tag)))
-> DescribedServer
-> f DescribedServer
forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. AnIso (NonEmpty Tag) (NonEmpty Tag) (NonEmpty Tag) (NonEmpty Tag)
-> Iso
     (Maybe (NonEmpty Tag))
     (Maybe (NonEmpty Tag))
     (Maybe (NonEmpty Tag))
     (Maybe (NonEmpty Tag))
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 AnIso (NonEmpty Tag) (NonEmpty Tag) (NonEmpty Tag) (NonEmpty Tag)
forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | The virtual private cloud (VPC) endpoint settings that are configured
-- for your server. When you host your endpoint within your VPC, you can
-- make it accessible only to resources within your VPC, or you can attach
-- Elastic IP addresses and make it accessible to clients over the
-- internet. Your VPC\'s default security groups are automatically assigned
-- to your endpoint.
describedServer_endpointDetails :: Lens.Lens' DescribedServer (Prelude.Maybe EndpointDetails)
describedServer_endpointDetails :: (Maybe EndpointDetails -> f (Maybe EndpointDetails))
-> DescribedServer -> f DescribedServer
describedServer_endpointDetails = (DescribedServer -> Maybe EndpointDetails)
-> (DescribedServer -> Maybe EndpointDetails -> DescribedServer)
-> Lens
     DescribedServer
     DescribedServer
     (Maybe EndpointDetails)
     (Maybe EndpointDetails)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Maybe EndpointDetails
endpointDetails :: Maybe EndpointDetails
$sel:endpointDetails:DescribedServer' :: DescribedServer -> Maybe EndpointDetails
endpointDetails} -> Maybe EndpointDetails
endpointDetails) (\s :: DescribedServer
s@DescribedServer' {} Maybe EndpointDetails
a -> DescribedServer
s {$sel:endpointDetails:DescribedServer' :: Maybe EndpointDetails
endpointDetails = Maybe EndpointDetails
a} :: DescribedServer)

-- | Specifies the unique Amazon Resource Name (ARN) of the server.
describedServer_arn :: Lens.Lens' DescribedServer Prelude.Text
describedServer_arn :: (Text -> f Text) -> DescribedServer -> f DescribedServer
describedServer_arn = (DescribedServer -> Text)
-> (DescribedServer -> Text -> DescribedServer)
-> Lens DescribedServer DescribedServer Text Text
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribedServer' {Text
arn :: Text
$sel:arn:DescribedServer' :: DescribedServer -> Text
arn} -> Text
arn) (\s :: DescribedServer
s@DescribedServer' {} Text
a -> DescribedServer
s {$sel:arn:DescribedServer' :: Text
arn = Text
a} :: DescribedServer)

instance Core.FromJSON DescribedServer where
  parseJSON :: Value -> Parser DescribedServer
parseJSON =
    String
-> (Object -> Parser DescribedServer)
-> Value
-> Parser DescribedServer
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Core.withObject
      String
"DescribedServer"
      ( \Object
x ->
          Maybe ProtocolDetails
-> Maybe Text
-> Maybe State
-> Maybe IdentityProviderType
-> Maybe (NonEmpty Protocol)
-> Maybe Text
-> Maybe Domain
-> Maybe EndpointType
-> Maybe Text
-> Maybe Text
-> Maybe Int
-> Maybe Text
-> Maybe IdentityProviderDetails
-> Maybe WorkflowDetails
-> Maybe (NonEmpty Tag)
-> Maybe EndpointDetails
-> Text
-> DescribedServer
DescribedServer'
            (Maybe ProtocolDetails
 -> Maybe Text
 -> Maybe State
 -> Maybe IdentityProviderType
 -> Maybe (NonEmpty Protocol)
 -> Maybe Text
 -> Maybe Domain
 -> Maybe EndpointType
 -> Maybe Text
 -> Maybe Text
 -> Maybe Int
 -> Maybe Text
 -> Maybe IdentityProviderDetails
 -> Maybe WorkflowDetails
 -> Maybe (NonEmpty Tag)
 -> Maybe EndpointDetails
 -> Text
 -> DescribedServer)
-> Parser (Maybe ProtocolDetails)
-> Parser
     (Maybe Text
      -> Maybe State
      -> Maybe IdentityProviderType
      -> Maybe (NonEmpty Protocol)
      -> Maybe Text
      -> Maybe Domain
      -> Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x Object -> Text -> Parser (Maybe ProtocolDetails)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ProtocolDetails")
            Parser
  (Maybe Text
   -> Maybe State
   -> Maybe IdentityProviderType
   -> Maybe (NonEmpty Protocol)
   -> Maybe Text
   -> Maybe Domain
   -> Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Text)
-> Parser
     (Maybe State
      -> Maybe IdentityProviderType
      -> Maybe (NonEmpty Protocol)
      -> Maybe Text
      -> Maybe Domain
      -> Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"LoggingRole")
            Parser
  (Maybe State
   -> Maybe IdentityProviderType
   -> Maybe (NonEmpty Protocol)
   -> Maybe Text
   -> Maybe Domain
   -> Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe State)
-> Parser
     (Maybe IdentityProviderType
      -> Maybe (NonEmpty Protocol)
      -> Maybe Text
      -> Maybe Domain
      -> Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe State)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"State")
            Parser
  (Maybe IdentityProviderType
   -> Maybe (NonEmpty Protocol)
   -> Maybe Text
   -> Maybe Domain
   -> Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe IdentityProviderType)
-> Parser
     (Maybe (NonEmpty Protocol)
      -> Maybe Text
      -> Maybe Domain
      -> Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe IdentityProviderType)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"IdentityProviderType")
            Parser
  (Maybe (NonEmpty Protocol)
   -> Maybe Text
   -> Maybe Domain
   -> Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe (NonEmpty Protocol))
-> Parser
     (Maybe Text
      -> Maybe Domain
      -> Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe (NonEmpty Protocol))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Protocols")
            Parser
  (Maybe Text
   -> Maybe Domain
   -> Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Text)
-> Parser
     (Maybe Domain
      -> Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"ServerId")
            Parser
  (Maybe Domain
   -> Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Domain)
-> Parser
     (Maybe EndpointType
      -> Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Domain)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Domain")
            Parser
  (Maybe EndpointType
   -> Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe EndpointType)
-> Parser
     (Maybe Text
      -> Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe EndpointType)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EndpointType")
            Parser
  (Maybe Text
   -> Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Text)
-> Parser
     (Maybe Text
      -> Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"SecurityPolicyName")
            Parser
  (Maybe Text
   -> Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Text)
-> Parser
     (Maybe Int
      -> Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"HostKeyFingerprint")
            Parser
  (Maybe Int
   -> Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Int)
-> Parser
     (Maybe Text
      -> Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"UserCount")
            Parser
  (Maybe Text
   -> Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe Text)
-> Parser
     (Maybe IdentityProviderDetails
      -> Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Certificate")
            Parser
  (Maybe IdentityProviderDetails
   -> Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe IdentityProviderDetails)
-> Parser
     (Maybe WorkflowDetails
      -> Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails
      -> Text
      -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe IdentityProviderDetails)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"IdentityProviderDetails")
            Parser
  (Maybe WorkflowDetails
   -> Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails
   -> Text
   -> DescribedServer)
-> Parser (Maybe WorkflowDetails)
-> Parser
     (Maybe (NonEmpty Tag)
      -> Maybe EndpointDetails -> Text -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe WorkflowDetails)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"WorkflowDetails")
            Parser
  (Maybe (NonEmpty Tag)
   -> Maybe EndpointDetails -> Text -> DescribedServer)
-> Parser (Maybe (NonEmpty Tag))
-> Parser (Maybe EndpointDetails -> Text -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe (NonEmpty Tag))
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"Tags")
            Parser (Maybe EndpointDetails -> Text -> DescribedServer)
-> Parser (Maybe EndpointDetails)
-> Parser (Text -> DescribedServer)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser (Maybe EndpointDetails)
forall a. FromJSON a => Object -> Text -> Parser (Maybe a)
Core..:? Text
"EndpointDetails")
            Parser (Text -> DescribedServer)
-> Parser Text -> Parser DescribedServer
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x Object -> Text -> Parser Text
forall a. FromJSON a => Object -> Text -> Parser a
Core..: Text
"Arn")
      )

instance Prelude.Hashable DescribedServer

instance Prelude.NFData DescribedServer