{-# 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.SMS.Types.ValidationOutput
-- 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.SMS.Types.ValidationOutput where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SMS.Types.AppValidationOutput
import Amazonka.SMS.Types.ServerValidationOutput
import Amazonka.SMS.Types.ValidationStatus

-- | Contains validation output.
--
-- /See:/ 'newValidationOutput' smart constructor.
data ValidationOutput = ValidationOutput'
  { -- | The output from validating an application.
    ValidationOutput -> Maybe AppValidationOutput
appValidationOutput :: Prelude.Maybe AppValidationOutput,
    -- | The latest time that the validation was performed.
    ValidationOutput -> Maybe POSIX
latestValidationTime :: Prelude.Maybe Data.POSIX,
    -- | The name of the validation.
    ValidationOutput -> Maybe Text
name :: Prelude.Maybe Prelude.Text,
    -- | The output from validation an instance.
    ValidationOutput -> Maybe ServerValidationOutput
serverValidationOutput :: Prelude.Maybe ServerValidationOutput,
    -- | The status of the validation.
    ValidationOutput -> Maybe ValidationStatus
status :: Prelude.Maybe ValidationStatus,
    -- | The status message.
    ValidationOutput -> Maybe Text
statusMessage :: Prelude.Maybe Prelude.Text,
    -- | The ID of the validation.
    ValidationOutput -> Maybe Text
validationId :: Prelude.Maybe Prelude.Text
  }
  deriving (ValidationOutput -> ValidationOutput -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ValidationOutput -> ValidationOutput -> Bool
$c/= :: ValidationOutput -> ValidationOutput -> Bool
== :: ValidationOutput -> ValidationOutput -> Bool
$c== :: ValidationOutput -> ValidationOutput -> Bool
Prelude.Eq, ReadPrec [ValidationOutput]
ReadPrec ValidationOutput
Int -> ReadS ValidationOutput
ReadS [ValidationOutput]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [ValidationOutput]
$creadListPrec :: ReadPrec [ValidationOutput]
readPrec :: ReadPrec ValidationOutput
$creadPrec :: ReadPrec ValidationOutput
readList :: ReadS [ValidationOutput]
$creadList :: ReadS [ValidationOutput]
readsPrec :: Int -> ReadS ValidationOutput
$creadsPrec :: Int -> ReadS ValidationOutput
Prelude.Read, Int -> ValidationOutput -> ShowS
[ValidationOutput] -> ShowS
ValidationOutput -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ValidationOutput] -> ShowS
$cshowList :: [ValidationOutput] -> ShowS
show :: ValidationOutput -> String
$cshow :: ValidationOutput -> String
showsPrec :: Int -> ValidationOutput -> ShowS
$cshowsPrec :: Int -> ValidationOutput -> ShowS
Prelude.Show, forall x. Rep ValidationOutput x -> ValidationOutput
forall x. ValidationOutput -> Rep ValidationOutput x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ValidationOutput x -> ValidationOutput
$cfrom :: forall x. ValidationOutput -> Rep ValidationOutput x
Prelude.Generic)

-- |
-- Create a value of 'ValidationOutput' 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:
--
-- 'appValidationOutput', 'validationOutput_appValidationOutput' - The output from validating an application.
--
-- 'latestValidationTime', 'validationOutput_latestValidationTime' - The latest time that the validation was performed.
--
-- 'name', 'validationOutput_name' - The name of the validation.
--
-- 'serverValidationOutput', 'validationOutput_serverValidationOutput' - The output from validation an instance.
--
-- 'status', 'validationOutput_status' - The status of the validation.
--
-- 'statusMessage', 'validationOutput_statusMessage' - The status message.
--
-- 'validationId', 'validationOutput_validationId' - The ID of the validation.
newValidationOutput ::
  ValidationOutput
