module Cachix.Types.NarInfoCreate ( NarInfoCreate(..) , NarInfoInvalid , isNarInfoCreateValid ) where import Control.Exception (Exception) import Data.Aeson ( FromJSON , ToJSON ) import Data.Swagger import Data.Text ( Text ) import GHC.Generics ( Generic ) -- TODO: get rid of c prefix -- | Client create type data NarInfoCreate = NarInfoCreate { cStoreHash :: Text -- ^ $storePrefix / $storeHash - $storeSuffix , cStoreSuffix :: Text -- ^ $storePrefix / $storeHash - $storeSuffix , cNarHash :: Text , cNarSize :: Integer , cFileHash :: Text , cFileSize :: Integer , cReferences :: [Text] , cDeriver :: Text , cSig :: Text } deriving (Generic, Show, FromJSON, ToJSON, ToSchema) data NarInfoInvalid = NarSizeIsZero deriving (Show, Exception) isNarInfoCreateValid :: NarInfoCreate -> Either NarInfoInvalid () isNarInfoCreateValid nic | cNarSize nic == 0 = Left NarSizeIsZero | otherwise = Right ()