{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# 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.GetObjectAcl
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Returns the access control list (ACL) of an object. To use this
-- operation, you must have @s3:GetObjectAcl@ permissions or @READ_ACP@
-- access to the object. For more information, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#acl-access-policy-permission-mapping Mapping of ACL permissions and access policy permissions>
-- in the /Amazon S3 User Guide/
--
-- This action is not supported by Amazon S3 on Outposts.
--
-- __Versioning__
--
-- By default, GET returns ACL information about the current version of an
-- object. To return ACL information about a different version, use the
-- versionId subresource.
--
-- If your bucket uses the bucket owner enforced setting for S3 Object
-- Ownership, requests to read ACLs are still supported and return the
-- @bucket-owner-full-control@ ACL with the owner being the account that
-- created the bucket. For more information, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html Controlling object ownership and disabling ACLs>
-- in the /Amazon S3 User Guide/.
--
-- The following operations are related to @GetObjectAcl@:
--
-- -   <https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html GetObject>
--
-- -   <https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html GetObjectAttributes>
--
-- -   <https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html DeleteObject>
--
-- -   <https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html PutObject>
module Amazonka.S3.GetObjectAcl
  ( -- * Creating a Request
    GetObjectAcl (..),
    newGetObjectAcl,

    -- * Request Lenses
    getObjectAcl_expectedBucketOwner,
    getObjectAcl_requestPayer,
    getObjectAcl_versionId,
    getObjectAcl_bucket,
    getObjectAcl_key,

    -- * Destructuring the Response
    GetObjectAclResponse (..),
    newGetObjectAclResponse,

    -- * Response Lenses
    getObjectAclResponse_grants,
    getObjectAclResponse_owner,
    getObjectAclResponse_requestCharged,
    getObjectAclResponse_httpStatus,
  )
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response
import Amazonka.S3.Types

-- | /See:/ 'newGetObjectAcl' smart constructor.
data GetObjectAcl = GetObjectAcl'
  { -- | The account ID of the expected bucket owner. If the bucket is owned by a
    -- different account, the request fails with the HTTP status code
    -- @403 Forbidden@ (access denied).
    GetObjectAcl -> Maybe Text
expectedBucketOwner :: Prelude.Maybe Prelude.Text,
    GetObjectAcl -> Maybe RequestPayer
requestPayer :: Prelude.Maybe RequestPayer,
    -- | VersionId used to reference a specific version of the object.
    GetObjectAcl -> Maybe ObjectVersionId
versionId :: Prelude.Maybe ObjectVersionId,
    -- | The bucket name that contains the object for which to get the ACL
    -- information.
    --
    -- When using this action with an access point, you must direct requests to
    -- the access point hostname. The access point hostname takes the form
    -- /AccessPointName/-/AccountId/.s3-accesspoint./Region/.amazonaws.com.
    -- When using this action with an access point through the Amazon Web
    -- Services SDKs, you provide the access point ARN in place of the bucket
    -- name. For more information about access point ARNs, see
    -- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html Using access points>
    -- in the /Amazon S3 User Guide/.
    GetObjectAcl -> BucketName
bucket :: BucketName,
    -- | The key of the object for which to get the ACL information.
    GetObjectAcl -> ObjectKey
key :: ObjectKey
  }
  deriving (GetObjectAcl -> GetObjectAcl -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetObjectAcl -> GetObjectAcl -> Bool
$c/= :: GetObjectAcl -> GetObjectAcl -> Bool
== :: GetObjectAcl -> GetObjectAcl -> Bool
$c== :: GetObjectAcl -> GetObjectAcl -> Bool
Prelude.Eq, ReadPrec [GetObjectAcl]
ReadPrec GetObjectAcl
Int -> ReadS GetObjectAcl
ReadS [GetObjectAcl]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetObjectAcl]
$creadListPrec :: ReadPrec [GetObjectAcl]
readPrec :: ReadPrec GetObjectAcl
$creadPrec :: ReadPrec GetObjectAcl
readList :: ReadS [GetObjectAcl]
$creadList :: ReadS [GetObjectAcl]
readsPrec :: Int -> ReadS GetObjectAcl
$creadsPrec :: Int -> ReadS GetObjectAcl
Prelude.Read, Int -> GetObjectAcl -> ShowS
[GetObjectAcl] -> ShowS
GetObjectAcl -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetObjectAcl] -> ShowS
$cshowList :: [GetObjectAcl] -> ShowS
show :: GetObjectAcl -> String
$cshow :: GetObjectAcl -> String
showsPrec :: Int -> GetObjectAcl -> ShowS
$cshowsPrec :: Int -> GetObjectAcl -> ShowS
Prelude.Show, forall x. Rep GetObjectAcl x -> GetObjectAcl
forall x. GetObjectAcl -> Rep GetObjectAcl x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetObjectAcl x -> GetObjectAcl
$cfrom :: forall x. GetObjectAcl -> Rep GetObjectAcl x
Prelude.Generic)

