module Cachix.Types.MultipartUpload where

import Cachix.Types.NarInfoCreate (NarInfoCreate)
import Data.Aeson (FromJSON, ToJSON)
import Data.Swagger (ToSchema)
import Data.UUID (UUID)
import Protolude

data CreateMultipartUploadResponse = CreateMultipartUploadResponse
  { CreateMultipartUploadResponse -> UUID
narId :: UUID,
    CreateMultipartUploadResponse -> Text
uploadId :: Text
  }
  deriving stock (forall x.
Rep CreateMultipartUploadResponse x
-> CreateMultipartUploadResponse
forall x.
CreateMultipartUploadResponse
-> Rep CreateMultipartUploadResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CreateMultipartUploadResponse x
-> CreateMultipartUploadResponse
$cfrom :: forall x.
CreateMultipartUploadResponse
-> Rep CreateMultipartUploadResponse x
Generic, Int -> CreateMultipartUploadResponse -> ShowS
[CreateMultipartUploadResponse] -> ShowS
CreateMultipartUploadResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateMultipartUploadResponse] -> ShowS
$cshowList :: [CreateMultipartUploadResponse] -> ShowS
show :: CreateMultipartUploadResponse -> String
$cshow :: CreateMultipartUploadResponse -> String
showsPrec :: Int -> CreateMultipartUploadResponse -> ShowS
$cshowsPrec :: Int -> CreateMultipartUploadResponse -> ShowS
Show)
  deriving anyclass ([CreateMultipartUploadResponse] -> Encoding
[CreateMultipartUploadResponse] -> Value
CreateMultipartUploadResponse -> Encoding
CreateMultipartUploadResponse -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CreateMultipartUploadResponse] -> Encoding
$ctoEncodingList :: [CreateMultipartUploadResponse] -> Encoding
toJSONList :: [CreateMultipartUploadResponse] -> Value
$ctoJSONList :: [CreateMultipartUploadResponse] -> Value
toEncoding :: CreateMultipartUploadResponse -> Encoding
$ctoEncoding :: CreateMultipartUploadResponse -> Encoding
toJSON :: CreateMultipartUploadResponse -> Value
$ctoJSON :: CreateMultipartUploadResponse -> Value
ToJSON, Value -> Parser [CreateMultipartUploadResponse]
Value -> Parser CreateMultipartUploadResponse
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [CreateMultipartUploadResponse]
$cparseJSONList :: Value -> Parser [CreateMultipartUploadResponse]
parseJSON :: Value -> Parser CreateMultipartUploadResponse
$cparseJSON :: Value -> Parser CreateMultipartUploadResponse
FromJSON, Proxy CreateMultipartUploadResponse
-> Declare (Definitions Schema) NamedSchema
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy CreateMultipartUploadResponse
-> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy CreateMultipartUploadResponse
-> Declare (Definitions Schema) NamedSchema
ToSchema, CreateMultipartUploadResponse -> ()
forall a. (a -> ()) -> NFData a
rnf :: CreateMultipartUploadResponse -> ()
$crnf :: CreateMultipartUploadResponse -> ()
NFData)

