{-# 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.S3.Types.SelectObjectContentEventStream
-- 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.S3.Types.SelectObjectContentEventStream 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.S3.Internal
import Amazonka.S3.Types.ContinuationEvent
import Amazonka.S3.Types.EndEvent
import Amazonka.S3.Types.ProgressEvent
import Amazonka.S3.Types.RecordsEvent
import Amazonka.S3.Types.StatsEvent

-- | The container for selecting objects from a content event stream.
--
-- /See:/ 'newSelectObjectContentEventStream' smart constructor.
data SelectObjectContentEventStream = SelectObjectContentEventStream'
  { -- | The Continuation Event.
    SelectObjectContentEventStream -> Maybe ContinuationEvent
cont :: Prelude.Maybe ContinuationEvent,
    -- | The End Event.
    SelectObjectContentEventStream -> Maybe EndEvent
end :: Prelude.Maybe EndEvent,
    -- | The Progress Event.
    SelectObjectContentEventStream -> Maybe ProgressEvent
progress :: Prelude.Maybe ProgressEvent,
    -- | The Records Event.
    SelectObjectContentEventStream -> Maybe RecordsEvent
records :: Prelude.Maybe RecordsEvent,
    -- | The Stats Event.
    SelectObjectContentEventStream -> Maybe StatsEvent
stats :: Prelude.Maybe StatsEvent
  }
  deriving (SelectObjectContentEventStream
-> SelectObjectContentEventStream -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SelectObjectContentEventStream
-> SelectObjectContentEventStream -> Bool
$c/= :: SelectObjectContentEventStream
-> SelectObjectContentEventStream -> Bool
== :: SelectObjectContentEventStream
-> SelectObjectContentEventStream -> Bool
$c== :: SelectObjectContentEventStream
-> SelectObjectContentEventStream -> Bool
Prelude.Eq, ReadPrec [SelectObjectContentEventStream]
ReadPrec SelectObjectContentEventStream
Int -> ReadS SelectObjectContentEventStream
ReadS [SelectObjectContentEventStream]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [SelectObjectContentEventStream]
$creadListPrec :: ReadPrec [SelectObjectContentEventStream]
readPrec :: ReadPrec SelectObjectContentEventStream
$creadPrec :: ReadPrec SelectObjectContentEventStream
readList :: ReadS [SelectObjectContentEventStream]
$creadList :: ReadS [SelectObjectContentEventStream]
readsPrec :: Int -> ReadS SelectObjectContentEventStream
$creadsPrec :: Int -> ReadS SelectObjectContentEventStream
Prelude.Read, Int -> SelectObjectContentEventStream -> ShowS
[SelectObjectContentEventStream] -> ShowS
SelectObjectContentEventStream -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SelectObjectContentEventStream] -> ShowS
$cshowList :: [SelectObjectContentEventStream] -> ShowS
show :: SelectObjectContentEventStream -> String
$cshow :: SelectObjectContentEventStream -> String
showsPrec :: Int -> SelectObjectContentEventStream -> ShowS
$cshowsPrec :: Int -> SelectObjectContentEventStream -> ShowS
Prelude.Show, forall x.
Rep SelectObjectContentEventStream x
-> SelectObjectContentEventStream
forall x.
SelectObjectContentEventStream
-> Rep SelectObjectContentEventStream x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep SelectObjectContentEventStream x
-> SelectObjectContentEventStream
$cfrom :: forall x.
SelectObjectContentEventStream
-> Rep SelectObjectContentEventStream x
Prelude.Generic)

-- |
-- Create a value of 'SelectObjectContentEventStream' 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:
--
-- 'cont', 'selectObjectContentEventStream_cont' - The Continuation Event.
--
-- 'end', 'selectObjectContentEventStream_end' - The End Event.
--
-- 'progress', 'selectObjectContentEventStream_progress' - The Progress Event.
--
-- 'records', 'selectObjectContentEventStream_records' - The Records Event.
--
-- 'stats', 'selectObjectContentEventStream_stats' - The Stats Event.
newSelectObjectContentEventStream ::
  SelectObjectContentEventStream
newSelectObjectContentEventStream :: SelectObjectContentEventStream
newSelectObjectContentEventStream =
  SelectObjectContentEventStream'
    { $sel:cont:SelectObjectContentEventStream' :: Maybe ContinuationEvent
cont =
        forall a. Maybe a
Prelude.Nothing,
      $sel:end:SelectObjectContentEventStream' :: Maybe EndEvent
end = forall a. Maybe a
Prelude.Nothing,
      $sel:progress:SelectObjectContentEventStream' :: Maybe ProgressEvent
progress = forall a. Maybe a
Prelude.Nothing,
      $sel:records:SelectObjectContentEventStream' :: Maybe RecordsEvent
records = forall a. Maybe a
Prelude.Nothing,
      $sel:stats:SelectObjectContentEventStream' :: Maybe StatsEvent
stats = forall a. Maybe a
Prelude.Nothing
    }

-- | The Continuation Event.
selectObjectContentEventStream_cont :: Lens.Lens' SelectObjectContentEventStream (Prelude.Maybe ContinuationEvent)
selectObjectContentEventStream_cont :: Lens' SelectObjectContentEventStream (Maybe ContinuationEvent)
selectObjectContentEventStream_cont = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectObjectContentEventStream' {Maybe ContinuationEvent
cont :: Maybe ContinuationEvent
$sel:cont:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe ContinuationEvent
cont} -> Maybe ContinuationEvent
cont) (\s :: SelectObjectContentEventStream
s@SelectObjectContentEventStream' {} Maybe ContinuationEvent
a -> SelectObjectContentEventStream
s {$sel:cont:SelectObjectContentEventStream' :: Maybe ContinuationEvent
cont = Maybe ContinuationEvent
a} :: SelectObjectContentEventStream)

