cachix-api-0.3.0: src/Cachix/Api/Types.hs
module Cachix.Api.Types where
import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON, ToJSON)
import Data.Monoid ((<>))
import Data.Swagger (ToParamSchema, ToSchema)
import Data.Text (Text, dropEnd, takeEnd)
import GHC.Generics (Generic)
import Servant.API
data NixCacheInfo
= NixCacheInfo
{ storeDir :: Text,
wantMassQuery :: Integer,
priority :: Integer
}
deriving (Generic, Show, FromJSON, ToJSON, ToSchema)
-- narinfo url includes storePath hash and .narinfo suffix
data NarInfo
= NarInfo
{ storePath :: Text,
-- ^ absolute path of the derivation in nix store
url :: Text,
-- ^ relative url (to current domain) to download nar file
compression :: Text,
-- ^ name of the compression algorithm, eg. xz
fileHash :: Text,
-- ^ sha256 hash of the compressed nar file
-- NOTE: to compute use "nix-hash --type sha256 --flat"
fileSize :: Integer,
-- ^ file size of compressed nar file
-- NOTE: du -b
narHash :: Text,
-- ^ sha256 hash of the decompressed nar file
-- NOTE: to compute use "nix-hash --type sha256 --flat --base32"
narSize :: Integer,
-- ^ file size of decompressed nar file
-- NOTE: du -b
references :: [Text],
-- ^ immediate dependencies of the storePath
-- NOTE: nix-store -q --references
deriver :: Text,
-- ^ relative store path (to nix store root) of the deriver
-- NOTE: nix-store -q --deriver
sig :: Text
-- ^ signature of fields: storePath, narHash, narSize, refs
}
deriving (Generic, Show, FromJSON, ToJSON, ToSchema)
data BinaryCache
= BinaryCache
{ name :: Text,
uri :: Text,
isPublic :: Bool,
publicSigningKeys :: [Text],
githubUsername :: Text
}
deriving (Show, Generic, FromJSON, ToJSON, ToSchema, NFData)
newtype BinaryCacheError
= BinaryCacheError
{ error :: Text
}
deriving (Generic, FromJSON, ToJSON)
-- | Hash of nar.xz file
newtype NarC = NarC Text deriving (Generic, ToSchema, ToParamSchema)
instance FromHttpApiData NarC where
parseUrlPiece s =
if takeEnd 7 s == ".nar.xz"
then Right $ NarC (dropEnd 7 s)
else Left ""
instance ToHttpApiData NarC where
toUrlPiece (NarC n) = n <> ".nar.xz"
-- | Store path hash
newtype NarInfoC = NarInfoC Text deriving (Generic, ToSchema, ToParamSchema)
instance FromHttpApiData NarInfoC where
parseUrlPiece s =
if takeEnd 8 s == ".narinfo"
then Right $ NarInfoC (dropEnd 8 s)
else Left ""
instance ToHttpApiData NarInfoC where
toUrlPiece (NarInfoC n) = n <> ".narinfo"
data User
= User
{ fullname :: Maybe Text,
username :: Text,
email :: Maybe Text,
hasOrgsAcccess :: Bool,
activeSubscription :: SubscriptionType,
subscriptionAccountId :: Maybe Text
}
deriving (Generic, FromJSON, ToJSON, ToSchema)
data SubscriptionType = Community | Starter | Basic | Pro
deriving (Generic, FromJSON, ToJSON, ToSchema, Show, Read)