-- |
-- Create a value of 'GetObjectAcl' 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:
--
-- 'expectedBucketOwner', 'getObjectAcl_expectedBucketOwner' - The account ID of the expected bucket owner. If the bucket is owned by a
-- different account, the request fails with the HTTP status code
-- @403 Forbidden@ (access denied).
--
-- 'requestPayer', 'getObjectAcl_requestPayer' - Undocumented member.
--
-- 'versionId', 'getObjectAcl_versionId' - VersionId used to reference a specific version of the object.
--
-- 'bucket', 'getObjectAcl_bucket' - The bucket name that contains the object for which to get the ACL
-- information.
--
-- When using this action with an access point, you must direct requests to
-- the access point hostname. The access point hostname takes the form
-- /AccessPointName/-/AccountId/.s3-accesspoint./Region/.amazonaws.com.
-- When using this action with an access point through the Amazon Web
-- Services SDKs, you provide the access point ARN in place of the bucket
-- name. For more information about access point ARNs, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html Using access points>
-- in the /Amazon S3 User Guide/.
--
-- 'key', 'getObjectAcl_key' - The key of the object for which to get the ACL information.
newGetObjectAcl ::
  -- | 'bucket'
  BucketName ->
  -- | 'key'
  ObjectKey ->
  GetObjectAcl
newGetObjectAcl :: BucketName -> ObjectKey -> GetObjectAcl
newGetObjectAcl BucketName
pBucket_ ObjectKey
pKey_ =
  GetObjectAcl'
    { $sel:expectedBucketOwner:GetObjectAcl' :: Maybe Text
expectedBucketOwner =
        forall a. Maybe a
Prelude.Nothing,
      $sel:requestPayer:GetObjectAcl' :: Maybe RequestPayer
requestPayer = forall a. Maybe a
Prelude.Nothing,
      $sel:versionId:GetObjectAcl' :: Maybe ObjectVersionId
versionId = forall a. Maybe a
Prelude.Nothing,
      $sel:bucket:GetObjectAcl' :: BucketName
bucket = BucketName
pBucket_,
      $sel:key:GetObjectAcl' :: ObjectKey
key = ObjectKey
pKey_
    }

-- | The account ID of the expected bucket owner. If the bucket is owned by a
-- different account, the request fails with the HTTP status code
-- @403 Forbidden@ (access denied).
getObjectAcl_expectedBucketOwner :: Lens.Lens' GetObjectAcl (Prelude.Maybe Prelude.Text)
getObjectAcl_expectedBucketOwner :: Lens' GetObjectAcl (Maybe Text)
getObjectAcl_expectedBucketOwner = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAcl' {Maybe Text
expectedBucketOwner :: Maybe Text
$sel:expectedBucketOwner:GetObjectAcl' :: GetObjectAcl -> Maybe Text
expectedBucketOwner} -> Maybe Text
expectedBucketOwner) (\s :: GetObjectAcl
s@GetObjectAcl' {} Maybe Text
a -> GetObjectAcl
s {$sel:expectedBucketOwner:GetObjectAcl' :: Maybe Text
expectedBucketOwner = Maybe Text
a} :: GetObjectAcl)

