module Cachix.Types.NarInfoCreate
  ( NarInfoCreate (..),
    NarInfoInvalid,
    isNarInfoCreateValid,
  )
where

import Data.Aeson
  ( FromJSON,
    ToJSON,
  )
import Data.Swagger
import Protolude

-- TODO: get rid of c prefix

-- | Client create type
data NarInfoCreate = NarInfoCreate
  { -- | \$storePrefix / $storeHash - $storeSuffix
    NarInfoCreate -> Text
cStoreHash :: Text,
    -- | \$storePrefix / $storeHash - $storeSuffix
    NarInfoCreate -> Text
cStoreSuffix :: Text,
    NarInfoCreate -> Text
cNarHash :: Text,
    NarInfoCreate -> Integer
cNarSize :: Integer,
    NarInfoCreate -> Text
cFileHash :: Text,
    NarInfoCreate -> Integer
cFileSize :: Integer,
    NarInfoCreate -> [Text]
cReferences :: [Text],
    NarInfoCreate -> Text
cDeriver :: Text,
    NarInfoCreate -> Maybe Text
cSig :: Maybe Text
  }
  deriving (forall x. Rep NarInfoCreate x -> NarInfoCreate
forall x. NarInfoCreate -> Rep NarInfoCreate x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep NarInfoCreate x -> NarInfoCreate
$cfrom :: forall x. NarInfoCreate -> Rep NarInfoCreate x
Generic, Int -> NarInfoCreate -> ShowS
[NarInfoCreate] -> ShowS
NarInfoCreate -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NarInfoCreate] -> ShowS
$cshowList :: [NarInfoCreate] -> ShowS
show :: NarInfoCreate -> String
$cshow :: NarInfoCreate -> String
showsPrec :: Int -> NarInfoCreate -> ShowS
$cshowsPrec :: Int -> NarInfoCreate -> ShowS
Show, Value -> Parser [NarInfoCreate]
Value -> Parser NarInfoCreate
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [NarInfoCreate]
$cparseJSONList :: Value -> Parser [NarInfoCreate]
parseJSON :: Value -> Parser NarInfoCreate
$cparseJSON :: Value -> Parser NarInfoCreate
FromJSON, [NarInfoCreate] -> Encoding
[NarInfoCreate] -> Value
NarInfoCreate -> Encoding
NarInfoCreate -> Value
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [NarInfoCreate] -> Encoding
$ctoEncodingList :: [NarInfoCreate] -> Encoding
toJSONList :: [NarInfoCreate] -> Value
$ctoJSONList :: [NarInfoCreate] -> Value
toEncoding :: NarInfoCreate -> Encoding
$ctoEncoding :: NarInfoCreate -> Encoding
toJSON :: NarInfoCreate -> Value
$ctoJSON :: NarInfoCreate -> Value
ToJSON, Proxy NarInfoCreate -> Declare (Definitions Schema) NamedSchema
forall a.
(Proxy a -> Declare (Definitions Schema) NamedSchema) -> ToSchema a
declareNamedSchema :: Proxy NarInfoCreate -> Declare (Definitions Schema) NamedSchema
$cdeclareNamedSchema :: Proxy NarInfoCreate -> Declare (Definitions Schema) NamedSchema
ToSchema)

data NarInfoInvalid
  = NarSizeIsZero
  deriving (Int -> NarInfoInvalid -> ShowS
[NarInfoInvalid] -> ShowS
NarInfoInvalid -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NarInfoInvalid] -> ShowS
$cshowList :: [NarInfoInvalid] -> ShowS
show :: NarInfoInvalid -> String
$cshow :: NarInfoInvalid -> String
showsPrec :: Int -> NarInfoInvalid -> ShowS
$cshowsPrec :: Int -> NarInfoInvalid -> ShowS
Show, Show NarInfoInvalid
Typeable NarInfoInvalid
SomeException -> Maybe NarInfoInvalid
NarInfoInvalid -> String
NarInfoInvalid -> SomeException
forall e.
Typeable e
-> Show e
-> (e -> SomeException)
-> (SomeException -> Maybe e)
-> (e -> String)
-> Exception e
displayException :: NarInfoInvalid -> String
$cdisplayException :: NarInfoInvalid -> String
fromException :: SomeException -> Maybe NarInfoInvalid
$cfromException :: SomeException -> Maybe NarInfoInvalid
toException :: NarInfoInvalid -> SomeException
$ctoException :: NarInfoInvalid -> SomeException
Exception)

isNarInfoCreateValid :: NarInfoCreate -> Either NarInfoInvalid ()
isNarInfoCreateValid :: NarInfoCreate -> Either NarInfoInvalid ()
isNarInfoCreateValid NarInfoCreate
nic
  | NarInfoCreate -> Integer
cNarSize NarInfoCreate
nic forall a. Eq a => a -> a -> Bool
== Integer
0 = forall a b. a -> Either a b
Left NarInfoInvalid
NarSizeIsZero
  | Bool
otherwise = forall a b. b -> Either a b
Right ()