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. NarInfoCreate -> Rep NarInfoCreate x)
-> (forall x. Rep NarInfoCreate x -> NarInfoCreate)
-> Generic NarInfoCreate
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
(Int -> NarInfoCreate -> ShowS)
-> (NarInfoCreate -> String)
-> ([NarInfoCreate] -> ShowS)
-> Show NarInfoCreate
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
(Value -> Parser NarInfoCreate)
-> (Value -> Parser [NarInfoCreate]) -> FromJSON 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] -> Value
[NarInfoCreate] -> Encoding
NarInfoCreate -> Value
NarInfoCreate -> Encoding
(NarInfoCreate -> Value)
-> (NarInfoCreate -> Encoding)
-> ([NarInfoCreate] -> Value)
-> ([NarInfoCreate] -> Encoding)
-> ToJSON NarInfoCreate
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
(Proxy NarInfoCreate -> Declare (Definitions Schema) NamedSchema)
-> ToSchema NarInfoCreate
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
(Int -> NarInfoInvalid -> ShowS)
-> (NarInfoInvalid -> String)
-> ([NarInfoInvalid] -> ShowS)
-> Show NarInfoInvalid
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
(Typeable NarInfoInvalid, Show NarInfoInvalid) =>
(NarInfoInvalid -> SomeException)
-> (SomeException -> Maybe NarInfoInvalid)
-> (NarInfoInvalid -> String)
-> Exception 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
$cp2Exception :: Show NarInfoInvalid
$cp1Exception :: Typeable NarInfoInvalid
Exception)

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