-- | The End Event.
selectObjectContentEventStream_end :: Lens.Lens' SelectObjectContentEventStream (Prelude.Maybe EndEvent)
selectObjectContentEventStream_end :: Lens' SelectObjectContentEventStream (Maybe EndEvent)
selectObjectContentEventStream_end = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectObjectContentEventStream' {Maybe EndEvent
end :: Maybe EndEvent
$sel:end:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe EndEvent
end} -> Maybe EndEvent
end) (\s :: SelectObjectContentEventStream
s@SelectObjectContentEventStream' {} Maybe EndEvent
a -> SelectObjectContentEventStream
s {$sel:end:SelectObjectContentEventStream' :: Maybe EndEvent
end = Maybe EndEvent
a} :: SelectObjectContentEventStream)

-- | The Progress Event.
selectObjectContentEventStream_progress :: Lens.Lens' SelectObjectContentEventStream (Prelude.Maybe ProgressEvent)
selectObjectContentEventStream_progress :: Lens' SelectObjectContentEventStream (Maybe ProgressEvent)
selectObjectContentEventStream_progress = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectObjectContentEventStream' {Maybe ProgressEvent
progress :: Maybe ProgressEvent
$sel:progress:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe ProgressEvent
progress} -> Maybe ProgressEvent
progress) (\s :: SelectObjectContentEventStream
s@SelectObjectContentEventStream' {} Maybe ProgressEvent
a -> SelectObjectContentEventStream
s {$sel:progress:SelectObjectContentEventStream' :: Maybe ProgressEvent
progress = Maybe ProgressEvent
a} :: SelectObjectContentEventStream)

-- | The Records Event.
selectObjectContentEventStream_records :: Lens.Lens' SelectObjectContentEventStream (Prelude.Maybe RecordsEvent)
selectObjectContentEventStream_records :: Lens' SelectObjectContentEventStream (Maybe RecordsEvent)
selectObjectContentEventStream_records = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectObjectContentEventStream' {Maybe RecordsEvent
records :: Maybe RecordsEvent
$sel:records:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe RecordsEvent
records} -> Maybe RecordsEvent
records) (\s :: SelectObjectContentEventStream
s@SelectObjectContentEventStream' {} Maybe RecordsEvent
a -> SelectObjectContentEventStream
s {$sel:records:SelectObjectContentEventStream' :: Maybe RecordsEvent
records = Maybe RecordsEvent
a} :: SelectObjectContentEventStream)

-- | The Stats Event.
selectObjectContentEventStream_stats :: Lens.Lens' SelectObjectContentEventStream (Prelude.Maybe StatsEvent)
selectObjectContentEventStream_stats :: Lens' SelectObjectContentEventStream (Maybe StatsEvent)
selectObjectContentEventStream_stats = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\SelectObjectContentEventStream' {Maybe StatsEvent
stats :: Maybe StatsEvent
$sel:stats:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe StatsEvent
stats} -> Maybe StatsEvent
stats) (\s :: SelectObjectContentEventStream
s@SelectObjectContentEventStream' {} Maybe StatsEvent
a -> SelectObjectContentEventStream
s {$sel:stats:SelectObjectContentEventStream' :: Maybe StatsEvent
stats = Maybe StatsEvent
a} :: SelectObjectContentEventStream)

instance Data.FromXML SelectObjectContentEventStream where
  parseXML :: [Node] -> Either String SelectObjectContentEventStream
parseXML [Node]
x =
    Maybe ContinuationEvent
-> Maybe EndEvent
-> Maybe ProgressEvent
-> Maybe RecordsEvent
-> Maybe StatsEvent
-> SelectObjectContentEventStream
SelectObjectContentEventStream'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Cont")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"End")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Progress")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Records")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Stats")

instance
  Prelude.Hashable
    SelectObjectContentEventStream
  where
  hashWithSalt :: Int -> SelectObjectContentEventStream -> Int
hashWithSalt
    Int
_salt
    SelectObjectContentEventStream' {Maybe ContinuationEvent
Maybe EndEvent
Maybe ProgressEvent
Maybe RecordsEvent
Maybe StatsEvent
stats :: Maybe StatsEvent
records :: Maybe RecordsEvent
progress :: Maybe ProgressEvent
end :: Maybe EndEvent
cont :: Maybe ContinuationEvent
$sel:stats:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe StatsEvent
$sel:records:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe RecordsEvent
$sel:progress:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe ProgressEvent
$sel:end:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe EndEvent
$sel:cont:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe ContinuationEvent
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ContinuationEvent
cont
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe EndEvent
end
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ProgressEvent
progress
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RecordsEvent
records
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StatsEvent
stats

instance
  Prelude.NFData
    SelectObjectContentEventStream
  where
  rnf :: SelectObjectContentEventStream -> ()
rnf SelectObjectContentEventStream' {Maybe ContinuationEvent
Maybe EndEvent
Maybe ProgressEvent
Maybe RecordsEvent
Maybe StatsEvent
stats :: Maybe StatsEvent
records :: Maybe RecordsEvent
progress :: Maybe ProgressEvent
end :: Maybe EndEvent
cont :: Maybe ContinuationEvent
$sel:stats:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe StatsEvent
$sel:records:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe RecordsEvent
$sel:progress:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe ProgressEvent
$sel:end:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe EndEvent
$sel:cont:SelectObjectContentEventStream' :: SelectObjectContentEventStream -> Maybe ContinuationEvent
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ContinuationEvent
cont
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe EndEvent
end
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ProgressEvent
progress
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RecordsEvent
records
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StatsEvent
stats