-- | Any hashes or headers required to create the presigned URL.
data SigningData = SigningData
  { SigningData -> Text
contentMD5 :: Text
  }
  deriving stock (forall x. Rep SigningData x -> SigningData
forall x. SigningData -> Rep SigningData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SigningData x -> SigningData
$cfrom :: forall x. SigningData -> Rep SigningData x
Generic, Int -> SigningData -> ShowS
[SigningData] -> ShowS
SigningData -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SigningData] -> ShowS
$cshowList :: [SigningData] -> ShowS
show :: SigningData -> String
$cshow :: SigningData -> String
showsPrec :: Int -> SigningData -> ShowS
$cshowsPrec :: Int -> SigningData -> ShowS
Show)
  deriving anyclass ([SigningData] -> Encoding
[SigningData] -> Value
SigningData -> Encoding
SigningData -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [SigningData] -> Encoding
$ctoEncodingList :: [SigningData] -> Encoding
toJSONList :: [SigningData] -> Value
$ctoJSONList :: [SigningData] -> Value
toEncoding :: SigningData -> Encoding
$ctoEncoding :: SigningData -> Encoding
toJSON :: SigningData -> Value
$ctoJSON :: SigningData -> Value
ToJSON, Value -> Parser [SigningData]
Value -> Parser SigningData
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [SigningData]
$cparseJSONList :: Value -> Parser [SigningData]
parseJSON :: Value -> Parser SigningData
$cparseJSON :: Value -> Parser SigningData
FromJSON, Proxy SigningData -> Declare (Definitions Schema) NamedSchema
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy SigningData -> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy SigningData -> Declare (Definitions Schema) NamedSchema
ToSchema, SigningData -> ()
forall a. (a -> ()) -> NFData a
rnf :: SigningData -> ()
$crnf :: SigningData -> ()
NFData)

newtype UploadPartResponse = UploadPartResponse {UploadPartResponse -> Text
uploadUrl :: Text}
  deriving stock (forall x. Rep UploadPartResponse x -> UploadPartResponse
forall x. UploadPartResponse -> Rep UploadPartResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep UploadPartResponse x -> UploadPartResponse
$cfrom :: forall x. UploadPartResponse -> Rep UploadPartResponse x
Generic, Int -> UploadPartResponse -> ShowS
[UploadPartResponse] -> ShowS
UploadPartResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UploadPartResponse] -> ShowS
$cshowList :: [UploadPartResponse] -> ShowS
show :: UploadPartResponse -> String
$cshow :: UploadPartResponse -> String
showsPrec :: Int -> UploadPartResponse -> ShowS
$cshowsPrec :: Int -> UploadPartResponse -> ShowS
Show)
  deriving anyclass ([UploadPartResponse] -> Encoding
[UploadPartResponse] -> Value
UploadPartResponse -> Encoding
UploadPartResponse -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [UploadPartResponse] -> Encoding
$ctoEncodingList :: [UploadPartResponse] -> Encoding
toJSONList :: [UploadPartResponse] -> Value
$ctoJSONList :: [UploadPartResponse] -> Value
toEncoding :: UploadPartResponse -> Encoding
$ctoEncoding :: UploadPartResponse -> Encoding
toJSON :: UploadPartResponse -> Value
$ctoJSON :: UploadPartResponse -> Value
ToJSON, Value -> Parser [UploadPartResponse]
Value -> Parser UploadPartResponse
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [UploadPartResponse]
$cparseJSONList :: Value -> Parser [UploadPartResponse]
parseJSON :: Value -> Parser UploadPartResponse
$cparseJSON :: Value -> Parser UploadPartResponse
FromJSON, Proxy UploadPartResponse
-> Declare (Definitions Schema) NamedSchema
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy UploadPartResponse
-> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy UploadPartResponse
-> Declare (Definitions Schema) NamedSchema
ToSchema, UploadPartResponse -> ()
forall a. (a -> ()) -> NFData a
rnf :: UploadPartResponse -> ()
$crnf :: UploadPartResponse -> ()
NFData)

