cachix-api-1.7: src/Cachix/Types/BinaryCache.hs
module Cachix.Types.BinaryCache where
import Cachix.Types.Permission (Permission)
import Data.Aeson (FromJSON, ToJSON)
import Data.Swagger (ToParamSchema (..), ToSchema)
import Protolude
import Servant.API
import Text.Read
type BinaryCacheName = Text
data BinaryCache = BinaryCache
{ name :: Text,
uri :: Text,
isPublic :: Bool,
publicSigningKeys :: [Text],
githubUsername :: Text,
permission :: Permission,
preferredCompressionMethod :: CompressionMethod
}
deriving (Show, Generic, FromJSON, ToJSON, ToSchema, NFData)
data CompressionMethod = XZ | ZSTD
deriving (Show, Eq, Generic, FromJSON, ToJSON, ToSchema, NFData)
instance Read CompressionMethod where
readsPrec _ value =
case map toUpper value of
"XZ" -> [(XZ, "")]
"ZST" -> [(ZSTD, "")]
"ZSTD" -> [(ZSTD, "")]
_ -> []
instance FromHttpApiData CompressionMethod where
parseUrlPiece "xz" = Right XZ
parseUrlPiece "zst" = Right ZSTD
parseUrlPiece compressionMethod = Left $ "Wrong compression method: " <> compressionMethod
instance ToHttpApiData CompressionMethod where
toUrlPiece XZ = "xz"
toUrlPiece ZSTD = "zst"
instance ToParamSchema CompressionMethod where
toParamSchema _ = toParamSchema (Proxy :: Proxy Text)