{-# 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.LookoutMetrics.Types.DetectedFileFormatDescriptor
-- 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.LookoutMetrics.Types.DetectedFileFormatDescriptor where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.LookoutMetrics.Types.DetectedCsvFormatDescriptor
import Amazonka.LookoutMetrics.Types.DetectedJsonFormatDescriptor
import qualified Amazonka.Prelude as Prelude

-- | Properties of an inferred data format.
--
-- /See:/ 'newDetectedFileFormatDescriptor' smart constructor.
data DetectedFileFormatDescriptor = DetectedFileFormatDescriptor'
  { -- | Details about a CSV format.
    DetectedFileFormatDescriptor -> Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor :: Prelude.Maybe DetectedCsvFormatDescriptor,
    -- | Details about a JSON format.
    DetectedFileFormatDescriptor -> Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor :: Prelude.Maybe DetectedJsonFormatDescriptor
  }
  deriving (DetectedFileFormatDescriptor
-> DetectedFileFormatDescriptor -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DetectedFileFormatDescriptor
-> DetectedFileFormatDescriptor -> Bool
$c/= :: DetectedFileFormatDescriptor
-> DetectedFileFormatDescriptor -> Bool
== :: DetectedFileFormatDescriptor
-> DetectedFileFormatDescriptor -> Bool
$c== :: DetectedFileFormatDescriptor
-> DetectedFileFormatDescriptor -> Bool
Prelude.Eq, ReadPrec [DetectedFileFormatDescriptor]
ReadPrec DetectedFileFormatDescriptor
Int -> ReadS DetectedFileFormatDescriptor
ReadS [DetectedFileFormatDescriptor]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DetectedFileFormatDescriptor]
$creadListPrec :: ReadPrec [DetectedFileFormatDescriptor]
readPrec :: ReadPrec DetectedFileFormatDescriptor
$creadPrec :: ReadPrec DetectedFileFormatDescriptor
readList :: ReadS [DetectedFileFormatDescriptor]
$creadList :: ReadS [DetectedFileFormatDescriptor]
readsPrec :: Int -> ReadS DetectedFileFormatDescriptor
$creadsPrec :: Int -> ReadS DetectedFileFormatDescriptor
Prelude.Read, Int -> DetectedFileFormatDescriptor -> ShowS
[DetectedFileFormatDescriptor] -> ShowS
DetectedFileFormatDescriptor -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DetectedFileFormatDescriptor] -> ShowS
$cshowList :: [DetectedFileFormatDescriptor] -> ShowS
show :: DetectedFileFormatDescriptor -> String
$cshow :: DetectedFileFormatDescriptor -> String
showsPrec :: Int -> DetectedFileFormatDescriptor -> ShowS
$cshowsPrec :: Int -> DetectedFileFormatDescriptor -> ShowS
Prelude.Show, forall x.
Rep DetectedFileFormatDescriptor x -> DetectedFileFormatDescriptor
forall x.
DetectedFileFormatDescriptor -> Rep DetectedFileFormatDescriptor x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DetectedFileFormatDescriptor x -> DetectedFileFormatDescriptor
$cfrom :: forall x.
DetectedFileFormatDescriptor -> Rep DetectedFileFormatDescriptor x
Prelude.Generic)

-- |
-- Create a value of 'DetectedFileFormatDescriptor' 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:
--
-- 'csvFormatDescriptor', 'detectedFileFormatDescriptor_csvFormatDescriptor' - Details about a CSV format.
--
-- 'jsonFormatDescriptor', 'detectedFileFormatDescriptor_jsonFormatDescriptor' - Details about a JSON format.
newDetectedFileFormatDescriptor ::
  DetectedFileFormatDescriptor
newDetectedFileFormatDescriptor :: DetectedFileFormatDescriptor
newDetectedFileFormatDescriptor =
  DetectedFileFormatDescriptor'
    { $sel:csvFormatDescriptor:DetectedFileFormatDescriptor' :: Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor =
        forall a. Maybe a
Prelude.Nothing,
      $sel:jsonFormatDescriptor:DetectedFileFormatDescriptor' :: Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor = forall a. Maybe a
Prelude.Nothing
    }

