amazonka-s3-1.3.7: gen/Network/AWS/S3/GetObject.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-- Derived from AWS service descriptions, licensed under Apache 2.0.
-- |
-- Module : Network.AWS.S3.GetObject
-- Copyright : (c) 2013-2015 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves objects from Amazon S3.
--
-- /See:/ <http://docs.aws.amazon.com/AmazonS3/latest/API/GetObject.html AWS API Reference> for GetObject.
module Network.AWS.S3.GetObject
(
-- * Creating a Request
getObject
, GetObject
-- * Request Lenses
, goIfMatch
, goVersionId
, goResponseContentType
, goResponseContentDisposition
, goResponseContentLanguage
, goSSECustomerAlgorithm
, goSSECustomerKey
, goRequestPayer
, goResponseContentEncoding
, goIfModifiedSince
, goRange
, goIfUnmodifiedSince
, goSSECustomerKeyMD5
, goResponseCacheControl
, goResponseExpires
, goIfNoneMatch
, goBucket
, goKey
-- * Destructuring the Response
, getObjectResponse
, GetObjectResponse
-- * Response Lenses
, gorsRequestCharged
, gorsETag
, gorsVersionId
, gorsContentLength
, gorsExpires
, gorsRestore
, gorsExpiration
, gorsDeleteMarker
, gorsSSECustomerAlgorithm
, gorsMissingMeta
, gorsWebsiteRedirectLocation
, gorsAcceptRanges
, gorsStorageClass
, gorsSSECustomerKeyMD5
, gorsSSEKMSKeyId
, gorsContentEncoding
, gorsMetadata
, gorsReplicationStatus
, gorsCacheControl
, gorsContentLanguage
, gorsLastModified
, gorsContentDisposition
, gorsContentRange
, gorsServerSideEncryption
, gorsContentType
, gorsResponseStatus
, gorsBody
) where
import Network.AWS.Lens
import Network.AWS.Prelude
import Network.AWS.Request
import Network.AWS.Response
import Network.AWS.S3.Types
import Network.AWS.S3.Types.Product
-- | /See:/ 'getObject' smart constructor.
data GetObject = GetObject'
{ _goIfMatch :: !(Maybe Text)
, _goVersionId :: !(Maybe ObjectVersionId)
, _goResponseContentType :: !(Maybe Text)
, _goResponseContentDisposition :: !(Maybe Text)
, _goResponseContentLanguage :: !(Maybe Text)
, _goSSECustomerAlgorithm :: !(Maybe Text)
, _goSSECustomerKey :: !(Maybe (Sensitive Text))
, _goRequestPayer :: !(Maybe RequestPayer)
, _goResponseContentEncoding :: !(Maybe Text)
, _goIfModifiedSince :: !(Maybe RFC822)
, _goRange :: !(Maybe Text)
, _goIfUnmodifiedSince :: !(Maybe RFC822)
, _goSSECustomerKeyMD5 :: !(Maybe Text)
, _goResponseCacheControl :: !(Maybe Text)
, _goResponseExpires :: !(Maybe RFC822)
, _goIfNoneMatch :: !(Maybe Text)
, _goBucket :: !BucketName
, _goKey :: !ObjectKey
} deriving (Eq,Read,Show,Data,Typeable,Generic)
-- | Creates a value of 'GetObject' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'goIfMatch'
--
-- * 'goVersionId'
--
-- * 'goResponseContentType'
--
-- * 'goResponseContentDisposition'
--
-- * 'goResponseContentLanguage'
--
-- * 'goSSECustomerAlgorithm'
--
-- * 'goSSECustomerKey'
--
-- * 'goRequestPayer'
--
-- * 'goResponseContentEncoding'
--
-- * 'goIfModifiedSince'
--
-- * 'goRange'
--
-- * 'goIfUnmodifiedSince'
--
-- * 'goSSECustomerKeyMD5'
--
-- * 'goResponseCacheControl'
--
-- * 'goResponseExpires'
--
-- * 'goIfNoneMatch'
--
-- * 'goBucket'
--
-- * 'goKey'
getObject
:: BucketName -- ^ 'goBucket'
-> ObjectKey -- ^ 'goKey'
-> GetObject
getObject pBucket_ pKey_ =
GetObject'
{ _goIfMatch = Nothing
, _goVersionId = Nothing
, _goResponseContentType = Nothing
, _goResponseContentDisposition = Nothing
, _goResponseContentLanguage = Nothing
, _goSSECustomerAlgorithm = Nothing
, _goSSECustomerKey = Nothing
, _goRequestPayer = Nothing
, _goResponseContentEncoding = Nothing
, _goIfModifiedSince = Nothing
, _goRange = Nothing
, _goIfUnmodifiedSince = Nothing
, _goSSECustomerKeyMD5 = Nothing
, _goResponseCacheControl = Nothing
, _goResponseExpires = Nothing
, _goIfNoneMatch = Nothing
, _goBucket = pBucket_
, _goKey = pKey_
}
-- | Return the object only if its entity tag (ETag) is the same as the one
-- specified, otherwise return a 412 (precondition failed).
goIfMatch :: Lens' GetObject (Maybe Text)
goIfMatch = lens _goIfMatch (\ s a -> s{_goIfMatch = a});
-- | VersionId used to reference a specific version of the object.
goVersionId :: Lens' GetObject (Maybe ObjectVersionId)
goVersionId = lens _goVersionId (\ s a -> s{_goVersionId = a});
-- | Sets the Content-Type header of the response.
goResponseContentType :: Lens' GetObject (Maybe Text)
goResponseContentType = lens _goResponseContentType (\ s a -> s{_goResponseContentType = a});
-- | Sets the Content-Disposition header of the response
goResponseContentDisposition :: Lens' GetObject (Maybe Text)
goResponseContentDisposition = lens _goResponseContentDisposition (\ s a -> s{_goResponseContentDisposition = a});
-- | Sets the Content-Language header of the response.
goResponseContentLanguage :: Lens' GetObject (Maybe Text)
goResponseContentLanguage = lens _goResponseContentLanguage (\ s a -> s{_goResponseContentLanguage = a});
-- | Specifies the algorithm to use to when encrypting the object (e.g.,
-- AES256).
goSSECustomerAlgorithm :: Lens' GetObject (Maybe Text)
goSSECustomerAlgorithm = lens _goSSECustomerAlgorithm (\ s a -> s{_goSSECustomerAlgorithm = a});
-- | Specifies the customer-provided encryption key for Amazon S3 to use in
-- encrypting data. This value is used to store the object and then it is
-- discarded; Amazon does not store the encryption key. The key must be
-- appropriate for use with the algorithm specified in the
-- x-amz-server-side-encryption-customer-algorithm header.
goSSECustomerKey :: Lens' GetObject (Maybe Text)
goSSECustomerKey = lens _goSSECustomerKey (\ s a -> s{_goSSECustomerKey = a}) . mapping _Sensitive;
-- | Undocumented member.
goRequestPayer :: Lens' GetObject (Maybe RequestPayer)
goRequestPayer = lens _goRequestPayer (\ s a -> s{_goRequestPayer = a});
-- | Sets the Content-Encoding header of the response.
goResponseContentEncoding :: Lens' GetObject (Maybe Text)
goResponseContentEncoding = lens _goResponseContentEncoding (\ s a -> s{_goResponseContentEncoding = a});
-- | Return the object only if it has been modified since the specified time,
-- otherwise return a 304 (not modified).
goIfModifiedSince :: Lens' GetObject (Maybe UTCTime)
goIfModifiedSince = lens _goIfModifiedSince (\ s a -> s{_goIfModifiedSince = a}) . mapping _Time;
-- | Downloads the specified range bytes of an object. For more information
-- about the HTTP Range header, go to
-- http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec14.html#sec14.35.
goRange :: Lens' GetObject (Maybe Text)
goRange = lens _goRange (\ s a -> s{_goRange = a});
-- | Return the object only if it has not been modified since the specified
-- time, otherwise return a 412 (precondition failed).
goIfUnmodifiedSince :: Lens' GetObject (Maybe UTCTime)
goIfUnmodifiedSince = lens _goIfUnmodifiedSince (\ s a -> s{_goIfUnmodifiedSince = a}) . mapping _Time;
-- | Specifies the 128-bit MD5 digest of the encryption key according to RFC
-- 1321. Amazon S3 uses this header for a message integrity check to ensure
-- the encryption key was transmitted without error.
goSSECustomerKeyMD5 :: Lens' GetObject (Maybe Text)
goSSECustomerKeyMD5 = lens _goSSECustomerKeyMD5 (\ s a -> s{_goSSECustomerKeyMD5 = a});
-- | Sets the Cache-Control header of the response.
goResponseCacheControl :: Lens' GetObject (Maybe Text)
goResponseCacheControl = lens _goResponseCacheControl (\ s a -> s{_goResponseCacheControl = a});
-- | Sets the Expires header of the response.
goResponseExpires :: Lens' GetObject (Maybe UTCTime)
goResponseExpires = lens _goResponseExpires (\ s a -> s{_goResponseExpires = a}) . mapping _Time;
-- | Return the object only if its entity tag (ETag) is different from the
-- one specified, otherwise return a 304 (not modified).
goIfNoneMatch :: Lens' GetObject (Maybe Text)
goIfNoneMatch = lens _goIfNoneMatch (\ s a -> s{_goIfNoneMatch = a});
-- | Undocumented member.
goBucket :: Lens' GetObject BucketName
goBucket = lens _goBucket (\ s a -> s{_goBucket = a});
-- | Undocumented member.
goKey :: Lens' GetObject ObjectKey
goKey = lens _goKey (\ s a -> s{_goKey = a});
instance AWSRequest GetObject where
type Rs GetObject = GetObjectResponse
request = get s3
response
= receiveBody
(\ s h x ->
GetObjectResponse' <$>
(h .#? "x-amz-request-charged") <*> (h .#? "ETag")
<*> (h .#? "x-amz-version-id")
<*> (h .#? "Content-Length")
<*> (h .#? "Expires")
<*> (h .#? "x-amz-restore")
<*> (h .#? "x-amz-expiration")
<*> (h .#? "x-amz-delete-marker")
<*>
(h .#?
"x-amz-server-side-encryption-customer-algorithm")
<*> (h .#? "x-amz-missing-meta")
<*> (h .#? "x-amz-website-redirect-location")
<*> (h .#? "accept-ranges")
<*> (h .#? "x-amz-storage-class")
<*>
(h .#?
"x-amz-server-side-encryption-customer-key-MD5")
<*>
(h .#? "x-amz-server-side-encryption-aws-kms-key-id")
<*> (h .#? "Content-Encoding")
<*> (parseHeadersMap "x-amz-meta-" h)
<*> (h .#? "x-amz-replication-status")
<*> (h .#? "Cache-Control")
<*> (h .#? "Content-Language")
<*> (h .#? "Last-Modified")
<*> (h .#? "Content-Disposition")
<*> (h .#? "Content-Range")
<*> (h .#? "x-amz-server-side-encryption")
<*> (h .#? "Content-Type")
<*> (pure (fromEnum s))
<*> (pure x))
instance ToHeaders GetObject where
toHeaders GetObject'{..}
= mconcat
["If-Match" =# _goIfMatch,
"x-amz-server-side-encryption-customer-algorithm" =#
_goSSECustomerAlgorithm,
"x-amz-server-side-encryption-customer-key" =#
_goSSECustomerKey,
"x-amz-request-payer" =# _goRequestPayer,
"If-Modified-Since" =# _goIfModifiedSince,
"Range" =# _goRange,
"If-Unmodified-Since" =# _goIfUnmodifiedSince,
"x-amz-server-side-encryption-customer-key-MD5" =#
_goSSECustomerKeyMD5,
"If-None-Match" =# _goIfNoneMatch]
instance ToPath GetObject where
toPath GetObject'{..}
= mconcat ["/", toBS _goBucket, "/", toBS _goKey]
instance ToQuery GetObject where
toQuery GetObject'{..}
= mconcat
["versionId" =: _goVersionId,
"response-content-type" =: _goResponseContentType,
"response-content-disposition" =:
_goResponseContentDisposition,
"response-content-language" =:
_goResponseContentLanguage,
"response-content-encoding" =:
_goResponseContentEncoding,
"response-cache-control" =: _goResponseCacheControl,
"response-expires" =: _goResponseExpires]
-- | /See:/ 'getObjectResponse' smart constructor.
data GetObjectResponse = GetObjectResponse'
{ _gorsRequestCharged :: !(Maybe RequestCharged)
, _gorsETag :: !(Maybe ETag)
, _gorsVersionId :: !(Maybe ObjectVersionId)
, _gorsContentLength :: !(Maybe Int)
, _gorsExpires :: !(Maybe RFC822)
, _gorsRestore :: !(Maybe Text)
, _gorsExpiration :: !(Maybe Text)
, _gorsDeleteMarker :: !(Maybe Bool)
, _gorsSSECustomerAlgorithm :: !(Maybe Text)
, _gorsMissingMeta :: !(Maybe Int)
, _gorsWebsiteRedirectLocation :: !(Maybe Text)
, _gorsAcceptRanges :: !(Maybe Text)
, _gorsStorageClass :: !(Maybe StorageClass)
, _gorsSSECustomerKeyMD5 :: !(Maybe Text)
, _gorsSSEKMSKeyId :: !(Maybe (Sensitive Text))
, _gorsContentEncoding :: !(Maybe Text)
, _gorsMetadata :: !(Map Text Text)
, _gorsReplicationStatus :: !(Maybe ReplicationStatus)
, _gorsCacheControl :: !(Maybe Text)
, _gorsContentLanguage :: !(Maybe Text)
, _gorsLastModified :: !(Maybe RFC822)
, _gorsContentDisposition :: !(Maybe Text)
, _gorsContentRange :: !(Maybe Text)
, _gorsServerSideEncryption :: !(Maybe ServerSideEncryption)
, _gorsContentType :: !(Maybe Text)
, _gorsResponseStatus :: !Int
, _gorsBody :: !RsBody
} deriving (Show,Generic)
-- | Creates a value of 'GetObjectResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gorsRequestCharged'
--
-- * 'gorsETag'
--
-- * 'gorsVersionId'
--
-- * 'gorsContentLength'
--
-- * 'gorsExpires'
--
-- * 'gorsRestore'
--
-- * 'gorsExpiration'
--
-- * 'gorsDeleteMarker'
--
-- * 'gorsSSECustomerAlgorithm'
--
-- * 'gorsMissingMeta'
--
-- * 'gorsWebsiteRedirectLocation'
--
-- * 'gorsAcceptRanges'
--
-- * 'gorsStorageClass'
--
-- * 'gorsSSECustomerKeyMD5'
--
-- * 'gorsSSEKMSKeyId'
--
-- * 'gorsContentEncoding'
--
-- * 'gorsMetadata'
--
-- * 'gorsReplicationStatus'
--
-- * 'gorsCacheControl'
--
-- * 'gorsContentLanguage'
--
-- * 'gorsLastModified'
--
-- * 'gorsContentDisposition'
--
-- * 'gorsContentRange'
--
-- * 'gorsServerSideEncryption'
--
-- * 'gorsContentType'
--
-- * 'gorsResponseStatus'
--
-- * 'gorsBody'
getObjectResponse
:: Int -- ^ 'gorsResponseStatus'
-> RsBody -- ^ 'gorsBody'
-> GetObjectResponse
getObjectResponse pResponseStatus_ pBody_ =
GetObjectResponse'
{ _gorsRequestCharged = Nothing
, _gorsETag = Nothing
, _gorsVersionId = Nothing
, _gorsContentLength = Nothing
, _gorsExpires = Nothing
, _gorsRestore = Nothing
, _gorsExpiration = Nothing
, _gorsDeleteMarker = Nothing
, _gorsSSECustomerAlgorithm = Nothing
, _gorsMissingMeta = Nothing
, _gorsWebsiteRedirectLocation = Nothing
, _gorsAcceptRanges = Nothing
, _gorsStorageClass = Nothing
, _gorsSSECustomerKeyMD5 = Nothing
, _gorsSSEKMSKeyId = Nothing
, _gorsContentEncoding = Nothing
, _gorsMetadata = mempty
, _gorsReplicationStatus = Nothing
, _gorsCacheControl = Nothing
, _gorsContentLanguage = Nothing
, _gorsLastModified = Nothing
, _gorsContentDisposition = Nothing
, _gorsContentRange = Nothing
, _gorsServerSideEncryption = Nothing
, _gorsContentType = Nothing
, _gorsResponseStatus = pResponseStatus_
, _gorsBody = pBody_
}
-- | Undocumented member.
gorsRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged)
gorsRequestCharged = lens _gorsRequestCharged (\ s a -> s{_gorsRequestCharged = a});
-- | An ETag is an opaque identifier assigned by a web server to a specific
-- version of a resource found at a URL
gorsETag :: Lens' GetObjectResponse (Maybe ETag)
gorsETag = lens _gorsETag (\ s a -> s{_gorsETag = a});
-- | Version of the object.
gorsVersionId :: Lens' GetObjectResponse (Maybe ObjectVersionId)
gorsVersionId = lens _gorsVersionId (\ s a -> s{_gorsVersionId = a});
-- | Size of the body in bytes.
gorsContentLength :: Lens' GetObjectResponse (Maybe Int)
gorsContentLength = lens _gorsContentLength (\ s a -> s{_gorsContentLength = a});
-- | The date and time at which the object is no longer cacheable.
gorsExpires :: Lens' GetObjectResponse (Maybe UTCTime)
gorsExpires = lens _gorsExpires (\ s a -> s{_gorsExpires = a}) . mapping _Time;
-- | Provides information about object restoration operation and expiration
-- time of the restored object copy.
gorsRestore :: Lens' GetObjectResponse (Maybe Text)
gorsRestore = lens _gorsRestore (\ s a -> s{_gorsRestore = a});
-- | If the object expiration is configured (see PUT Bucket lifecycle), the
-- response includes this header. It includes the expiry-date and rule-id
-- key value pairs providing object expiration information. The value of
-- the rule-id is URL encoded.
gorsExpiration :: Lens' GetObjectResponse (Maybe Text)
gorsExpiration = lens _gorsExpiration (\ s a -> s{_gorsExpiration = a});
-- | Specifies whether the object retrieved was (true) or was not (false) a
-- Delete Marker. If false, this response header does not appear in the
-- response.
gorsDeleteMarker :: Lens' GetObjectResponse (Maybe Bool)
gorsDeleteMarker = lens _gorsDeleteMarker (\ s a -> s{_gorsDeleteMarker = a});
-- | If server-side encryption with a customer-provided encryption key was
-- requested, the response will include this header confirming the
-- encryption algorithm used.
gorsSSECustomerAlgorithm :: Lens' GetObjectResponse (Maybe Text)
gorsSSECustomerAlgorithm = lens _gorsSSECustomerAlgorithm (\ s a -> s{_gorsSSECustomerAlgorithm = a});
-- | This is set to the number of metadata entries not returned in x-amz-meta
-- headers. This can happen if you create metadata using an API like SOAP
-- that supports more flexible metadata than the REST API. For example,
-- using SOAP, you can create metadata whose values are not legal HTTP
-- headers.
gorsMissingMeta :: Lens' GetObjectResponse (Maybe Int)
gorsMissingMeta = lens _gorsMissingMeta (\ s a -> s{_gorsMissingMeta = a});
-- | If the bucket is configured as a website, redirects requests for this
-- object to another object in the same bucket or to an external URL.
-- Amazon S3 stores the value of this header in the object metadata.
gorsWebsiteRedirectLocation :: Lens' GetObjectResponse (Maybe Text)
gorsWebsiteRedirectLocation = lens _gorsWebsiteRedirectLocation (\ s a -> s{_gorsWebsiteRedirectLocation = a});
-- | Undocumented member.
gorsAcceptRanges :: Lens' GetObjectResponse (Maybe Text)
gorsAcceptRanges = lens _gorsAcceptRanges (\ s a -> s{_gorsAcceptRanges = a});
-- | Undocumented member.
gorsStorageClass :: Lens' GetObjectResponse (Maybe StorageClass)
gorsStorageClass = lens _gorsStorageClass (\ s a -> s{_gorsStorageClass = a});
-- | If server-side encryption with a customer-provided encryption key was
-- requested, the response will include this header to provide round trip
-- message integrity verification of the customer-provided encryption key.
gorsSSECustomerKeyMD5 :: Lens' GetObjectResponse (Maybe Text)
gorsSSECustomerKeyMD5 = lens _gorsSSECustomerKeyMD5 (\ s a -> s{_gorsSSECustomerKeyMD5 = a});
-- | If present, specifies the ID of the AWS Key Management Service (KMS)
-- master encryption key that was used for the object.
gorsSSEKMSKeyId :: Lens' GetObjectResponse (Maybe Text)
gorsSSEKMSKeyId = lens _gorsSSEKMSKeyId (\ s a -> s{_gorsSSEKMSKeyId = a}) . mapping _Sensitive;
-- | Specifies what content encodings have been applied to the object and
-- thus what decoding mechanisms must be applied to obtain the media-type
-- referenced by the Content-Type header field.
gorsContentEncoding :: Lens' GetObjectResponse (Maybe Text)
gorsContentEncoding = lens _gorsContentEncoding (\ s a -> s{_gorsContentEncoding = a});
-- | A map of metadata to store with the object in S3.
gorsMetadata :: Lens' GetObjectResponse (HashMap Text Text)
gorsMetadata = lens _gorsMetadata (\ s a -> s{_gorsMetadata = a}) . _Map;
-- | Undocumented member.
gorsReplicationStatus :: Lens' GetObjectResponse (Maybe ReplicationStatus)
gorsReplicationStatus = lens _gorsReplicationStatus (\ s a -> s{_gorsReplicationStatus = a});
-- | Specifies caching behavior along the request\/reply chain.
gorsCacheControl :: Lens' GetObjectResponse (Maybe Text)
gorsCacheControl = lens _gorsCacheControl (\ s a -> s{_gorsCacheControl = a});
-- | The language the content is in.
gorsContentLanguage :: Lens' GetObjectResponse (Maybe Text)
gorsContentLanguage = lens _gorsContentLanguage (\ s a -> s{_gorsContentLanguage = a});
-- | Last modified date of the object
gorsLastModified :: Lens' GetObjectResponse (Maybe UTCTime)
gorsLastModified = lens _gorsLastModified (\ s a -> s{_gorsLastModified = a}) . mapping _Time;
-- | Specifies presentational information for the object.
gorsContentDisposition :: Lens' GetObjectResponse (Maybe Text)
gorsContentDisposition = lens _gorsContentDisposition (\ s a -> s{_gorsContentDisposition = a});
-- | The portion of the object returned in the response.
gorsContentRange :: Lens' GetObjectResponse (Maybe Text)
gorsContentRange = lens _gorsContentRange (\ s a -> s{_gorsContentRange = a});
-- | The Server-side encryption algorithm used when storing this object in S3
-- (e.g., AES256, aws:kms).
gorsServerSideEncryption :: Lens' GetObjectResponse (Maybe ServerSideEncryption)
gorsServerSideEncryption = lens _gorsServerSideEncryption (\ s a -> s{_gorsServerSideEncryption = a});
-- | A standard MIME type describing the format of the object data.
gorsContentType :: Lens' GetObjectResponse (Maybe Text)
gorsContentType = lens _gorsContentType (\ s a -> s{_gorsContentType = a});
-- | The response status code.
gorsResponseStatus :: Lens' GetObjectResponse Int
gorsResponseStatus = lens _gorsResponseStatus (\ s a -> s{_gorsResponseStatus = a});
-- | Object data.
gorsBody :: Lens' GetObjectResponse RsBody
gorsBody = lens _gorsBody (\ s a -> s{_gorsBody = a});