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
$cfrom :: forall x. NarInfoCreate -> Rep NarInfoCreate x
from :: forall x. NarInfoCreate -> Rep NarInfoCreate x
$cto :: forall x. Rep NarInfoCreate x -> NarInfoCreate
to :: forall x. Rep NarInfoCreate x -> NarInfoCreate
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
$cshowsPrec :: Int -> NarInfoCreate -> ShowS
showsPrec :: Int -> NarInfoCreate -> ShowS
$cshow :: NarInfoCreate -> String
show :: NarInfoCreate -> String
$cshowList :: [NarInfoCreate] -> ShowS
showList :: [NarInfoCreate] -> ShowS
Show, Maybe NarInfoCreate
Value -> Parser [NarInfoCreate]
Value -> Parser NarInfoCreate
(Value -> Parser NarInfoCreate)
-> (Value -> Parser [NarInfoCreate])
-> Maybe NarInfoCreate
-> FromJSON NarInfoCreate
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser NarInfoCreate
parseJSON :: Value -> Parser NarInfoCreate
$cparseJSONList :: Value -> Parser [NarInfoCreate]
parseJSONList :: Value -> Parser [NarInfoCreate]
$comittedField :: Maybe NarInfoCreate
omittedField :: Maybe NarInfoCreate
FromJSON, [NarInfoCreate] -> Value
[NarInfoCreate] -> Encoding
NarInfoCreate -> Bool
NarInfoCreate -> Value
NarInfoCreate -> Encoding
(NarInfoCreate -> Value)
-> (NarInfoCreate -> Encoding)
-> ([NarInfoCreate] -> Value)
-> ([NarInfoCreate] -> Encoding)
-> (NarInfoCreate -> Bool)
-> ToJSON NarInfoCreate
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: NarInfoCreate -> Value
toJSON :: NarInfoCreate -> Value
$ctoEncoding :: NarInfoCreate -> Encoding
toEncoding :: NarInfoCreate -> Encoding
$ctoJSONList :: [NarInfoCreate] -> Value
toJSONList :: [NarInfoCreate] -> Value
$ctoEncodingList :: [NarInfoCreate] -> Encoding
toEncodingList :: [NarInfoCreate] -> Encoding
$comitField :: NarInfoCreate -> Bool
omitField :: NarInfoCreate -> Bool
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
$cdeclareNamedSchema :: Proxy NarInfoCreate -> Declare (Definitions Schema) NamedSchema
declareNamedSchema :: 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
$cshowsPrec :: Int -> NarInfoInvalid -> ShowS
showsPrec :: Int -> NarInfoInvalid -> ShowS
$cshow :: NarInfoInvalid -> String
show :: NarInfoInvalid -> String
$cshowList :: [NarInfoInvalid] -> ShowS
showList :: [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
$ctoException :: NarInfoInvalid -> SomeException
toException :: NarInfoInvalid -> SomeException
$cfromException :: SomeException -> Maybe NarInfoInvalid
fromException :: SomeException -> Maybe NarInfoInvalid
$cdisplayException :: NarInfoInvalid -> String
displayException :: NarInfoInvalid -> String
Exception)

isNarInfoCreateValid :: NarInfoCreate -> Either NarInfoInvalid ()
isNarInfoCreateValid :: NarInfoCreate -> Either NarInfoInvalid ()
isNarInfoCreateValid NarInfoCreate
nic
  | NarInfoCreate -> Integer
cNarSize NarInfoCreate
nic Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
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 ()