newValidationOutput :: ValidationOutput
newValidationOutput =
  ValidationOutput'
    { $sel:appValidationOutput:ValidationOutput' :: Maybe AppValidationOutput
appValidationOutput =
        forall a. Maybe a
Prelude.Nothing,
      $sel:latestValidationTime:ValidationOutput' :: Maybe POSIX
latestValidationTime = forall a. Maybe a
Prelude.Nothing,
      $sel:name:ValidationOutput' :: Maybe Text
name = forall a. Maybe a
Prelude.Nothing,
      $sel:serverValidationOutput:ValidationOutput' :: Maybe ServerValidationOutput
serverValidationOutput = forall a. Maybe a
Prelude.Nothing,
      $sel:status:ValidationOutput' :: Maybe ValidationStatus
status = forall a. Maybe a
Prelude.Nothing,
      $sel:statusMessage:ValidationOutput' :: Maybe Text
statusMessage = forall a. Maybe a
Prelude.Nothing,
      $sel:validationId:ValidationOutput' :: Maybe Text
validationId = forall a. Maybe a
Prelude.Nothing
    }

-- | The output from validating an application.
validationOutput_appValidationOutput :: Lens.Lens' ValidationOutput (Prelude.Maybe AppValidationOutput)
validationOutput_appValidationOutput :: Lens' ValidationOutput (Maybe AppValidationOutput)
validationOutput_appValidationOutput = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe AppValidationOutput
appValidationOutput :: Maybe AppValidationOutput
$sel:appValidationOutput:ValidationOutput' :: ValidationOutput -> Maybe AppValidationOutput
appValidationOutput} -> Maybe AppValidationOutput
appValidationOutput) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe AppValidationOutput
a -> ValidationOutput
s {$sel:appValidationOutput:ValidationOutput' :: Maybe AppValidationOutput
appValidationOutput = Maybe AppValidationOutput
a} :: ValidationOutput)

-- | The latest time that the validation was performed.
validationOutput_latestValidationTime :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.UTCTime)
validationOutput_latestValidationTime :: Lens' ValidationOutput (Maybe UTCTime)
validationOutput_latestValidationTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe POSIX
latestValidationTime :: Maybe POSIX
$sel:latestValidationTime:ValidationOutput' :: ValidationOutput -> Maybe POSIX
latestValidationTime} -> Maybe POSIX
latestValidationTime) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe POSIX
a -> ValidationOutput
s {$sel:latestValidationTime:ValidationOutput' :: Maybe POSIX
latestValidationTime = Maybe POSIX
a} :: ValidationOutput) 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 name of the validation.
validationOutput_name :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.Text)
validationOutput_name :: Lens' ValidationOutput (Maybe Text)
validationOutput_name = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe Text
name :: Maybe Text
$sel:name:ValidationOutput' :: ValidationOutput -> Maybe Text
name} -> Maybe Text
name) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe Text
a -> ValidationOutput
s {$sel:name:ValidationOutput' :: Maybe Text
name = Maybe Text
a} :: ValidationOutput)

-- | The output from validation an instance.
validationOutput_serverValidationOutput :: Lens.Lens' ValidationOutput (Prelude.Maybe ServerValidationOutput)
validationOutput_serverValidationOutput :: Lens' ValidationOutput (Maybe ServerValidationOutput)
validationOutput_serverValidationOutput = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe ServerValidationOutput
serverValidationOutput :: Maybe ServerValidationOutput
$sel:serverValidationOutput:ValidationOutput' :: ValidationOutput -> Maybe ServerValidationOutput
serverValidationOutput} -> Maybe ServerValidationOutput
serverValidationOutput) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe ServerValidationOutput
a -> ValidationOutput
s {$sel:serverValidationOutput:ValidationOutput' :: Maybe ServerValidationOutput
serverValidationOutput = Maybe ServerValidationOutput
a} :: ValidationOutput)

-- | The status of the validation.
validationOutput_status :: Lens.Lens' ValidationOutput (Prelude.Maybe ValidationStatus)
validationOutput_status :: Lens' ValidationOutput (Maybe ValidationStatus)
validationOutput_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe ValidationStatus
status :: Maybe ValidationStatus
$sel:status:ValidationOutput' :: ValidationOutput -> Maybe ValidationStatus
status} -> Maybe ValidationStatus
status) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe ValidationStatus
a -> ValidationOutput
s {$sel:status:ValidationOutput' :: Maybe ValidationStatus
status = Maybe ValidationStatus
a} :: ValidationOutput)

-- | The status message.
validationOutput_statusMessage :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.Text)
validationOutput_statusMessage :: Lens' ValidationOutput (Maybe Text)
validationOutput_statusMessage = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe Text
statusMessage :: Maybe Text
$sel:statusMessage:ValidationOutput' :: ValidationOutput -> Maybe Text
statusMessage} -> Maybe Text
statusMessage) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe Text
a -> ValidationOutput
s {$sel:statusMessage:ValidationOutput' :: Maybe Text
statusMessage = Maybe Text
a} :: ValidationOutput)