-- | Undocumented member.
getObjectAcl_requestPayer :: Lens.Lens' GetObjectAcl (Prelude.Maybe RequestPayer)
getObjectAcl_requestPayer :: Lens' GetObjectAcl (Maybe RequestPayer)
getObjectAcl_requestPayer = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAcl' {Maybe RequestPayer
requestPayer :: Maybe RequestPayer
$sel:requestPayer:GetObjectAcl' :: GetObjectAcl -> Maybe RequestPayer
requestPayer} -> Maybe RequestPayer
requestPayer) (\s :: GetObjectAcl
s@GetObjectAcl' {} Maybe RequestPayer
a -> GetObjectAcl
s {$sel:requestPayer:GetObjectAcl' :: Maybe RequestPayer
requestPayer = Maybe RequestPayer
a} :: GetObjectAcl)

-- | VersionId used to reference a specific version of the object.
getObjectAcl_versionId :: Lens.Lens' GetObjectAcl (Prelude.Maybe ObjectVersionId)
getObjectAcl_versionId :: Lens' GetObjectAcl (Maybe ObjectVersionId)
getObjectAcl_versionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAcl' {Maybe ObjectVersionId
versionId :: Maybe ObjectVersionId
$sel:versionId:GetObjectAcl' :: GetObjectAcl -> Maybe ObjectVersionId
versionId} -> Maybe ObjectVersionId
versionId) (\s :: GetObjectAcl
s@GetObjectAcl' {} Maybe ObjectVersionId
a -> GetObjectAcl
s {$sel:versionId:GetObjectAcl' :: Maybe ObjectVersionId
versionId = Maybe ObjectVersionId
a} :: GetObjectAcl)

-- | The bucket name that contains the object for which to get the ACL
-- information.
--
-- When using this action with an access point, you must direct requests to
-- the access point hostname. The access point hostname takes the form
-- /AccessPointName/-/AccountId/.s3-accesspoint./Region/.amazonaws.com.
-- When using this action with an access point through the Amazon Web
-- Services SDKs, you provide the access point ARN in place of the bucket
-- name. For more information about access point ARNs, see
-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-access-points.html Using access points>
-- in the /Amazon S3 User Guide/.
getObjectAcl_bucket :: Lens.Lens' GetObjectAcl BucketName
getObjectAcl_bucket :: Lens' GetObjectAcl BucketName
getObjectAcl_bucket = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAcl' {BucketName
bucket :: BucketName
$sel:bucket:GetObjectAcl' :: GetObjectAcl -> BucketName
bucket} -> BucketName
bucket) (\s :: GetObjectAcl
s@GetObjectAcl' {} BucketName
a -> GetObjectAcl
s {$sel:bucket:GetObjectAcl' :: BucketName
bucket = BucketName
a} :: GetObjectAcl)

-- | The key of the object for which to get the ACL information.
getObjectAcl_key :: Lens.Lens' GetObjectAcl ObjectKey
getObjectAcl_key :: Lens' GetObjectAcl ObjectKey
getObjectAcl_key = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAcl' {ObjectKey
key :: ObjectKey
$sel:key:GetObjectAcl' :: GetObjectAcl -> ObjectKey
key} -> ObjectKey
key) (\s :: GetObjectAcl
s@GetObjectAcl' {} ObjectKey
a -> GetObjectAcl
s {$sel:key:GetObjectAcl' :: ObjectKey
key = ObjectKey
a} :: GetObjectAcl)

instance Core.AWSRequest GetObjectAcl where
  type AWSResponse GetObjectAcl = GetObjectAclResponse
  request :: (Service -> Service) -> GetObjectAcl -> Request GetObjectAcl
request Service -> Service
overrides =
    forall a. Request a -> Request a
Request.s3vhost
      forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetObjectAcl
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetObjectAcl)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXML
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe [Grant]
-> Maybe Owner
-> Maybe RequestCharged
-> Int
-> GetObjectAclResponse
GetObjectAclResponse'
            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
"AccessControlList"
                            forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                            forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"Grant")
                        )
            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.<*> (ResponseHeaders
h forall a.
FromText a =>
ResponseHeaders -> HeaderName -> Either String (Maybe a)
Data..#? HeaderName
"x-amz-request-charged")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable GetObjectAcl where
  hashWithSalt :: Int -> GetObjectAcl -> Int