data CompletedPart = CompletedPart
  { CompletedPart -> Int
partNumber :: Int,
    -- | An opaque identifier for the uploaded part.
    CompletedPart -> Text
eTag :: Text
  }
  deriving stock (forall x. Rep CompletedPart x -> CompletedPart
forall x. CompletedPart -> Rep CompletedPart x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CompletedPart x -> CompletedPart
$cfrom :: forall x. CompletedPart -> Rep CompletedPart x
Generic, Int -> CompletedPart -> ShowS
[CompletedPart] -> ShowS
CompletedPart -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CompletedPart] -> ShowS
$cshowList :: [CompletedPart] -> ShowS
show :: CompletedPart -> String
$cshow :: CompletedPart -> String
showsPrec :: Int -> CompletedPart -> ShowS
$cshowsPrec :: Int -> CompletedPart -> ShowS
Show)
  deriving anyclass ([CompletedPart] -> Encoding
[CompletedPart] -> Value
CompletedPart -> Encoding
CompletedPart -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CompletedPart] -> Encoding
$ctoEncodingList :: [CompletedPart] -> Encoding
toJSONList :: [CompletedPart] -> Value
$ctoJSONList :: [CompletedPart] -> Value
toEncoding :: CompletedPart -> Encoding
$ctoEncoding :: CompletedPart -> Encoding
toJSON :: CompletedPart -> Value
$ctoJSON :: CompletedPart -> Value
ToJSON, Value -> Parser [CompletedPart]
Value -> Parser CompletedPart
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [CompletedPart]
$cparseJSONList :: Value -> Parser [CompletedPart]
parseJSON :: Value -> Parser CompletedPart
$cparseJSON :: Value -> Parser CompletedPart
FromJSON, Proxy CompletedPart -> Declare (Definitions Schema) NamedSchema
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy CompletedPart -> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy CompletedPart -> Declare (Definitions Schema) NamedSchema
ToSchema, CompletedPart -> ()
forall a. (a -> ()) -> NFData a
rnf :: CompletedPart -> ()
$crnf :: CompletedPart -> ()
NFData)

type CompletedParts = Maybe (NonEmpty CompletedPart)

data CompletedMultipartUpload = CompletedMultipartUpload
  { -- | A list of 'CompletedPart`, sorted by the 'partNumber'.
    CompletedMultipartUpload -> CompletedParts
parts :: CompletedParts,
    -- | The narinfo to create after verifying the upload.
    CompletedMultipartUpload -> NarInfoCreate
narInfoCreate :: NarInfoCreate
  }
  deriving stock (forall x.
Rep CompletedMultipartUpload x -> CompletedMultipartUpload
forall x.
CompletedMultipartUpload -> Rep CompletedMultipartUpload x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep CompletedMultipartUpload x -> CompletedMultipartUpload
$cfrom :: forall x.
CompletedMultipartUpload -> Rep CompletedMultipartUpload x
Generic, Int -> CompletedMultipartUpload -> ShowS
[CompletedMultipartUpload] -> ShowS
CompletedMultipartUpload -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CompletedMultipartUpload] -> ShowS
$cshowList :: [CompletedMultipartUpload] -> ShowS
show :: CompletedMultipartUpload -> String
$cshow :: CompletedMultipartUpload -> String
showsPrec :: Int -> CompletedMultipartUpload -> ShowS
$cshowsPrec :: Int -> CompletedMultipartUpload -> ShowS
Show)
  deriving anyclass ([CompletedMultipartUpload] -> Encoding
[CompletedMultipartUpload] -> Value
CompletedMultipartUpload -> Encoding
CompletedMultipartUpload -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [CompletedMultipartUpload] -> Encoding
$ctoEncodingList :: [CompletedMultipartUpload] -> Encoding
toJSONList :: [CompletedMultipartUpload] -> Value
$ctoJSONList :: [CompletedMultipartUpload] -> Value
toEncoding :: CompletedMultipartUpload -> Encoding
$ctoEncoding :: CompletedMultipartUpload -> Encoding
toJSON :: CompletedMultipartUpload -> Value
$ctoJSON :: CompletedMultipartUpload -> Value
ToJSON, Value -> Parser [CompletedMultipartUpload]
Value -> Parser CompletedMultipartUpload
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [CompletedMultipartUpload]
$cparseJSONList :: Value -> Parser [CompletedMultipartUpload]
parseJSON :: Value -> Parser CompletedMultipartUpload
$cparseJSON :: Value -> Parser CompletedMultipartUpload
FromJSON, Proxy CompletedMultipartUpload
-> Declare (Definitions Schema) NamedSchema
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy CompletedMultipartUpload
-> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy CompletedMultipartUpload
-> Declare (Definitions Schema) NamedSchema
ToSchema)