{-# 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.MultipartUpload
-- 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.MultipartUpload 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.ChecksumAlgorithm
import Amazonka.S3.Types.Initiator
import Amazonka.S3.Types.Owner
import Amazonka.S3.Types.StorageClass

-- | Container for the @MultipartUpload@ for the Amazon S3 object.
--
-- /See:/ 'newMultipartUpload' smart constructor.
data MultipartUpload = MultipartUpload'
  { -- | The algorithm that was used to create a checksum of the object.
    MultipartUpload -> Maybe ChecksumAlgorithm
checksumAlgorithm :: Prelude.Maybe ChecksumAlgorithm,
    -- | Date and time at which the multipart upload was initiated.
    MultipartUpload -> Maybe ISO8601
initiated :: Prelude.Maybe Data.ISO8601,
    -- | Identifies who initiated the multipart upload.
    MultipartUpload -> Maybe Initiator
initiator :: Prelude.Maybe Initiator,
    -- | Key of the object for which the multipart upload was initiated.
    MultipartUpload -> Maybe ObjectKey
key :: Prelude.Maybe ObjectKey,
    -- | Specifies the owner of the object that is part of the multipart upload.
    MultipartUpload -> Maybe Owner
owner :: Prelude.Maybe Owner,
    -- | The class of storage used to store the object.
    MultipartUpload -> Maybe StorageClass
storageClass :: Prelude.Maybe StorageClass,
    -- | Upload ID that identifies the multipart upload.
    MultipartUpload -> Maybe Text
uploadId :: Prelude.Maybe Prelude.Text
  }
  deriving (MultipartUpload -> MultipartUpload -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MultipartUpload -> MultipartUpload -> Bool
$c/= :: MultipartUpload -> MultipartUpload -> Bool
== :: MultipartUpload -> MultipartUpload -> Bool
$c== :: MultipartUpload -> MultipartUpload -> Bool
Prelude.Eq, ReadPrec [MultipartUpload]
ReadPrec MultipartUpload
Int -> ReadS MultipartUpload
ReadS [MultipartUpload]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [MultipartUpload]
$creadListPrec :: ReadPrec [MultipartUpload]
readPrec :: ReadPrec MultipartUpload
$creadPrec :: ReadPrec MultipartUpload
readList :: ReadS [MultipartUpload]
$creadList :: ReadS [MultipartUpload]
readsPrec :: Int -> ReadS MultipartUpload
$creadsPrec :: Int -> ReadS MultipartUpload
Prelude.Read, Int -> MultipartUpload -> ShowS
[MultipartUpload] -> ShowS
MultipartUpload -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MultipartUpload] -> ShowS
$cshowList :: [MultipartUpload] -> ShowS
show :: MultipartUpload -> String
$cshow :: MultipartUpload -> String
showsPrec :: Int -> MultipartUpload -> ShowS
$cshowsPrec :: Int -> MultipartUpload -> ShowS
Prelude.Show, forall x. Rep MultipartUpload x -> MultipartUpload
forall x. MultipartUpload -> Rep MultipartUpload x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep MultipartUpload x -> MultipartUpload
$cfrom :: forall x. MultipartUpload -> Rep MultipartUpload x
Prelude.Generic)

-- |
-- Create a value of 'MultipartUpload' 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:
--
-- 'checksumAlgorithm', 'multipartUpload_checksumAlgorithm' - The algorithm that was used to create a checksum of the object.
--
-- 'initiated', 'multipartUpload_initiated' - Date and time at which the multipart upload was initiated.
--
-- 'initiator', 'multipartUpload_initiator' - Identifies who initiated the multipart upload.
--
-- 'key', 'multipartUpload_key' - Key of the object for which the multipart upload was initiated.
--
-- 'owner', 'multipartUpload_owner' - Specifies the owner of the object that is part of the multipart upload.
--
-- 'storageClass', 'multipartUpload_storageClass' - The class of storage used to store the object.
--
-- 'uploadId', 'multipartUpload_uploadId' - Upload ID that identifies the multipart upload.
newMultipartUpload ::
  MultipartUpload