hashWithSalt Int
_salt GetObjectAcl' {Maybe Text
Maybe ObjectVersionId
Maybe RequestPayer
ObjectKey
BucketName
key :: ObjectKey
bucket :: BucketName
versionId :: Maybe ObjectVersionId
requestPayer :: Maybe RequestPayer
expectedBucketOwner :: Maybe Text
$sel:key:GetObjectAcl' :: GetObjectAcl -> ObjectKey
$sel:bucket:GetObjectAcl' :: GetObjectAcl -> BucketName
$sel:versionId:GetObjectAcl' :: GetObjectAcl -> Maybe ObjectVersionId
$sel:requestPayer:GetObjectAcl' :: GetObjectAcl -> Maybe RequestPayer
$sel:expectedBucketOwner:GetObjectAcl' :: GetObjectAcl -> Maybe Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
expectedBucketOwner
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe RequestPayer
requestPayer
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ObjectVersionId
versionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` BucketName
bucket
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` ObjectKey
key

instance Prelude.NFData GetObjectAcl where
  rnf :: GetObjectAcl -> ()
rnf GetObjectAcl' {Maybe Text
Maybe ObjectVersionId
Maybe RequestPayer
ObjectKey
BucketName
key :: ObjectKey
bucket :: BucketName
versionId :: Maybe ObjectVersionId
requestPayer :: Maybe RequestPayer
expectedBucketOwner :: Maybe Text
$sel:key:GetObjectAcl' :: GetObjectAcl -> ObjectKey
$sel:bucket:GetObjectAcl' :: GetObjectAcl -> BucketName
$sel:versionId:GetObjectAcl' :: GetObjectAcl -> Maybe ObjectVersionId
$sel:requestPayer:GetObjectAcl' :: GetObjectAcl -> Maybe RequestPayer
$sel:expectedBucketOwner:GetObjectAcl' :: GetObjectAcl -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
expectedBucketOwner
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe RequestPayer
requestPayer
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe ObjectVersionId
versionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf BucketName
bucket
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf ObjectKey
key

instance Data.ToHeaders GetObjectAcl where
  toHeaders :: GetObjectAcl -> ResponseHeaders
toHeaders GetObjectAcl' {Maybe Text
Maybe ObjectVersionId
Maybe RequestPayer
ObjectKey
BucketName
key :: ObjectKey
bucket :: BucketName
versionId :: Maybe ObjectVersionId
requestPayer :: Maybe RequestPayer
expectedBucketOwner :: Maybe Text
$sel:key:GetObjectAcl' :: GetObjectAcl -> ObjectKey
$sel:bucket:GetObjectAcl' :: GetObjectAcl -> BucketName
$sel:versionId:GetObjectAcl' :: GetObjectAcl -> Maybe ObjectVersionId
$sel:requestPayer:GetObjectAcl' :: GetObjectAcl -> Maybe RequestPayer
$sel:expectedBucketOwner:GetObjectAcl' :: GetObjectAcl -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ HeaderName
"x-amz-expected-bucket-owner"
          forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe Text
expectedBucketOwner,
        HeaderName
"x-amz-request-payer" forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# Maybe RequestPayer
requestPayer
      ]

instance Data.ToPath GetObjectAcl where
  toPath :: GetObjectAcl -> ByteString
toPath GetObjectAcl' {Maybe Text
Maybe ObjectVersionId
Maybe RequestPayer
ObjectKey
BucketName
key :: ObjectKey
bucket :: BucketName
versionId :: Maybe ObjectVersionId
requestPayer :: Maybe RequestPayer
expectedBucketOwner :: Maybe Text
$sel:key:GetObjectAcl' :: GetObjectAcl -> ObjectKey
$sel:bucket:GetObjectAcl' :: GetObjectAcl -> BucketName
$sel:versionId:GetObjectAcl' :: GetObjectAcl -> Maybe ObjectVersionId
$sel:requestPayer:GetObjectAcl' :: GetObjectAcl -> Maybe RequestPayer
$sel:expectedBucketOwner:GetObjectAcl' :: GetObjectAcl -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/", forall a. ToByteString a => a -> ByteString
Data.toBS BucketName
bucket, ByteString
"/", forall a. ToByteString a => a -> ByteString
Data.toBS ObjectKey
key]

