packages feed

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)