newMultipartUpload :: MultipartUpload
newMultipartUpload =
  MultipartUpload'
    { $sel:checksumAlgorithm:MultipartUpload' :: Maybe ChecksumAlgorithm
checksumAlgorithm =
        forall a. Maybe a
Prelude.Nothing,
      $sel:initiated:MultipartUpload' :: Maybe ISO8601
initiated = forall a. Maybe a
Prelude.Nothing,
      $sel:initiator:MultipartUpload' :: Maybe Initiator
initiator = forall a. Maybe a
Prelude.Nothing,
      $sel:key:MultipartUpload' :: Maybe ObjectKey
key = forall a. Maybe a
Prelude.Nothing,
      $sel:owner:MultipartUpload' :: Maybe Owner
owner = forall a. Maybe a
Prelude.Nothing,
      $sel:storageClass:MultipartUpload' :: Maybe StorageClass
storageClass = forall a. Maybe a
Prelude.Nothing,
      $sel:uploadId:MultipartUpload' :: Maybe Text
uploadId = forall a. Maybe a
Prelude.Nothing
    }

-- | The algorithm that was used to create a checksum of the object.
multipartUpload_checksumAlgorithm :: Lens.Lens' MultipartUpload (Prelude.Maybe ChecksumAlgorithm)
multipartUpload_checksumAlgorithm :: Lens' MultipartUpload (Maybe ChecksumAlgorithm)
multipartUpload_checksumAlgorithm = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe ChecksumAlgorithm
checksumAlgorithm :: Maybe ChecksumAlgorithm
$sel:checksumAlgorithm:MultipartUpload' :: MultipartUpload -> Maybe ChecksumAlgorithm
checksumAlgorithm} -> Maybe ChecksumAlgorithm
checksumAlgorithm) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe ChecksumAlgorithm
a -> MultipartUpload
s {$sel:checksumAlgorithm:MultipartUpload' :: Maybe ChecksumAlgorithm
checksumAlgorithm = Maybe ChecksumAlgorithm
a} :: MultipartUpload)

-- | Date and time at which the multipart upload was initiated.
multipartUpload_initiated :: Lens.Lens' MultipartUpload (Prelude.Maybe Prelude.UTCTime)
multipartUpload_initiated :: Lens' MultipartUpload (Maybe UTCTime)
multipartUpload_initiated = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe ISO8601
initiated :: Maybe ISO8601
$sel:initiated:MultipartUpload' :: MultipartUpload -> Maybe ISO8601
initiated} -> Maybe ISO8601
initiated) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe ISO8601
a -> MultipartUpload
s {$sel:initiated:MultipartUpload' :: Maybe ISO8601
initiated = Maybe ISO8601
a} :: MultipartUpload) 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

-- | Identifies who initiated the multipart upload.
multipartUpload_initiator :: Lens.Lens' MultipartUpload (Prelude.Maybe Initiator)
multipartUpload_initiator :: Lens' MultipartUpload (Maybe Initiator)
multipartUpload_initiator = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe Initiator
initiator :: Maybe Initiator
$sel:initiator:MultipartUpload' :: MultipartUpload -> Maybe Initiator
initiator} -> Maybe Initiator
initiator) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe Initiator
a -> MultipartUpload
s {$sel:initiator:MultipartUpload' :: Maybe Initiator
initiator = Maybe Initiator
a} :: MultipartUpload)

-- | Key of the object for which the multipart upload was initiated.
multipartUpload_key :: Lens.Lens' MultipartUpload (Prelude.Maybe ObjectKey)
multipartUpload_key :: Lens' MultipartUpload (Maybe ObjectKey)
multipartUpload_key = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe ObjectKey
key :: Maybe ObjectKey
$sel:key:MultipartUpload' :: MultipartUpload -> Maybe ObjectKey
key} -> Maybe ObjectKey
key) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe ObjectKey
a -> MultipartUpload
s {$sel:key:MultipartUpload' :: Maybe ObjectKey
key = Maybe ObjectKey
a} :: MultipartUpload)

-- | Specifies the owner of the object that is part of the multipart upload.
multipartUpload_owner :: Lens.Lens' MultipartUpload (Prelude.Maybe Owner)
multipartUpload_owner :: Lens' MultipartUpload (Maybe Owner)
multipartUpload_owner = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe Owner
owner :: Maybe Owner
$sel:owner:MultipartUpload' :: MultipartUpload -> Maybe Owner
owner} -> Maybe Owner
owner) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe Owner
a -> MultipartUpload
s {$sel:owner:MultipartUpload' :: Maybe Owner
owner = Maybe Owner
a} :: MultipartUpload)

-- | The class of storage used to store the object.
multipartUpload_storageClass :: Lens.Lens' MultipartUpload (Prelude.Maybe StorageClass)
multipartUpload_storageClass :: Lens' MultipartUpload (Maybe StorageClass)
multipartUpload_storageClass = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe StorageClass
storageClass :: Maybe StorageClass
$sel:storageClass:MultipartUpload' :: MultipartUpload -> Maybe StorageClass
storageClass} -> Maybe StorageClass
storageClass) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe StorageClass
a -> MultipartUpload
s {$sel:storageClass:MultipartUpload' :: Maybe StorageClass
storageClass = Maybe StorageClass
a} :: MultipartUpload)