instance Data.ToQuery GetObjectAcl where
  toQuery :: GetObjectAcl -> QueryString
toQuery GetObjectAcl' {Maybe Text
Maybe ObjectVersionId
Maybe RequestPayer
ObjectKey
BucketName
key :: ObjectKey
bucket :: BucketName
versionId :: Maybe ObjectVersionId
requestPayer :: Maybe RequestPayer
expectedBucketOwner :: Maybe Text
$sel:key:GetObjectAcl' :: GetObjectAcl -> ObjectKey
$sel:bucket:GetObjectAcl' :: GetObjectAcl -> BucketName
$sel:versionId:GetObjectAcl' :: GetObjectAcl -> Maybe ObjectVersionId
$sel:requestPayer:GetObjectAcl' :: GetObjectAcl -> Maybe RequestPayer
$sel:expectedBucketOwner:GetObjectAcl' :: GetObjectAcl -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"versionId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe ObjectVersionId
versionId, QueryString
"acl"]

-- | /See:/ 'newGetObjectAclResponse' smart constructor.
data GetObjectAclResponse = GetObjectAclResponse'
  { -- | A list of grants.
    GetObjectAclResponse -> Maybe [Grant]
grants :: Prelude.Maybe [Grant],
    -- | Container for the bucket owner\'s display name and ID.
    GetObjectAclResponse -> Maybe Owner
owner :: Prelude.Maybe Owner,
    GetObjectAclResponse -> Maybe RequestCharged
requestCharged :: Prelude.Maybe RequestCharged,
    -- | The response's http status code.
    GetObjectAclResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetObjectAclResponse -> GetObjectAclResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetObjectAclResponse -> GetObjectAclResponse -> Bool
$c/= :: GetObjectAclResponse -> GetObjectAclResponse -> Bool
== :: GetObjectAclResponse -> GetObjectAclResponse -> Bool
$c== :: GetObjectAclResponse -> GetObjectAclResponse -> Bool
Prelude.Eq, ReadPrec [GetObjectAclResponse]
ReadPrec GetObjectAclResponse
Int -> ReadS GetObjectAclResponse
ReadS [GetObjectAclResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetObjectAclResponse]
$creadListPrec :: ReadPrec [GetObjectAclResponse]
readPrec :: ReadPrec GetObjectAclResponse
$creadPrec :: ReadPrec GetObjectAclResponse
readList :: ReadS [GetObjectAclResponse]
$creadList :: ReadS [GetObjectAclResponse]
readsPrec :: Int -> ReadS GetObjectAclResponse
$creadsPrec :: Int -> ReadS GetObjectAclResponse
Prelude.Read, Int -> GetObjectAclResponse -> ShowS
[GetObjectAclResponse] -> ShowS
GetObjectAclResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetObjectAclResponse] -> ShowS
$cshowList :: [GetObjectAclResponse] -> ShowS
show :: GetObjectAclResponse -> String
$cshow :: GetObjectAclResponse -> String
showsPrec :: Int -> GetObjectAclResponse -> ShowS
$cshowsPrec :: Int -> GetObjectAclResponse -> ShowS
Prelude.Show, forall x. Rep GetObjectAclResponse x -> GetObjectAclResponse
forall x. GetObjectAclResponse -> Rep GetObjectAclResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetObjectAclResponse x -> GetObjectAclResponse
$cfrom :: forall x. GetObjectAclResponse -> Rep GetObjectAclResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetObjectAclResponse' 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:
--
-- 'grants', 'getObjectAclResponse_grants' - A list of grants.
--
-- 'owner', 'getObjectAclResponse_owner' - Container for the bucket owner\'s display name and ID.
--
-- 'requestCharged', 'getObjectAclResponse_requestCharged' - Undocumented member.
--
-- 'httpStatus', 'getObjectAclResponse_httpStatus' - The response's http status code.
newGetObjectAclResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetObjectAclResponse
newGetObjectAclResponse :: Int -> GetObjectAclResponse
newGetObjectAclResponse Int
pHttpStatus_ =
  GetObjectAclResponse'
    { $sel:grants:GetObjectAclResponse' :: Maybe [Grant]
grants = forall a. Maybe a
Prelude.Nothing,
      $sel:owner:GetObjectAclResponse' :: Maybe Owner
owner = forall a. Maybe a
Prelude.Nothing,
      $sel:requestCharged:GetObjectAclResponse' :: Maybe RequestCharged
requestCharged = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:GetObjectAclResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | A list of grants.
getObjectAclResponse_grants :: Lens.Lens' GetObjectAclResponse (Prelude.Maybe [Grant])
getObjectAclResponse_grants :: Lens' GetObjectAclResponse (Maybe [Grant])
getObjectAclResponse_grants = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAclResponse' {Maybe [Grant]
grants :: Maybe [Grant]
$sel:grants:GetObjectAclResponse' :: GetObjectAclResponse -> Maybe [Grant]
grants} -> Maybe [Grant]
grants) (\s :: GetObjectAclResponse
s@GetObjectAclResponse' {} Maybe [Grant]
a -> GetObjectAclResponse
s {$sel:grants:GetObjectAclResponse' :: Maybe [Grant]
grants = Maybe [Grant]
a} :: GetObjectAclResponse) 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 s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