-- | Details about a CSV format.
detectedFileFormatDescriptor_csvFormatDescriptor :: Lens.Lens' DetectedFileFormatDescriptor (Prelude.Maybe DetectedCsvFormatDescriptor)
detectedFileFormatDescriptor_csvFormatDescriptor :: Lens'
  DetectedFileFormatDescriptor (Maybe DetectedCsvFormatDescriptor)
detectedFileFormatDescriptor_csvFormatDescriptor = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DetectedFileFormatDescriptor' {Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor :: Maybe DetectedCsvFormatDescriptor
$sel:csvFormatDescriptor:DetectedFileFormatDescriptor' :: DetectedFileFormatDescriptor -> Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor} -> Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor) (\s :: DetectedFileFormatDescriptor
s@DetectedFileFormatDescriptor' {} Maybe DetectedCsvFormatDescriptor
a -> DetectedFileFormatDescriptor
s {$sel:csvFormatDescriptor:DetectedFileFormatDescriptor' :: Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor = Maybe DetectedCsvFormatDescriptor
a} :: DetectedFileFormatDescriptor)

-- | Details about a JSON format.
detectedFileFormatDescriptor_jsonFormatDescriptor :: Lens.Lens' DetectedFileFormatDescriptor (Prelude.Maybe DetectedJsonFormatDescriptor)
detectedFileFormatDescriptor_jsonFormatDescriptor :: Lens'
  DetectedFileFormatDescriptor (Maybe DetectedJsonFormatDescriptor)
detectedFileFormatDescriptor_jsonFormatDescriptor = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DetectedFileFormatDescriptor' {Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor :: Maybe DetectedJsonFormatDescriptor
$sel:jsonFormatDescriptor:DetectedFileFormatDescriptor' :: DetectedFileFormatDescriptor -> Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor} -> Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor) (\s :: DetectedFileFormatDescriptor
s@DetectedFileFormatDescriptor' {} Maybe DetectedJsonFormatDescriptor
a -> DetectedFileFormatDescriptor
s {$sel:jsonFormatDescriptor:DetectedFileFormatDescriptor' :: Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor = Maybe DetectedJsonFormatDescriptor
a} :: DetectedFileFormatDescriptor)

instance Data.FromJSON DetectedFileFormatDescriptor where
  parseJSON :: Value -> Parser DetectedFileFormatDescriptor
parseJSON =
    forall a. String -> (Object -> Parser a) -> Value -> Parser a
Data.withObject
      String
"DetectedFileFormatDescriptor"
      ( \Object
x ->
          Maybe DetectedCsvFormatDescriptor
-> Maybe DetectedJsonFormatDescriptor
-> DetectedFileFormatDescriptor
DetectedFileFormatDescriptor'
            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
"CsvFormatDescriptor")
            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
"JsonFormatDescriptor")
      )

instance
  Prelude.Hashable
    DetectedFileFormatDescriptor
  where
  hashWithSalt :: Int -> DetectedFileFormatDescriptor -> Int
hashWithSalt Int
_salt DetectedFileFormatDescriptor' {Maybe DetectedCsvFormatDescriptor
Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor :: Maybe DetectedJsonFormatDescriptor
csvFormatDescriptor :: Maybe DetectedCsvFormatDescriptor
$sel:jsonFormatDescriptor:DetectedFileFormatDescriptor' :: DetectedFileFormatDescriptor -> Maybe DetectedJsonFormatDescriptor
$sel:csvFormatDescriptor:DetectedFileFormatDescriptor' :: DetectedFileFormatDescriptor -> Maybe DetectedCsvFormatDescriptor
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor

instance Prelude.NFData DetectedFileFormatDescriptor where
  rnf :: DetectedFileFormatDescriptor -> ()
rnf DetectedFileFormatDescriptor' {Maybe DetectedCsvFormatDescriptor
Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor :: Maybe DetectedJsonFormatDescriptor
csvFormatDescriptor :: Maybe DetectedCsvFormatDescriptor
$sel:jsonFormatDescriptor:DetectedFileFormatDescriptor' :: DetectedFileFormatDescriptor -> Maybe DetectedJsonFormatDescriptor
$sel:csvFormatDescriptor:DetectedFileFormatDescriptor' :: DetectedFileFormatDescriptor -> Maybe DetectedCsvFormatDescriptor
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe DetectedCsvFormatDescriptor
csvFormatDescriptor
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe DetectedJsonFormatDescriptor
jsonFormatDescriptor