-- | Upload ID that identifies the multipart upload.
multipartUpload_uploadId :: Lens.Lens' MultipartUpload (Prelude.Maybe Prelude.Text)
multipartUpload_uploadId :: Lens' MultipartUpload (Maybe Text)
multipartUpload_uploadId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\MultipartUpload' {Maybe Text
uploadId :: Maybe Text
$sel:uploadId:MultipartUpload' :: MultipartUpload -> Maybe Text
uploadId} -> Maybe Text
uploadId) (\s :: MultipartUpload
s@MultipartUpload' {} Maybe Text
a -> MultipartUpload
s {$sel:uploadId:MultipartUpload' :: Maybe Text
uploadId = Maybe Text
a} :: MultipartUpload)

instance Data.FromXML MultipartUpload where
  parseXML :: [Node] -> Either String MultipartUpload
parseXML [Node]
x =
    Maybe ChecksumAlgorithm
-> Maybe ISO8601
-> Maybe Initiator
-> Maybe ObjectKey
-> Maybe Owner
-> Maybe StorageClass
-> Maybe Text
-> MultipartUpload
MultipartUpload'
      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
"ChecksumAlgorithm")
      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
"Initiated")
      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
"Initiator")
      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
"Key")
      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
"Owner")
      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
"StorageClass")
      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
"UploadId")

instance Prelude.Hashable MultipartUpload where
  hashWithSalt :: Int -> MultipartUpload -> Int
hashWithSalt Int
_salt MultipartUpload' {Maybe Text
Maybe ISO8601
Maybe ObjectKey
Maybe ChecksumAlgorithm
Maybe Initiator
Maybe Owner
Maybe StorageClass
uploadId :: Maybe Text
storageClass :: Maybe StorageClass
owner :: Maybe Owner
key :: Maybe ObjectKey
initiator :: Maybe Initiator
initiated :: Maybe ISO8601
checksumAlgorithm :: Maybe ChecksumAlgorithm
$sel:uploadId:MultipartUpload' :: MultipartUpload -> Maybe Text
$sel:storageClass:MultipartUpload' :: MultipartUpload -> Maybe StorageClass
$sel:owner:MultipartUpload' :: MultipartUpload -> Maybe Owner
$sel:key:MultipartUpload' :: MultipartUpload -> Maybe ObjectKey
$sel:initiator:MultipartUpload' :: MultipartUpload -> Maybe Initiator
$sel:initiated:MultipartUpload' :: MultipartUpload -> Maybe ISO8601
$sel:checksumAlgorithm:MultipartUpload' :: MultipartUpload -> Maybe ChecksumAlgorithm
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ChecksumAlgorithm
checksumAlgorithm
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
initiated
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Initiator
initiator
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ObjectKey
key
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Owner
owner
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe StorageClass
storageClass
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
uploadId

instance Prelude.NFData MultipartUpload where
  rnf :: MultipartUpload -> ()
rnf MultipartUpload' {Maybe Text
Maybe ISO8601
Maybe ObjectKey
Maybe ChecksumAlgorithm
Maybe Initiator
Maybe Owner
Maybe StorageClass
uploadId :: Maybe Text
storageClass :: Maybe StorageClass
owner :: Maybe Owner
key :: Maybe ObjectKey
initiator :: Maybe Initiator
initiated :: Maybe ISO8601
checksumAlgorithm :: Maybe ChecksumAlgorithm
$sel:uploadId:MultipartUpload' :: MultipartUpload -> Maybe Text
$sel:storageClass:MultipartUpload' :: MultipartUpload -> Maybe StorageClass
$sel:owner:MultipartUpload' :: MultipartUpload -> Maybe Owner
$sel:key:MultipartUpload' :: MultipartUpload -> Maybe ObjectKey
$sel:initiator:MultipartUpload' :: MultipartUpload -> Maybe Initiator
$sel:initiated:MultipartUpload' :: MultipartUpload -> Maybe ISO8601
$sel:checksumAlgorithm:MultipartUpload' :: MultipartUpload -> Maybe ChecksumAlgorithm
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ChecksumAlgorithm
checksumAlgorithm
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
initiated
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Initiator
initiator
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ObjectKey
key
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Owner
owner
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe StorageClass
storageClass
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
uploadId