-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | DigitalOcean Spaces API bindings
--
-- See the README at https://gitlab.com/ngua/do-spaces-hs
@package do-spaces
@version 0.2
module Network.DO.Spaces.Types
newtype SpacesT m a
SpacesT :: ReaderT Spaces m a -> SpacesT m a
runSpacesT :: SpacesT m a -> Spaces -> m a
-- | A client for interacting with the DO Spaces API
data Spaces
Spaces :: AccessKey -> SecretKey -> Region -> Manager -> Spaces
-- | Your DO Spaces access key
[$sel:accessKey:Spaces] :: Spaces -> AccessKey
-- | Your DO Spaces secret key
[$sel:secretKey:Spaces] :: Spaces -> SecretKey
-- | The DO region
[$sel:region:Spaces] :: Spaces -> Region
-- | HTTP Manager
[$sel:manager:Spaces] :: Spaces -> Manager
-- | A synonym for the constraints necessary to run SpacesT actions
type MonadSpaces m = (MonadReader Spaces m, MonadIO m, MonadUnliftIO m, MonadCatch m)
class Monad m => Action m a where {
type family ConsumedResponse a :: Type;
}
buildRequest :: Action m a => a -> m SpacesRequestBuilder
consumeResponse :: Action m a => RawResponse m -> m (ConsumedResponse a)
-- | How to discover the Region, AccessKey, and
-- SecretKey when creating a new Spaces client.
data CredentialSource
-- | Try a sequence of different sources until one succeeds
Discover :: CredentialSource
-- | Region, AccessKey and SecretKey env vars
FromEnv :: Maybe (Text, Text, Text) -> CredentialSource
-- | Load your credentials from a file, optionally providing the profile to
-- use (or default as the... default).
FromFile :: FilePath -> Maybe Profile -> CredentialSource
-- | Provide all values explicitly
Explicit :: Region -> AccessKey -> SecretKey -> CredentialSource
-- | The name of a per-project configuration profile to select when loading
-- credentials from a file
type Profile = Text
-- | Spaces access key
newtype AccessKey
AccessKey :: ByteString -> AccessKey
[$sel:unAccessKey:AccessKey] :: AccessKey -> ByteString
-- | Spaces secret key
newtype SecretKey
SecretKey :: ByteString -> SecretKey
[$sel:unSecretKey:SecretKey] :: SecretKey -> ByteString
-- | The name of a "key", in AWS parlance
newtype Object
Object :: Text -> Object
-- | Smart constructor for Objects; names must not be empty
mkObject :: MonadThrow m => Text -> m Object
-- | The name of a single storage bucket
newtype Bucket
Bucket :: Text -> Bucket
-- | Smart constructor for Buckets; names must conform to the
-- following rules:
--
--
--
-- This function ensures that names are valid and will also convert the
-- Text to lowercase
mkBucket :: MonadThrow m => Text -> m Bucket
-- | Information about a single Bucket
data BucketInfo
BucketInfo :: Bucket -> UTCTime -> BucketInfo
[$sel:name:BucketInfo] :: BucketInfo -> Bucket
[$sel:creationDate:BucketInfo] :: BucketInfo -> UTCTime
-- | The ID of an Owner; also serves as a display name in Spaces
newtype OwnerID
OwnerID :: Int -> OwnerID
-- | The display name is always equivalent to the owner's ID; Spaces
-- includes it for AWS compatibility
type DisplayName = OwnerID
-- | The resource owner
data Owner
Owner :: OwnerID -> DisplayName -> Owner
[$sel:ownerID:Owner] :: Owner -> OwnerID
[$sel:displayName:Owner] :: Owner -> DisplayName
-- | Information about a single Object, returned when listing a
-- Bucket's contents
data ObjectInfo
ObjectInfo :: Object -> UTCTime -> ETag -> Int -> Owner -> ObjectInfo
[$sel:object:ObjectInfo] :: ObjectInfo -> Object
[$sel:lastModified:ObjectInfo] :: ObjectInfo -> UTCTime
[$sel:etag:ObjectInfo] :: ObjectInfo -> ETag
-- | Size in bytes
[$sel:size:ObjectInfo] :: ObjectInfo -> Int
[$sel:owner:ObjectInfo] :: ObjectInfo -> Owner
-- | Metadata returned when querying information about an Object
data ObjectMetadata
ObjectMetadata :: Int -> MimeType -> ETag -> UTCTime -> ObjectMetadata
-- | length in bytes
[$sel:contentLength:ObjectMetadata] :: ObjectMetadata -> Int
[$sel:contentType:ObjectMetadata] :: ObjectMetadata -> MimeType
[$sel:etag:ObjectMetadata] :: ObjectMetadata -> ETag
[$sel:lastModified:ObjectMetadata] :: ObjectMetadata -> UTCTime
-- | MD5 hash of an Object
type ETag = Text
data SpacesRequest
SpacesRequest :: Request -> Spaces -> [Header] -> Method -> Hashed -> Canonicalized Request -> UTCTime -> SpacesRequest
-- | The actual HTTP Request
[$sel:request:SpacesRequest] :: SpacesRequest -> Request
-- | Your Spaces configuration
[$sel:spaces:SpacesRequest] :: SpacesRequest -> Spaces
-- | Obligatory Headers that will be added to the request
[$sel:headers:SpacesRequest] :: SpacesRequest -> [Header]
-- | The HTTP Method
[$sel:method:SpacesRequest] :: SpacesRequest -> Method
-- | The SHA256 hash of the RequestBody contents
[$sel:payloadHash:SpacesRequest] :: SpacesRequest -> Hashed
-- | The canonicalized HTTP Request
[$sel:canonicalRequest:SpacesRequest] :: SpacesRequest -> Canonicalized Request
[$sel:time:SpacesRequest] :: SpacesRequest -> UTCTime
-- | A ConsumedResponse with optional SpacesMetadata
data SpacesResponse a
SpacesResponse :: ConsumedResponse a -> Maybe SpacesMetadata -> SpacesResponse a
-- | A Response consumed by an Action instance
[$sel:result:SpacesResponse] :: SpacesResponse a -> ConsumedResponse a
-- | SpacesMetadata, the retention of which can be controlled using
-- WithMetadata
[$sel:metadata:SpacesResponse] :: SpacesResponse a -> Maybe SpacesMetadata
data SpacesRequestBuilder
SpacesRequestBuilder :: Spaces -> Maybe RequestBody -> Maybe Method -> [Header] -> Maybe Bucket -> Maybe Object -> Maybe Query -> Maybe Query -> Maybe Region -> SpacesRequestBuilder
[$sel:spaces:SpacesRequestBuilder] :: SpacesRequestBuilder -> Spaces
[$sel:body:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe RequestBody
[$sel:method:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe Method
[$sel:headers:SpacesRequestBuilder] :: SpacesRequestBuilder -> [Header]
[$sel:bucket:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe Bucket
[$sel:object:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe Object
[$sel:queryString:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe Query
[$sel:subresources:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe Query
-- | Certain operations, currently only CreateBucket, should be able
-- to override the region configured in the Spaces client
[$sel:overrideRegion:SpacesRequestBuilder] :: SpacesRequestBuilder -> Maybe Region
-- | Metadata and other response information returned from each Spaces API
-- transaction; it can be helpful to retain this at times
data SpacesMetadata
SpacesMetadata :: Maybe RequestID -> Maybe UTCTime -> Status -> SpacesMetadata
-- | Unique ID assigned to your request. This is not included in all
-- responses
[$sel:requestID:SpacesMetadata] :: SpacesMetadata -> Maybe RequestID
[$sel:date:SpacesMetadata] :: SpacesMetadata -> Maybe UTCTime
-- | HTTP status
[$sel:status:SpacesMetadata] :: SpacesMetadata -> Status
-- | Whether or not to retain SpacesMetadata when consuming
-- responses
data WithMetadata
KeepMetadata :: WithMetadata
NoMetadata :: WithMetadata
data RawResponse m
RawResponse :: [Header] -> BodyBS m -> RawResponse m
[$sel:headers:RawResponse] :: RawResponse m -> [Header]
[$sel:body:RawResponse] :: RawResponse m -> BodyBS m
-- | A request or response body
type BodyBS m = ConduitT () ByteString m ()
-- | HTTP request methods, to avoid using http-client's
-- stringly-typed Method synonym
data Method
GET :: Method
POST :: Method
PUT :: Method
DELETE :: Method
HEAD :: Method
-- | DO regions where Spaces is available (only a subset of all regions)
data Region
-- | NYC3
NewYork :: Region
-- | AMS3
Amsterdam :: Region
-- | SFO3
SanFrancisco :: Region
-- | SGP1
Singapore :: Region
-- | FRA1
Frankfurt :: Region
-- | A unique ID that is assigned to each request
type RequestID = Text
-- | Cache-Control request header value
type CacheControl = Text
-- | Content-Disposition request header value
type ContentDisposition = Text
-- | Content-Encoding request header value
type ContentEncoding = Text
-- | Arbitrary key-value pairs supplied by the user, for use in
-- PUT or POST requests. Each pair expands into
-- x-amz-meta-*, e.g. x-amz-meta-s3cmd-attrs:
-- uid:1000/gname:asb...
type UserMetadata = [(Text, Text)]
-- | Optional headers when uploading objects
data UploadHeaders
UploadHeaders :: Maybe CannedACL -> Maybe CacheControl -> Maybe ContentDisposition -> Maybe ContentEncoding -> UserMetadata -> UploadHeaders
[$sel:acl:UploadHeaders] :: UploadHeaders -> Maybe CannedACL
[$sel:cacheControl:UploadHeaders] :: UploadHeaders -> Maybe CacheControl
[$sel:contentDisposition:UploadHeaders] :: UploadHeaders -> Maybe ContentDisposition
[$sel:contentEncoding:UploadHeaders] :: UploadHeaders -> Maybe ContentEncoding
[$sel:metadata:UploadHeaders] :: UploadHeaders -> UserMetadata
-- | "Canned" access controls; Spaces doesn't support the full range
-- offered by s3
data CannedACL
-- | No unauthenticated public access
Private :: CannedACL
-- | Unauthenticated public read access permitted
PublicRead :: CannedACL
-- | Cross-origin resource sharing rules
data CORSRule
CORSRule :: Text -> [Method] -> [HeaderName] -> CORSRule
[$sel:allowedOrigin:CORSRule] :: CORSRule -> Text
[$sel:allowedMethods:CORSRule] :: CORSRule -> [Method]
[$sel:allowedHeaders:CORSRule] :: CORSRule -> [HeaderName]
-- | Smart constructor for CORSRule. Ensures that both origins and
-- header names contain a maximum of one wildcard and removes duplicates
-- from both headers and methods
mkCORSRule :: MonadThrow m => Text -> [Method] -> [HeaderName] -> m CORSRule
-- | An individual access grant
data Grant
Grant :: Permission -> Grantee -> Grant
[$sel:permission:Grant] :: Grant -> Permission
[$sel:grantee:Grant] :: Grant -> Grantee
-- | Access grant level; Spaces currently only supports these two levels
data Permission
ReadOnly :: Permission
FullControl :: Permission
-- | Information about who an access grant applies to
data Grantee
-- | Nominally contains a URI value, but Spaces only supports a single
-- value for group access grants
Group :: Grantee
CanonicalUser :: Owner -> Grantee
-- | A generic type for describing ACL configuration, can be applied to
-- both Bucket and Object ACLs
data ACLResponse
ACLResponse :: Owner -> [Grant] -> ACLResponse
[$sel:owner:ACLResponse] :: ACLResponse -> Owner
[$sel:accessControlList:ACLResponse] :: ACLResponse -> [Grant]
-- | Lifecycle configuration for a Bucket
data LifecycleRule
LifecycleRule :: LifecycleID -> Bool -> Maybe Text -> Maybe LifecycleExpiration -> Maybe Days -> LifecycleRule
[$sel:lifecycleID:LifecycleRule] :: LifecycleRule -> LifecycleID
-- | The status of the LifecycleRule
[$sel:enabled:LifecycleRule] :: LifecycleRule -> Bool
-- | When specified, only Objects which share the prefix will be
-- affected by the lifecycle rules
[$sel:prefix:LifecycleRule] :: LifecycleRule -> Maybe Text
[$sel:expiration:LifecycleRule] :: LifecycleRule -> Maybe LifecycleExpiration
-- | When specified, configures the deletion of incomplete multipart
-- uploads
[$sel:abortIncomplete:LifecycleRule] :: LifecycleRule -> Maybe Days
-- | Configuration for automatically deleting expire Objects
data LifecycleExpiration
AfterDays :: Days -> LifecycleExpiration
OnDate :: UTCTime -> LifecycleExpiration
-- | A unique ID for a LifecycleRule
newtype LifecycleID
LifecycleID :: Text -> LifecycleID
-- | Smart constructor for LifecycleID, which may contain a maximum
-- of 255 characters, including spaces
mkLifecycleID :: MonadThrow m => Text -> m LifecycleID
-- | Represents some resource that has been canonicalized according to the
-- Spaces/AWS v4 spec
newtype Canonicalized a
Canonicalized :: ByteString -> Canonicalized a
-- | A strict ByteString that has been computed according to some
-- part of the AWS v4 spec. The AWS v4 signature is calculated from a
-- series of interdependent computations. It would be possible to
-- represent these all as ByteStrings; this approach, however,
-- would make it easy to confuse two sequences that are not semantically
-- equivalent, leading to the generation of malformed singatures. The
-- promiscuous use of ByteStrings also makes for unclear type
-- signatures. Using a GADT with type synonyms is simpler than creating a
-- newtype for each type of computation
data Computed (a :: ComputedTag)
[Hashed] :: ByteString -> Computed Hash
-- | Represents a "string to sign" that has been computed according to the
-- Spaces/AWS v4 spec
[StringToSign] :: ByteString -> Computed StrToSign
-- | Signed hash of a Request body, a SecretKey, and request
-- information
[Signature] :: ByteString -> Computed Sig
[Credentials] :: ByteString -> Computed Cred
-- | Authorization string containing information about your
-- AccessKey and your request
[Authorization] :: ByteString -> Computed Auth
type StringToSign = Computed 'StrToSign
type Hashed = Computed 'Hash
type Signature = Computed 'Sig
type Credentials = Computed 'Cred
type Authorization = Computed 'Auth
-- | Extract the ByteString from something Computed
uncompute :: Computed a -> ByteString
-- | The base Exception type for both ClientExceptions and
-- APIExceptions
data SpacesException
-- | An exception generated within the Spaces client
data ClientException
InvalidRequest :: Text -> ClientException
InvalidResponse :: Text -> ClientException
InvalidXML :: Text -> ClientException
ConfigurationError :: Text -> ClientException
-- | This includes the raw Response body, read into a lazy
-- ByteString
HTTPStatus :: Status -> ByteString -> ClientException
OtherError :: Text -> ClientException
-- | An s3-compatible API error response, sent as XML
data APIException
APIException :: Status -> Text -> RequestID -> Text -> APIException
-- | HTTP Status
[$sel:status:APIException] :: APIException -> Status
-- | The s3 error code type
[$sel:code:APIException] :: APIException -> Text
-- | The unique ID of the request
[$sel:requestID:APIException] :: APIException -> RequestID
[$sel:hostID:APIException] :: APIException -> Text
type Days = Word16
instance GHC.Generics.Generic Network.DO.Spaces.Types.Region
instance GHC.Classes.Eq Network.DO.Spaces.Types.Region
instance GHC.Show.Show Network.DO.Spaces.Types.Region
instance GHC.Read.Read Network.DO.Spaces.Types.Method
instance GHC.Classes.Ord Network.DO.Spaces.Types.Method
instance GHC.Generics.Generic Network.DO.Spaces.Types.Method
instance GHC.Classes.Eq Network.DO.Spaces.Types.Method
instance GHC.Show.Show Network.DO.Spaces.Types.Method
instance Web.Internal.HttpApiData.ToHttpApiData Network.DO.Spaces.Types.Bucket
instance GHC.Classes.Eq Network.DO.Spaces.Types.Bucket
instance GHC.Generics.Generic Network.DO.Spaces.Types.Bucket
instance GHC.Show.Show Network.DO.Spaces.Types.Bucket
instance GHC.Generics.Generic Network.DO.Spaces.Types.BucketInfo
instance GHC.Classes.Eq Network.DO.Spaces.Types.BucketInfo
instance GHC.Show.Show Network.DO.Spaces.Types.BucketInfo
instance Web.Internal.HttpApiData.ToHttpApiData Network.DO.Spaces.Types.Object
instance GHC.Classes.Eq Network.DO.Spaces.Types.Object
instance GHC.Generics.Generic Network.DO.Spaces.Types.Object
instance GHC.Show.Show Network.DO.Spaces.Types.Object
instance Web.Internal.HttpApiData.ToHttpApiData Network.DO.Spaces.Types.OwnerID
instance GHC.Num.Num Network.DO.Spaces.Types.OwnerID
instance GHC.Classes.Eq Network.DO.Spaces.Types.OwnerID
instance GHC.Generics.Generic Network.DO.Spaces.Types.OwnerID
instance GHC.Show.Show Network.DO.Spaces.Types.OwnerID
instance GHC.Generics.Generic Network.DO.Spaces.Types.Owner
instance GHC.Classes.Eq Network.DO.Spaces.Types.Owner
instance GHC.Show.Show Network.DO.Spaces.Types.Owner
instance GHC.Generics.Generic Network.DO.Spaces.Types.ObjectMetadata
instance GHC.Classes.Eq Network.DO.Spaces.Types.ObjectMetadata
instance GHC.Show.Show Network.DO.Spaces.Types.ObjectMetadata
instance GHC.Generics.Generic Network.DO.Spaces.Types.ObjectInfo
instance GHC.Classes.Eq Network.DO.Spaces.Types.ObjectInfo
instance GHC.Show.Show Network.DO.Spaces.Types.ObjectInfo
instance GHC.Generics.Generic Network.DO.Spaces.Types.CORSRule
instance GHC.Classes.Eq Network.DO.Spaces.Types.CORSRule
instance GHC.Show.Show Network.DO.Spaces.Types.CORSRule
instance GHC.Classes.Ord Network.DO.Spaces.Types.Permission
instance GHC.Generics.Generic Network.DO.Spaces.Types.Permission
instance GHC.Classes.Eq Network.DO.Spaces.Types.Permission
instance GHC.Show.Show Network.DO.Spaces.Types.Permission
instance GHC.Generics.Generic Network.DO.Spaces.Types.Grantee
instance GHC.Classes.Eq Network.DO.Spaces.Types.Grantee
instance GHC.Show.Show Network.DO.Spaces.Types.Grantee
instance GHC.Generics.Generic Network.DO.Spaces.Types.Grant
instance GHC.Classes.Eq Network.DO.Spaces.Types.Grant
instance GHC.Show.Show Network.DO.Spaces.Types.Grant
instance GHC.Generics.Generic Network.DO.Spaces.Types.ACLResponse
instance GHC.Classes.Eq Network.DO.Spaces.Types.ACLResponse
instance GHC.Show.Show Network.DO.Spaces.Types.ACLResponse
instance GHC.Generics.Generic Network.DO.Spaces.Types.LifecycleExpiration
instance GHC.Classes.Eq Network.DO.Spaces.Types.LifecycleExpiration
instance GHC.Show.Show Network.DO.Spaces.Types.LifecycleExpiration
instance GHC.Generics.Generic Network.DO.Spaces.Types.LifecycleID
instance GHC.Classes.Eq Network.DO.Spaces.Types.LifecycleID
instance GHC.Show.Show Network.DO.Spaces.Types.LifecycleID
instance GHC.Generics.Generic Network.DO.Spaces.Types.LifecycleRule
instance GHC.Classes.Eq Network.DO.Spaces.Types.LifecycleRule
instance GHC.Show.Show Network.DO.Spaces.Types.LifecycleRule
instance GHC.Generics.Generic (Network.DO.Spaces.Types.Canonicalized a)
instance GHC.Classes.Eq (Network.DO.Spaces.Types.Canonicalized a)
instance GHC.Show.Show (Network.DO.Spaces.Types.Canonicalized a)
instance GHC.Classes.Eq Network.DO.Spaces.Types.ComputedTag
instance GHC.Show.Show Network.DO.Spaces.Types.ComputedTag
instance GHC.Generics.Generic Network.DO.Spaces.Types.AccessKey
instance GHC.Classes.Eq Network.DO.Spaces.Types.AccessKey
instance GHC.Show.Show Network.DO.Spaces.Types.AccessKey
instance GHC.Generics.Generic Network.DO.Spaces.Types.SecretKey
instance GHC.Classes.Eq Network.DO.Spaces.Types.SecretKey
instance GHC.Show.Show Network.DO.Spaces.Types.SecretKey
instance GHC.Generics.Generic Network.DO.Spaces.Types.Spaces
instance GHC.Generics.Generic Network.DO.Spaces.Types.SpacesRequestBuilder
instance GHC.Generics.Generic Network.DO.Spaces.Types.SpacesRequest
instance Control.Monad.IO.Unlift.MonadUnliftIO m => Control.Monad.IO.Unlift.MonadUnliftIO (Network.DO.Spaces.Types.SpacesT m)
instance GHC.Base.Monad m => Control.Monad.Reader.Class.MonadReader Network.DO.Spaces.Types.Spaces (Network.DO.Spaces.Types.SpacesT m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Network.DO.Spaces.Types.SpacesT m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Network.DO.Spaces.Types.SpacesT m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Network.DO.Spaces.Types.SpacesT m)
instance GHC.Base.Monad m => GHC.Base.Monad (Network.DO.Spaces.Types.SpacesT m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Network.DO.Spaces.Types.SpacesT m)
instance GHC.Base.Functor m => GHC.Base.Functor (Network.DO.Spaces.Types.SpacesT m)
instance GHC.Generics.Generic (Network.DO.Spaces.Types.SpacesT m a)
instance GHC.Generics.Generic (Network.DO.Spaces.Types.RawResponse m)
instance GHC.Generics.Generic Network.DO.Spaces.Types.WithMetadata
instance GHC.Classes.Eq Network.DO.Spaces.Types.WithMetadata
instance GHC.Show.Show Network.DO.Spaces.Types.WithMetadata
instance GHC.Generics.Generic Network.DO.Spaces.Types.SpacesMetadata
instance GHC.Classes.Eq Network.DO.Spaces.Types.SpacesMetadata
instance GHC.Show.Show Network.DO.Spaces.Types.SpacesMetadata
instance GHC.Generics.Generic (Network.DO.Spaces.Types.SpacesResponse a)
instance GHC.Show.Show Network.DO.Spaces.Types.CannedACL
instance GHC.Classes.Eq Network.DO.Spaces.Types.CannedACL
instance GHC.Generics.Generic Network.DO.Spaces.Types.UploadHeaders
instance GHC.Classes.Eq Network.DO.Spaces.Types.UploadHeaders
instance GHC.Show.Show Network.DO.Spaces.Types.UploadHeaders
instance GHC.Generics.Generic Network.DO.Spaces.Types.ClientException
instance GHC.Classes.Eq Network.DO.Spaces.Types.ClientException
instance GHC.Show.Show Network.DO.Spaces.Types.ClientException
instance GHC.Generics.Generic Network.DO.Spaces.Types.APIException
instance GHC.Classes.Eq Network.DO.Spaces.Types.APIException
instance GHC.Show.Show Network.DO.Spaces.Types.APIException
instance GHC.Show.Show (Network.DO.Spaces.Types.Computed a)
instance GHC.Classes.Eq (Network.DO.Spaces.Types.Computed a)
instance GHC.Show.Show (Network.DO.Spaces.Types.ConsumedResponse a) => GHC.Show.Show (Network.DO.Spaces.Types.SpacesResponse a)
instance GHC.Exception.Type.Exception Network.DO.Spaces.Types.APIException
instance GHC.Exception.Type.Exception Network.DO.Spaces.Types.ClientException
instance GHC.Show.Show Network.DO.Spaces.Types.SpacesException
instance GHC.Exception.Type.Exception Network.DO.Spaces.Types.SpacesException
instance (Data.Generics.Product.Fields.HasField' name (Network.DO.Spaces.Types.SpacesResponse a) s, s GHC.Types.~ t, a GHC.Types.~ b) => Data.Generics.Product.Fields.HasField name (Network.DO.Spaces.Types.SpacesResponse a) (Network.DO.Spaces.Types.SpacesResponse b) s t
instance Network.HTTP.Client.Types.HasHttpManager Network.DO.Spaces.Types.Spaces
module Network.DO.Spaces.Actions.DeleteObject
-- | Delete a single Object
data DeleteObject
DeleteObject :: Bucket -> Object -> DeleteObject
[$sel:bucket:DeleteObject] :: DeleteObject -> Bucket
[$sel:object:DeleteObject] :: DeleteObject -> Object
type DeleteObjectResponse = ()
instance GHC.Generics.Generic Network.DO.Spaces.Actions.DeleteObject.DeleteObject
instance GHC.Classes.Eq Network.DO.Spaces.Actions.DeleteObject.DeleteObject
instance GHC.Show.Show Network.DO.Spaces.Actions.DeleteObject.DeleteObject
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.DeleteObject.DeleteObject
module Network.DO.Spaces.Actions.DeleteBucketLifecycle
newtype DeleteBucketLifecycle
DeleteBucketLifecycle :: Bucket -> DeleteBucketLifecycle
[$sel:bucket:DeleteBucketLifecycle] :: DeleteBucketLifecycle -> Bucket
type DeleteBucketLifecycleResponse = ()
instance GHC.Classes.Eq Network.DO.Spaces.Actions.DeleteBucketLifecycle.DeleteBucketLifecycle
instance GHC.Generics.Generic Network.DO.Spaces.Actions.DeleteBucketLifecycle.DeleteBucketLifecycle
instance GHC.Show.Show Network.DO.Spaces.Actions.DeleteBucketLifecycle.DeleteBucketLifecycle
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.DeleteBucketLifecycle.DeleteBucketLifecycle
module Network.DO.Spaces.Actions.DeleteBucketCORS
-- | Delete all of a Bucket's configured CORSRules
newtype DeleteBucketCORS
DeleteBucketCORS :: Bucket -> DeleteBucketCORS
[$sel:bucket:DeleteBucketCORS] :: DeleteBucketCORS -> Bucket
type DeleteBucketCORSResponse = ()
instance GHC.Classes.Eq Network.DO.Spaces.Actions.DeleteBucketCORS.DeleteBucketCORS
instance GHC.Generics.Generic Network.DO.Spaces.Actions.DeleteBucketCORS.DeleteBucketCORS
instance GHC.Show.Show Network.DO.Spaces.Actions.DeleteBucketCORS.DeleteBucketCORS
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.DeleteBucketCORS.DeleteBucketCORS
module Network.DO.Spaces.Actions.DeleteBucket
-- | Delete a single Bucket. Note that it must be empty
newtype DeleteBucket
DeleteBucket :: Bucket -> DeleteBucket
-- | The name of the Bucket to delete
[$sel:bucket:DeleteBucket] :: DeleteBucket -> Bucket
type DeleteBucketResponse = ()
instance GHC.Classes.Eq Network.DO.Spaces.Actions.DeleteBucket.DeleteBucket
instance GHC.Generics.Generic Network.DO.Spaces.Actions.DeleteBucket.DeleteBucket
instance GHC.Show.Show Network.DO.Spaces.Actions.DeleteBucket.DeleteBucket
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.DeleteBucket.DeleteBucket
-- | Small utilities
module Network.DO.Spaces.Utils
-- | Show some Text
tshow :: Show a => a -> Text
-- | Show a ByteString
bshow :: Show a => a -> ByteString
-- | Strip leading and trailing double quotes from a Text
unquote :: Text -> Text
quote :: (IsString a, Monoid a) => a -> a
-- | Convert a RequestBody to a ByteString
bodyLBS :: MonadThrow m => RequestBody -> m ByteString
-- | Map ByteString chars to lower-case
toLowerBS :: ByteString -> ByteString
handleMaybe :: MonadCatch m => (a -> m b) -> a -> m (Maybe b)
-- | Convert a Region to its equivalent slug
regionSlug :: IsString a => Region -> a
showCannedACL :: IsString a => CannedACL -> a
-- | Convert UploadHeaders to a list of request Headers
renderUploadHeaders :: UploadHeaders -> [Header]
defaultUploadHeaders :: UploadHeaders
slugToRegion :: (MonadThrow m, IsString a, Eq a) => a -> m Region
-- | Create a SpacesMetadata by reading response Headers,
-- after passing the Status
getResponseMetadata :: Status -> RawResponse m -> SpacesMetadata
-- | Create an XML Node
mkNode :: Name -> Text -> Node
showPermission :: IsString a => Permission -> a
xmlDocCursor :: (MonadIO m, MonadThrow m) => RawResponse m -> m Cursor
-- | Read a Num type from Text
xmlInt :: (MonadThrow m, Num a) => Text -> m a
-- | Helper to build exceptions during XML parsing
xmlElemError :: Text -> ClientException
-- | Read a UTCTime from an ISO-O8601-formatted Text
xmlUTCTime :: MonadThrow m => Text -> m UTCTime
-- | Read a Num type, encoded as an integer, from XML
xmlNum :: Num a => MonadThrow m => Text -> Cursor Node -> m a
xmlMaybeElem :: Cursor Node -> Text -> Maybe Text
isTruncP :: MonadThrow m => Cursor Node -> m Bool
-- | Parse the name of a Bucket from XML
bucketP :: MonadThrow m => Cursor Node -> m Bucket
-- | Parse the name of an Object from XML
objectP :: MonadThrow m => Cursor Node -> m Object
-- | XML parser for ETag attribute
etagP :: MonadThrow m => Cursor Node -> m ETag
-- | XML parser for Owner attribute
ownerP :: MonadThrow m => Cursor Node -> m Owner
-- | XML parser for LastModified attribute
lastModifiedP :: MonadThrow m => Cursor Node -> m UTCTime
aclP :: MonadThrow m => Cursor Node -> m ACLResponse
writeACLSetter :: (HasField' "owner" r Owner, HasField' "acls" r [Grant]) => r -> ByteString
lookupObjectMetadata :: MonadThrow m => RawResponse m -> m ObjectMetadata
-- | Lookup the value of a HeaderName from a RawResponse in a
-- monadic context
lookupHeader :: Monad m => RawResponse m -> HeaderName -> MaybeT m ByteString
-- | Transform a Header value into an ETag
readEtag :: Monad m => ByteString -> MaybeT m ETag
-- | Transform a Header value into an Int (for
-- Content-Length)
readContentLen :: Monad m => ByteString -> MaybeT m Int
-- | Low-level implementations of Spaces REST transactions. You should not
-- import this module directly, but should instead use the higher-level
-- interface exposed by Network.DO.Spaces.Actions and its
-- submodules
module Network.DO.Spaces.Request
-- | Create a new SpacesRequest from a SpacesRequestBuilder,
-- performing the necessary computations and setting the appropriate
-- default headers
newSpacesRequest :: MonadThrow m => SpacesRequestBuilder -> UTCTime -> m SpacesRequest
-- | Generate a Signature
mkSignature :: SpacesRequest -> StringToSign -> Signature
-- | Generate a StringToSign
mkStringToSign :: SpacesRequest -> StringToSign
-- | Create an Authorization corresponding to the required AWS v4
-- Authorization header
mkAuthorization :: SpacesRequest -> StringToSign -> Authorization
-- | Extract the Request from a SpacesRequest and set the
-- requisite Authorization header
finalize :: SpacesRequest -> Authorization -> Request
module Network.DO.Spaces.Actions.UploadObject
-- | Upload a single object to Spaces. The maximum size for a single PUT
-- request is 5 GB
data UploadObject
UploadObject :: Bucket -> Object -> RequestBody -> UploadHeaders -> Maybe MimeType -> UploadObject
[$sel:bucket:UploadObject] :: UploadObject -> Bucket
[$sel:object:UploadObject] :: UploadObject -> Object
[$sel:body:UploadObject] :: UploadObject -> RequestBody
[$sel:optionalHeaders:UploadObject] :: UploadObject -> UploadHeaders
[$sel:contentType:UploadObject] :: UploadObject -> Maybe MimeType
data UploadObjectResponse
UploadObjectResponse :: ETag -> Int -> UploadObjectResponse
[$sel:etag:UploadObjectResponse] :: UploadObjectResponse -> ETag
-- | Length in bytes
[$sel:contentLength:UploadObjectResponse] :: UploadObjectResponse -> Int
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadObject.UploadObject
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadObject.UploadObjectResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadObject.UploadObjectResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadObject.UploadObjectResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.UploadObject.UploadObject
module Network.DO.Spaces.Actions.UploadMultipart
-- | Initiate a multipart upload session
data BeginMultipart
BeginMultipart :: Bucket -> Object -> UploadHeaders -> Maybe MimeType -> BeginMultipart
[$sel:bucket:BeginMultipart] :: BeginMultipart -> Bucket
[$sel:object:BeginMultipart] :: BeginMultipart -> Object
[$sel:optionalHeaders:BeginMultipart] :: BeginMultipart -> UploadHeaders
[$sel:contentType:BeginMultipart] :: BeginMultipart -> Maybe MimeType
newtype BeginMultipartResponse
BeginMultipartResponse :: MultipartSession -> BeginMultipartResponse
[$sel:session:BeginMultipartResponse] :: BeginMultipartResponse -> MultipartSession
data UploadPart
UploadPart :: MultipartSession -> Int -> RequestBody -> UploadPart
[$sel:session:UploadPart] :: UploadPart -> MultipartSession
[$sel:partNumber:UploadPart] :: UploadPart -> Int
[$sel:body:UploadPart] :: UploadPart -> RequestBody
data UploadPartResponse
UploadPartResponse :: ETag -> UploadPartResponse
[$sel:etag:UploadPartResponse] :: UploadPartResponse -> ETag
-- | List all of the Parts of a multipart upload session
newtype ListParts
ListParts :: MultipartSession -> ListParts
[$sel:session:ListParts] :: ListParts -> MultipartSession
-- | A single part of a multipart upload session. Returned when querying
-- ListParts
data Part
Part :: Int -> UTCTime -> ETag -> Int -> Part
[$sel:partNumber:Part] :: Part -> Int
[$sel:lastModified:Part] :: Part -> UTCTime
[$sel:etag:Part] :: Part -> ETag
-- | Size in bytes
[$sel:size:Part] :: Part -> Int
data ListPartsResponse
ListPartsResponse :: Bucket -> Object -> UploadID -> Seq Part -> Int -> Int -> Int -> Bool -> ListPartsResponse
[$sel:bucket:ListPartsResponse] :: ListPartsResponse -> Bucket
[$sel:object:ListPartsResponse] :: ListPartsResponse -> Object
[$sel:uploadID:ListPartsResponse] :: ListPartsResponse -> UploadID
[$sel:parts:ListPartsResponse] :: ListPartsResponse -> Seq Part
-- | Part number marking the beginning of the list
[$sel:partMarker:ListPartsResponse] :: ListPartsResponse -> Int
-- | If truncated, the list location where the next response will begin
[$sel:nextPartMarker:ListPartsResponse] :: ListPartsResponse -> Int
[$sel:maxParts:ListPartsResponse] :: ListPartsResponse -> Int
[$sel:isTruncated:ListPartsResponse] :: ListPartsResponse -> Bool
-- | A unique ID assigned to a multipart upload session
type UploadID = Text
-- | Cancel an active multipart upload session
newtype CancelMultipart
CancelMultipart :: MultipartSession -> CancelMultipart
[$sel:session:CancelMultipart] :: CancelMultipart -> MultipartSession
data MultipartSession
MultipartSession :: Bucket -> Object -> UploadID -> MultipartSession
[$sel:bucket:MultipartSession] :: MultipartSession -> Bucket
[$sel:object:MultipartSession] :: MultipartSession -> Object
[$sel:uploadID:MultipartSession] :: MultipartSession -> UploadID
type CancelMultipartResponse = ()
-- | Complete a multipart session
data CompleteMultipart
CompleteMultipart :: MultipartSession -> [(Int, ETag)] -> CompleteMultipart
[$sel:session:CompleteMultipart] :: CompleteMultipart -> MultipartSession
-- | The part numbers and ETags of each uploaded part
[$sel:parts:CompleteMultipart] :: CompleteMultipart -> [(Int, ETag)]
data CompleteMultipartResponse
CompleteMultipartResponse :: Text -> Bucket -> Object -> ETag -> CompleteMultipartResponse
[$sel:location:CompleteMultipartResponse] :: CompleteMultipartResponse -> Text
[$sel:bucket:CompleteMultipartResponse] :: CompleteMultipartResponse -> Bucket
[$sel:object:CompleteMultipartResponse] :: CompleteMultipartResponse -> Object
-- | The MD5 hash of the final object, i.e. all of the cumulative uploaded
-- parts
[$sel:etag:CompleteMultipartResponse] :: CompleteMultipartResponse -> ETag
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.Part
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.Part
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.Part
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.MultipartSession
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.MultipartSession
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.MultipartSession
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.BeginMultipart
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.BeginMultipart
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.BeginMultipart
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.BeginMultipartResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.BeginMultipartResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.BeginMultipartResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.UploadPart
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.UploadPartResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.UploadPartResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.UploadPartResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipart
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipart
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipart
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipartResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipartResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipartResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.CancelMultipart
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.CancelMultipart
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.CancelMultipart
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.ListParts
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.ListParts
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.ListParts
instance GHC.Generics.Generic Network.DO.Spaces.Actions.UploadMultipart.ListPartsResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.UploadMultipart.ListPartsResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.UploadMultipart.ListPartsResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.UploadMultipart.ListParts
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.UploadMultipart.CancelMultipart
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.UploadMultipart.CompleteMultipart
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.UploadMultipart.UploadPart
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.UploadMultipart.BeginMultipart
module Network.DO.Spaces.Actions.SetObjectACLs
-- | Get the full Access Control List associated with a Bucket
data SetObjectACLs
SetObjectACLs :: Bucket -> Object -> Owner -> [Grant] -> SetObjectACLs
[$sel:bucket:SetObjectACLs] :: SetObjectACLs -> Bucket
[$sel:object:SetObjectACLs] :: SetObjectACLs -> Object
-- | The object owner
[$sel:owner:SetObjectACLs] :: SetObjectACLs -> Owner
[$sel:acls:SetObjectACLs] :: SetObjectACLs -> [Grant]
type SetObjectACLsResponse = ()
instance GHC.Generics.Generic Network.DO.Spaces.Actions.SetObjectACLs.SetObjectACLs
instance GHC.Classes.Eq Network.DO.Spaces.Actions.SetObjectACLs.SetObjectACLs
instance GHC.Show.Show Network.DO.Spaces.Actions.SetObjectACLs.SetObjectACLs
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.SetObjectACLs.SetObjectACLs
module Network.DO.Spaces.Actions.SetBucketLifecycle
-- | Configure the LifecycleRules for a Bucket
data SetBucketLifecycle
SetBucketLifecycle :: Bucket -> [LifecycleRule] -> SetBucketLifecycle
[$sel:bucket:SetBucketLifecycle] :: SetBucketLifecycle -> Bucket
[$sel:rules:SetBucketLifecycle] :: SetBucketLifecycle -> [LifecycleRule]
type SetBucketLifecycleResponse = ()
instance GHC.Generics.Generic Network.DO.Spaces.Actions.SetBucketLifecycle.SetBucketLifecycle
instance GHC.Classes.Eq Network.DO.Spaces.Actions.SetBucketLifecycle.SetBucketLifecycle
instance GHC.Show.Show Network.DO.Spaces.Actions.SetBucketLifecycle.SetBucketLifecycle
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.SetBucketLifecycle.SetBucketLifecycle
module Network.DO.Spaces.Actions.SetBucketCORS
type SetBucketCORSResponse = ()
-- | Set a Bucket's CORSRules
data SetBucketCORS
SetBucketCORS :: Bucket -> [CORSRule] -> SetBucketCORS
[$sel:bucket:SetBucketCORS] :: SetBucketCORS -> Bucket
[$sel:rules:SetBucketCORS] :: SetBucketCORS -> [CORSRule]
instance GHC.Generics.Generic Network.DO.Spaces.Actions.SetBucketCORS.SetBucketCORS
instance GHC.Classes.Eq Network.DO.Spaces.Actions.SetBucketCORS.SetBucketCORS
instance GHC.Show.Show Network.DO.Spaces.Actions.SetBucketCORS.SetBucketCORS
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.SetBucketCORS.SetBucketCORS
module Network.DO.Spaces.Actions.SetBucketACLs
data SetBucketACLs
SetBucketACLs :: Bucket -> [Grant] -> Owner -> SetBucketACLs
[$sel:bucket:SetBucketACLs] :: SetBucketACLs -> Bucket
[$sel:acls:SetBucketACLs] :: SetBucketACLs -> [Grant]
-- | The bucket owner
[$sel:owner:SetBucketACLs] :: SetBucketACLs -> Owner
type SetBucketACLsResponse = ()
instance GHC.Generics.Generic Network.DO.Spaces.Actions.SetBucketACLs.SetBucketACLs
instance GHC.Classes.Eq Network.DO.Spaces.Actions.SetBucketACLs.SetBucketACLs
instance GHC.Show.Show Network.DO.Spaces.Actions.SetBucketACLs.SetBucketACLs
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.SetBucketACLs.SetBucketACLs
module Network.DO.Spaces.Actions.ListBucket
-- | List the contents (Objects) of a Bucket
data ListBucket
ListBucket :: Bucket -> Maybe Char -> Maybe Object -> Maybe Int -> Maybe Text -> ListBucket
[$sel:bucket:ListBucket] :: ListBucket -> Bucket
-- | Character used to group keys
[$sel:delimiter:ListBucket] :: ListBucket -> Maybe Char
-- | The Object to start with when listing the bucket's contents
[$sel:marker:ListBucket] :: ListBucket -> Maybe Object
-- | Max number of Objects to return, between 0 and 1,000
-- (inclusive)
[$sel:maxKeys:ListBucket] :: ListBucket -> Maybe Int
-- | String value to group keys. Only objects whose names begin with the
-- prefix are returned
[$sel:prefix:ListBucket] :: ListBucket -> Maybe Text
data ListBucketResponse
ListBucketResponse :: Bucket -> Maybe Text -> Maybe Object -> Maybe Object -> Int -> Bool -> Seq ObjectInfo -> ListBucketResponse
[$sel:bucket:ListBucketResponse] :: ListBucketResponse -> Bucket
-- | The Object prefix, if supplied as a query param
[$sel:prefix:ListBucketResponse] :: ListBucketResponse -> Maybe Text
-- | An Object indicating where the list of Objects begin;
-- Nothing denotes the beginning of the list
[$sel:marker:ListBucketResponse] :: ListBucketResponse -> Maybe Object
-- | The Object that should be used as the marker query
-- param in subsequent requests
[$sel:nextMarker:ListBucketResponse] :: ListBucketResponse -> Maybe Object
-- | Maximum number of ObjectInfos to include; based on request
-- parameter of the same name
[$sel:maxKeys:ListBucketResponse] :: ListBucketResponse -> Int
-- | Indicates whether the response contains all possible Objects
[$sel:isTruncated:ListBucketResponse] :: ListBucketResponse -> Bool
[$sel:objects:ListBucketResponse] :: ListBucketResponse -> Seq ObjectInfo
instance GHC.Generics.Generic Network.DO.Spaces.Actions.ListBucket.ListBucket
instance GHC.Classes.Eq Network.DO.Spaces.Actions.ListBucket.ListBucket
instance GHC.Show.Show Network.DO.Spaces.Actions.ListBucket.ListBucket
instance GHC.Generics.Generic Network.DO.Spaces.Actions.ListBucket.ListBucketResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.ListBucket.ListBucketResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.ListBucket.ListBucketResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.ListBucket.ListBucket
module Network.DO.Spaces.Actions.ListAllBuckets
-- | List all of your Buckets withing the Region you have
-- configured
data ListAllBuckets
ListAllBuckets :: ListAllBuckets
data ListAllBucketsResponse
ListAllBucketsResponse :: Owner -> Seq BucketInfo -> ListAllBucketsResponse
[owner] :: ListAllBucketsResponse -> Owner
[buckets] :: ListAllBucketsResponse -> Seq BucketInfo
instance GHC.Generics.Generic Network.DO.Spaces.Actions.ListAllBuckets.ListAllBuckets
instance GHC.Classes.Eq Network.DO.Spaces.Actions.ListAllBuckets.ListAllBuckets
instance GHC.Show.Show Network.DO.Spaces.Actions.ListAllBuckets.ListAllBuckets
instance GHC.Generics.Generic Network.DO.Spaces.Actions.ListAllBuckets.ListAllBucketsResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.ListAllBuckets.ListAllBucketsResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.ListAllBuckets.ListAllBucketsResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.ListAllBuckets.ListAllBuckets
module Network.DO.Spaces.Actions.GetObjectInfo
-- | Get information about an Object; the response does not contain
-- the object itself
data GetObjectInfo
GetObjectInfo :: Bucket -> Object -> GetObjectInfo
[$sel:bucket:GetObjectInfo] :: GetObjectInfo -> Bucket
[$sel:object:GetObjectInfo] :: GetObjectInfo -> Object
type GetObjectInfoResponse = ObjectMetadata
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetObjectInfo.GetObjectInfo
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetObjectInfo.GetObjectInfo
instance GHC.Show.Show Network.DO.Spaces.Actions.GetObjectInfo.GetObjectInfo
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetObjectInfo.GetObjectInfo
module Network.DO.Spaces.Actions.GetObjectACLs
-- | Get the full Access Control List associated with a Bucket
data GetObjectACLs
GetObjectACLs :: Bucket -> Object -> GetObjectACLs
[$sel:bucket:GetObjectACLs] :: GetObjectACLs -> Bucket
[$sel:object:GetObjectACLs] :: GetObjectACLs -> Object
type GetObjectACLsResponse = ACLResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetObjectACLs.GetObjectACLs
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetObjectACLs.GetObjectACLs
instance GHC.Show.Show Network.DO.Spaces.Actions.GetObjectACLs.GetObjectACLs
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetObjectACLs.GetObjectACLs
module Network.DO.Spaces.Actions.GetObject
-- | Retrieve an Object along with its associated metadata. The
-- object's data is read into a lazy ByteString
data GetObject
GetObject :: Bucket -> Object -> GetObject
[$sel:bucket:GetObject] :: GetObject -> Bucket
[$sel:object:GetObject] :: GetObject -> Object
data GetObjectResponse
GetObjectResponse :: ObjectMetadata -> ByteString -> GetObjectResponse
[$sel:objectMetadata:GetObjectResponse] :: GetObjectResponse -> ObjectMetadata
[$sel:objectData:GetObjectResponse] :: GetObjectResponse -> ByteString
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetObject.GetObject
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetObject.GetObject
instance GHC.Show.Show Network.DO.Spaces.Actions.GetObject.GetObject
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetObject.GetObjectResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetObject.GetObjectResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.GetObject.GetObjectResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetObject.GetObject
module Network.DO.Spaces.Actions.GetBucketLocation
-- | Query the location (the Region) of a Bucket
newtype GetBucketLocation
GetBucketLocation :: Bucket -> GetBucketLocation
-- | The name of the Bucket whose location you'd like to retrieve
[$sel:bucket:GetBucketLocation] :: GetBucketLocation -> Bucket
newtype GetBucketLocationResponse
GetBucketLocationResponse :: Region -> GetBucketLocationResponse
-- | The Region of the queried Bucket
[$sel:locationConstraint:GetBucketLocationResponse] :: GetBucketLocationResponse -> Region
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocation
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocation
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocation
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocationResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocationResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocationResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetBucketLocation.GetBucketLocation
module Network.DO.Spaces.Actions.GetBucketLifecycle
-- | Get the LifecycleRule configuration for a Bucket. Note
-- that unless you have explicitly configured lifecycle rules, this will
-- fail with a 404 status and an error code of
-- NoSuchLifecycleConfiguration
newtype GetBucketLifecycle
GetBucketLifecycle :: Bucket -> GetBucketLifecycle
[$sel:bucket:GetBucketLifecycle] :: GetBucketLifecycle -> Bucket
newtype GetBucketLifecycleResponse
GetBucketLifecycleResponse :: [LifecycleRule] -> GetBucketLifecycleResponse
[$sel:rules:GetBucketLifecycleResponse] :: GetBucketLifecycleResponse -> [LifecycleRule]
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycle
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycle
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycle
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycleResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycleResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycleResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetBucketLifecycle.GetBucketLifecycle
module Network.DO.Spaces.Actions.GetBucketCORS
-- | Get the CORSRules associated with a Bucket
newtype GetBucketCORS
GetBucketCORS :: Bucket -> GetBucketCORS
[$sel:bucket:GetBucketCORS] :: GetBucketCORS -> Bucket
newtype GetBucketCORSResponse
GetBucketCORSResponse :: Seq CORSRule -> GetBucketCORSResponse
[$sel:rules:GetBucketCORSResponse] :: GetBucketCORSResponse -> Seq CORSRule
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORS
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORS
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORS
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORSResponse
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORSResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORSResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetBucketCORS.GetBucketCORS
module Network.DO.Spaces.Actions.GetBucketACLs
-- | Get the full Access Control List associated with a Bucket
newtype GetBucketACLs
GetBucketACLs :: Bucket -> GetBucketACLs
[$sel:bucket:GetBucketACLs] :: GetBucketACLs -> Bucket
type GetBucketACLsResponse = ACLResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.GetBucketACLs.GetBucketACLs
instance GHC.Generics.Generic Network.DO.Spaces.Actions.GetBucketACLs.GetBucketACLs
instance GHC.Show.Show Network.DO.Spaces.Actions.GetBucketACLs.GetBucketACLs
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.GetBucketACLs.GetBucketACLs
module Network.DO.Spaces.Actions.CreateBucket
-- | Create a new, empty Bucket
data CreateBucket
CreateBucket :: Bucket -> Maybe Region -> Maybe CannedACL -> CreateBucket
-- | The name of the new Bucket to create
[bucket] :: CreateBucket -> Bucket
[region] :: CreateBucket -> Maybe Region
-- | The CannedACL to use; defaults to Private
[acl] :: CreateBucket -> Maybe CannedACL
type CreateBucketResponse = ()
instance GHC.Generics.Generic Network.DO.Spaces.Actions.CreateBucket.CreateBucket
instance GHC.Classes.Eq Network.DO.Spaces.Actions.CreateBucket.CreateBucket
instance GHC.Show.Show Network.DO.Spaces.Actions.CreateBucket.CreateBucket
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.CreateBucket.CreateBucket
module Network.DO.Spaces.Actions.CopyObject
-- | Whether the Object's metadata should be copied or replaced.
-- Replace is required to copy an object to itself
data MetadataDirective
Copy :: MetadataDirective
Replace :: MetadataDirective
-- | Copy and Object from one Bucket to another. Both buckets
-- must be in the same region
data CopyObject
CopyObject :: Bucket -> Bucket -> Object -> Object -> MetadataDirective -> Maybe CannedACL -> CopyObject
[$sel:srcBucket:CopyObject] :: CopyObject -> Bucket
[$sel:destBucket:CopyObject] :: CopyObject -> Bucket
[$sel:srcObject:CopyObject] :: CopyObject -> Object
[$sel:destObject:CopyObject] :: CopyObject -> Object
[$sel:metadataDirective:CopyObject] :: CopyObject -> MetadataDirective
[$sel:acl:CopyObject] :: CopyObject -> Maybe CannedACL
data CopyObjectResponse
CopyObjectResponse :: ETag -> UTCTime -> CopyObjectResponse
[$sel:etag:CopyObjectResponse] :: CopyObjectResponse -> ETag
[$sel:lastModified:CopyObjectResponse] :: CopyObjectResponse -> UTCTime
instance GHC.Generics.Generic Network.DO.Spaces.Actions.CopyObject.MetadataDirective
instance GHC.Classes.Eq Network.DO.Spaces.Actions.CopyObject.MetadataDirective
instance GHC.Show.Show Network.DO.Spaces.Actions.CopyObject.MetadataDirective
instance GHC.Generics.Generic Network.DO.Spaces.Actions.CopyObject.CopyObject
instance GHC.Classes.Eq Network.DO.Spaces.Actions.CopyObject.CopyObject
instance GHC.Show.Show Network.DO.Spaces.Actions.CopyObject.CopyObject
instance GHC.Generics.Generic Network.DO.Spaces.Actions.CopyObject.CopyObjectResponse
instance GHC.Classes.Eq Network.DO.Spaces.Actions.CopyObject.CopyObjectResponse
instance GHC.Show.Show Network.DO.Spaces.Actions.CopyObject.CopyObjectResponse
instance Network.DO.Spaces.Types.MonadSpaces m => Network.DO.Spaces.Types.Action m Network.DO.Spaces.Actions.CopyObject.CopyObject
-- | This module re-exports the Action instances in the modules
-- below it
module Network.DO.Spaces.Actions
-- | Run an instance of Action, receiving a ConsumedResponse.
-- The retention of SpacesMetadata can be controlled by passing a
-- WithMetadata constructor
runAction :: forall a m. (MonadSpaces m, Action m a) => WithMetadata -> a -> m (SpacesResponse a)
parseErrorResponse :: (MonadThrow m, MonadIO m) => Status -> RawResponse m -> m APIException
-- | Interacting with DigitalOcean's Spaces API, a (largely) s3-compatible
-- object storage platform. This module exports actions to create a
-- Spaces client configuration as well as several convenience
-- actions. Most of the transactions exposed through the Spaces REST API
-- are supported here, including CRUD operations on buckets and objects,
-- bucket CORS configuration, and manipulating ACLs.
--
-- See the README in this repository for more information on using this
-- library
module Network.DO.Spaces
-- | Perform a transaction using your Spaces client configuration.
-- Note that this does not perform any exception handling; if caught at
-- the lower level, exceptions are generally re-thrown as
-- SpacesExceptions
runSpaces :: Spaces -> SpacesT m a -> m a
-- | Create a new Spaces by specifying a method to retrieve the
-- region and your credentials.
--
-- Discover will first try to find a credentials file (see the
-- notes on FromFile below) in ~.awscredentials or
-- $XDG_CONFIG_HOMEdo-spacescredentials, in that order,
-- using the [default] profile. Failing that, it will try the
-- equivalent of FromEnv Nothing (see the notes below).
--
-- FromFile expects a configuration file in the same format as AWS
-- credentials files, with the same field names. For example:
--
--
-- [default]
-- aws_access_key_id=AKIAIOSFODNN7EXAMPLE
-- aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
-- aws_default_region=fra1
--
--
-- When provided with Nothing, FromEnv will look up the
-- following environment variables to find your region and keys:
--
--
-- - For the
-- Region:
AWS_DEFAULT_REGION
- OR
-- SPACES_DEFAULT_REGION
-- - For the
-- AccessKey:
AWS_ACCESS_KEY_ID
- OR
-- SPACES_ACCESS_KEY_ID
- OR
-- SPACES_ACCESS_KEY
-- - For the
-- SecretKey:
AWS_SECRET_ACCESS_KEY
- OR
-- SPACES_SECRET_ACCESS_KEY
- OR
-- SPACES_SECRET_KEY
--
--
-- Alternatively, you can directly specify a tuple of environment
-- variables to search for.
--
-- You can also choose to provide the region and both keys yourself with
-- Explicit
newSpaces :: (MonadThrow m, MonadIO m) => CredentialSource -> m Spaces
-- | Upload an Object within a single request
uploadObject :: MonadSpaces m => Maybe MimeType -> Bucket -> Object -> BodyBS m -> m (SpacesResponse UploadObject)
-- | Initiate and complete a multipart upload, using default
-- UploadHeaders. If a SpacesException is thrown while
-- performing the transaction, an attempt will be made to run a
-- CancelMultipart request, and the exception will be rethrown
multipartObject :: MonadSpaces m => Maybe MimeType -> Bucket -> Object -> Int -> BodyBS m -> m (SpacesResponse CompleteMultipart)
-- | Upload a file's contents as an Object. This will attempt to set
-- the correct MimeType based on the file extension
uploadFile :: forall m. MonadSpaces m => Bucket -> Object -> FilePath -> m (SpacesResponse UploadObject)
-- | Get an Object (retrieves the actual body of the object)
getObject :: MonadSpaces m => Bucket -> Object -> m (SpacesResponse GetObject)
-- | Get an Object's data and write it to the provided
-- FilePath
getObjectSinkFile :: MonadSpaces m => Bucket -> Object -> FilePath -> m ()
-- | Get information about an Object (does not retrieve the body of
-- the object)
getObjectInfo :: MonadSpaces m => Bucket -> Object -> m (SpacesResponse GetObjectInfo)
-- | Copy an Object from one Bucket to another; this chooses
-- a number of defaults to represent the most common cases and avoid a
-- preponderance of parameters. Objects are copied using default
-- ACLs with the COPY metadata directive.
--
-- If you'd like to use a specfic CannedACL or
-- MetadataDirective, use CopyObject directly with
-- runAction
copyObject :: MonadSpaces m => Bucket -> Bucket -> Object -> Object -> m (SpacesResponse CopyObject)
-- | Copy an Object within the same Bucket, using defaults
-- for the MetadataDirective and CannedACL
copyObjectWithin :: MonadSpaces m => Bucket -> Object -> Object -> m (SpacesResponse CopyObject)
-- | Copy an Object to itself, overwriting its associated metadata
overwriteObject :: MonadSpaces m => Bucket -> Object -> m (SpacesResponse CopyObject)
-- | Delete a single Object
deleteObject :: MonadSpaces m => Bucket -> Object -> m (SpacesResponse DeleteObject)
-- | Get an Object's Access Control Lists
getObjectACLs :: MonadSpaces m => Bucket -> Object -> m (SpacesResponse GetObjectACLs)
-- | Set an Object's Access Control Lists
setObjectACLs :: MonadSpaces m => Bucket -> Object -> Owner -> [Grant] -> m (SpacesResponse SetObjectACLs)
-- | Create a new Bucket
createBucket :: MonadSpaces m => Bucket -> Maybe Region -> Maybe CannedACL -> m (SpacesResponse CreateBucket)
-- | Delete a Bucket
deleteBucket :: MonadSpaces m => Bucket -> m (SpacesResponse DeleteBucket)
-- | Get the location (Region) of a Bucket
getBucketLocation :: MonadSpaces m => Bucket -> m (SpacesResponse GetBucketLocation)
-- | List every Bucket associated with your Spaces account
listAllBuckets :: MonadSpaces m => m (SpacesResponse ListAllBuckets)
-- | List the Objects of a Bucket, without grouping,
-- delimiting, or limiting the keys (i.e. list all Objects
-- non-hierarchically, up to the Spaces limit)
listBucket :: MonadSpaces m => Bucket -> m (SpacesResponse ListBucket)
-- | List the Objects of a Bucket, using a delimiter and
-- prefix to group objects. For example / can be used as a
-- delimiter to treat objects as directories within the bucket, which can
-- further be combined with a text prefix
listBucketGrouped :: MonadSpaces m => Bucket -> Char -> Text -> m (SpacesResponse ListBucket)
-- | Recursively list all Objects in a Bucket, calling
-- ListBucket until isTruncated is False. This
-- operation may take some time, depending on the total number of objects
-- in your bucket
listBucketRec :: MonadSpaces m => Bucket -> m (Seq ObjectInfo)
-- | Get the CORSRules configured for a given Bucket
getBucketCORS :: MonadSpaces m => Bucket -> m (SpacesResponse GetBucketCORS)
-- | Delete the existing configured CORSRules for a given
-- Bucket
deleteBucketCORS :: MonadSpaces m => Bucket -> m (SpacesResponse DeleteBucketCORS)
-- | Set CORSRules for a given Bucket
setBucketCORS :: MonadSpaces m => Bucket -> [CORSRule] -> m (SpacesResponse SetBucketCORS)
-- | Get a Bucket's Access Control Lists
getBucketACLs :: MonadSpaces m => Bucket -> m (SpacesResponse GetBucketACLs)
-- | Set a Bucket's Access Control Lists. Spaces only allows a
-- limited subset of s3 ACLs at the moment. It may be preferable to use a
-- CannedACL when creating new resources rather than using this
-- action, which is provided for the sake of completeness.
--
-- Note that to allow public read-only access to your bucket, you
-- must simultaneously set full owner control.
setBucketACLs :: MonadSpaces m => Bucket -> [Grant] -> Owner -> m (SpacesResponse SetBucketACLs)
-- | Get a Bucket's LifecycleRule configuration . Note that
-- unless you have explicitly configured lifecycle rules, this will fail
-- with a 404 status and an error code of
-- NoSuchLifecycleConfiguration
getBucketLifecycleRules :: MonadSpaces m => Bucket -> m (SpacesResponse GetBucketLifecycle)
-- | Set a Bucket's LifecycleRule configuration
setBucketLifecycleRules :: MonadSpaces m => Bucket -> [LifecycleRule] -> m (SpacesResponse SetBucketLifecycle)
-- | Delete a Bucket's LifecycleRule configuration
deleteBucketLifecycleRules :: MonadSpaces m => Bucket -> m (SpacesResponse DeleteBucketLifecycle)
-- | A client for interacting with the DO Spaces API
data Spaces
-- | A ConsumedResponse with optional SpacesMetadata
data SpacesResponse a
-- | Metadata and other response information returned from each Spaces API
-- transaction; it can be helpful to retain this at times
data SpacesMetadata
-- | A synonym for the constraints necessary to run SpacesT actions
type MonadSpaces m = (MonadReader Spaces m, MonadIO m, MonadUnliftIO m, MonadCatch m)
-- | The name of a single storage bucket
data Bucket
-- | Smart constructor for Buckets; names must conform to the
-- following rules:
--
--
--
-- This function ensures that names are valid and will also convert the
-- Text to lowercase
mkBucket :: MonadThrow m => Text -> m Bucket
-- | The name of a "key", in AWS parlance
data Object
-- | Smart constructor for Objects; names must not be empty
mkObject :: MonadThrow m => Text -> m Object
-- | DO regions where Spaces is available (only a subset of all regions)
data Region
-- | NYC3
NewYork :: Region
-- | AMS3
Amsterdam :: Region
-- | SFO3
SanFrancisco :: Region
-- | SGP1
Singapore :: Region
-- | FRA1
Frankfurt :: Region
-- | Spaces access key
newtype AccessKey
AccessKey :: ByteString -> AccessKey
[$sel:unAccessKey:AccessKey] :: AccessKey -> ByteString
-- | Spaces secret key
newtype SecretKey
SecretKey :: ByteString -> SecretKey
[$sel:unSecretKey:SecretKey] :: SecretKey -> ByteString
-- | How to discover the Region, AccessKey, and
-- SecretKey when creating a new Spaces client.
data CredentialSource
-- | Try a sequence of different sources until one succeeds
Discover :: CredentialSource
-- | Region, AccessKey and SecretKey env vars
FromEnv :: Maybe (Text, Text, Text) -> CredentialSource
-- | Load your credentials from a file, optionally providing the profile to
-- use (or default as the... default).
FromFile :: FilePath -> Maybe Profile -> CredentialSource
-- | Provide all values explicitly
Explicit :: Region -> AccessKey -> SecretKey -> CredentialSource
-- | The name of a per-project configuration profile to select when loading
-- credentials from a file
type Profile = Text
-- | Cross-origin resource sharing rules
data CORSRule
-- | Smart constructor for CORSRule. Ensures that both origins and
-- header names contain a maximum of one wildcard and removes duplicates
-- from both headers and methods
mkCORSRule :: MonadThrow m => Text -> [Method] -> [HeaderName] -> m CORSRule
-- | An individual access grant
data Grant
-- | Information about who an access grant applies to
data Grantee
-- | Nominally contains a URI value, but Spaces only supports a single
-- value for group access grants
Group :: Grantee
CanonicalUser :: Owner -> Grantee
-- | Access grant level; Spaces currently only supports these two levels
data Permission
ReadOnly :: Permission
FullControl :: Permission
-- | A unique ID for a LifecycleRule
data LifecycleID
-- | Smart constructor for LifecycleID, which may contain a maximum
-- of 255 characters, including spaces
mkLifecycleID :: MonadThrow m => Text -> m LifecycleID
-- | The base Exception type for both ClientExceptions and
-- APIExceptions
data SpacesException
-- | An exception generated within the Spaces client
data ClientException
InvalidRequest :: Text -> ClientException
InvalidResponse :: Text -> ClientException
InvalidXML :: Text -> ClientException
ConfigurationError :: Text -> ClientException
-- | This includes the raw Response body, read into a lazy
-- ByteString
HTTPStatus :: Status -> ByteString -> ClientException
OtherError :: Text -> ClientException
-- | An s3-compatible API error response, sent as XML
data APIException