-- | The ID of the validation.
validationOutput_validationId :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.Text)
validationOutput_validationId :: Lens' ValidationOutput (Maybe Text)
validationOutput_validationId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\ValidationOutput' {Maybe Text
validationId :: Maybe Text
$sel:validationId:ValidationOutput' :: ValidationOutput -> Maybe Text
validationId} -> Maybe Text
validationId) (\s :: ValidationOutput
s@ValidationOutput' {} Maybe Text
a -> ValidationOutput
s {$sel:validationId:ValidationOutput' :: Maybe Text
validationId = Maybe Text
a} :: ValidationOutput)

instance Data.FromJSON ValidationOutput where
  parseJSON :: Value -> Parser ValidationOutput
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"ValidationOutput"
      ( \Object
x ->
          Maybe AppValidationOutput
-> Maybe POSIX
-> Maybe Text
-> Maybe ServerValidationOutput
-> Maybe ValidationStatus
-> Maybe Text
-> Maybe Text
-> ValidationOutput
ValidationOutput'
            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
"appValidationOutput")
            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
"latestValidationTime")
            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
"serverValidationOutput")
            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
"status")
            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
"statusMessage")
            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
"validationId")
      )

instance Prelude.Hashable ValidationOutput where
  hashWithSalt :: Int -> ValidationOutput -> Int
hashWithSalt Int
_salt ValidationOutput' {Maybe Text
Maybe POSIX
Maybe AppValidationOutput
Maybe ValidationStatus
Maybe ServerValidationOutput
validationId :: Maybe Text
statusMessage :: Maybe Text
status :: Maybe ValidationStatus
serverValidationOutput :: Maybe ServerValidationOutput
name :: Maybe Text
latestValidationTime :: Maybe POSIX
appValidationOutput :: Maybe AppValidationOutput
$sel:validationId:ValidationOutput' :: ValidationOutput -> Maybe Text
$sel:statusMessage:ValidationOutput' :: ValidationOutput -> Maybe Text
$sel:status:ValidationOutput' :: ValidationOutput -> Maybe ValidationStatus
$sel:serverValidationOutput:ValidationOutput' :: ValidationOutput -> Maybe ServerValidationOutput
$sel:name:ValidationOutput' :: ValidationOutput -> Maybe Text
$sel:latestValidationTime:ValidationOutput' :: ValidationOutput -> Maybe POSIX
$sel:appValidationOutput:ValidationOutput' :: ValidationOutput -> Maybe AppValidationOutput
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe AppValidationOutput
appValidationOutput
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe POSIX
latestValidationTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
name
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ServerValidationOutput
serverValidationOutput
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ValidationStatus
status
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
statusMessage
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
validationId

instance Prelude.NFData ValidationOutput where
  rnf :: ValidationOutput -> ()
rnf ValidationOutput' {Maybe Text
Maybe POSIX
Maybe AppValidationOutput
Maybe ValidationStatus
Maybe ServerValidationOutput
validationId :: Maybe Text
statusMessage :: Maybe Text
status :: Maybe ValidationStatus
serverValidationOutput :: Maybe ServerValidationOutput
name :: Maybe Text
latestValidationTime :: Maybe POSIX
appValidationOutput :: Maybe AppValidationOutput
$sel:validationId:ValidationOutput' :: ValidationOutput -> Maybe Text
$sel:statusMessage:ValidationOutput' :: ValidationOutput -> Maybe Text
$sel:status:ValidationOutput' :: ValidationOutput -> Maybe ValidationStatus
$sel:serverValidationOutput:ValidationOutput' :: ValidationOutput -> Maybe ServerValidationOutput
$sel:name:ValidationOutput' :: ValidationOutput -> Maybe Text
$sel:latestValidationTime:ValidationOutput' :: ValidationOutput -> Maybe POSIX
$sel:appValidationOutput:ValidationOutput' :: ValidationOutput -> Maybe AppValidationOutput
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe AppValidationOutput
appValidationOutput
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe POSIX
latestValidationTime
      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 ServerValidationOutput
serverValidationOutput
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ValidationStatus
status
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
statusMessage
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
validationId