-- | Container for the bucket owner\'s display name and ID.
getObjectAclResponse_owner :: Lens.Lens' GetObjectAclResponse (Prelude.Maybe Owner)
getObjectAclResponse_owner :: Lens' GetObjectAclResponse (Maybe Owner)
getObjectAclResponse_owner = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAclResponse' {Maybe Owner
owner :: Maybe Owner
$sel:owner:GetObjectAclResponse' :: GetObjectAclResponse -> Maybe Owner
owner} -> Maybe Owner
owner) (\s :: GetObjectAclResponse
s@GetObjectAclResponse' {} Maybe Owner
a -> GetObjectAclResponse
s {$sel:owner:GetObjectAclResponse' :: Maybe Owner
owner = Maybe Owner
a} :: GetObjectAclResponse)

-- | Undocumented member.
getObjectAclResponse_requestCharged :: Lens.Lens' GetObjectAclResponse (Prelude.Maybe RequestCharged)
getObjectAclResponse_requestCharged :: Lens' GetObjectAclResponse (Maybe RequestCharged)
getObjectAclResponse_requestCharged = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAclResponse' {Maybe RequestCharged
requestCharged :: Maybe RequestCharged
$sel:requestCharged:GetObjectAclResponse' :: GetObjectAclResponse -> Maybe RequestCharged
requestCharged} -> Maybe RequestCharged
requestCharged) (\s :: GetObjectAclResponse
s@GetObjectAclResponse' {} Maybe RequestCharged
a -> GetObjectAclResponse
s {$sel:requestCharged:GetObjectAclResponse' :: Maybe RequestCharged
requestCharged = Maybe RequestCharged
a} :: GetObjectAclResponse)

-- | The response's http status code.
getObjectAclResponse_httpStatus :: Lens.Lens' GetObjectAclResponse Prelude.Int
getObjectAclResponse_httpStatus :: Lens' GetObjectAclResponse Int
getObjectAclResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetObjectAclResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetObjectAclResponse' :: GetObjectAclResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetObjectAclResponse
s@GetObjectAclResponse' {} Int
a -> GetObjectAclResponse
s {$sel:httpStatus:GetObjectAclResponse' :: Int
httpStatus = Int
a} :: GetObjectAclResponse)

instance Prelude.NFData GetObjectAclResponse where
  rnf :: GetObjectAclResponse -> ()
rnf GetObjectAclResponse' {Int
Maybe [Grant]
Maybe Owner
Maybe RequestCharged
httpStatus :: Int
requestCharged :: Maybe RequestCharged
owner :: Maybe Owner
grants :: Maybe [Grant]
$sel:httpStatus:GetObjectAclResponse' :: GetObjectAclResponse -> Int
$sel:requestCharged:GetObjectAclResponse' :: GetObjectAclResponse -> Maybe RequestCharged
$sel:owner:GetObjectAclResponse' :: GetObjectAclResponse -> Maybe Owner
$sel:grants:GetObjectAclResponse' :: GetObjectAclResponse -> Maybe [Grant]
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe [Grant]
grants
      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 RequestCharged
requestCharged
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus