mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-12 04:08:29 +01:00
38 lines
1.5 KiB
Haskell
38 lines
1.5 KiB
Haskell
module Types where
|
|
|
|
import ClassyPrelude.Yesod
|
|
import Data.BlobStore (ToPath (..))
|
|
import Text.Blaze (ToMarkup)
|
|
import Database.Persist.Sql (PersistFieldSql)
|
|
|
|
newtype PackageName = PackageName { unPackageName :: Text }
|
|
deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup)
|
|
newtype Version = Version { unVersion :: Text }
|
|
deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup)
|
|
newtype PackageSetIdent = PackageSetIdent { unPackageSetIdent :: Text }
|
|
deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup, PersistField, PersistFieldSql)
|
|
|
|
data StoreKey = HackageCabal !PackageName !Version
|
|
| HackageSdist !PackageName !Version
|
|
| CabalIndex !PackageSetIdent
|
|
| CustomSdist !PackageSetIdent !PackageName !Version
|
|
|
|
instance ToPath StoreKey where
|
|
toPath (HackageCabal name version) = ["hackage", toPathPiece name, toPathPiece version ++ ".cabal"]
|
|
toPath (HackageSdist name version) = ["hackage", toPathPiece name, toPathPiece version ++ ".tar.gz"]
|
|
toPath (CabalIndex ident) = ["cabal-index", toPathPiece ident ++ ".tar.gz"]
|
|
toPath (CustomSdist ident name version) =
|
|
[ "custom-tarball"
|
|
, toPathPiece ident
|
|
, toPathPiece name
|
|
, toPathPiece version ++ ".tar.gz"
|
|
]
|
|
|
|
newtype HackageRoot = HackageRoot { unHackageRoot :: Text }
|
|
deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup)
|
|
|
|
class HasHackageRoot a where
|
|
getHackageRoot :: a -> HackageRoot
|
|
instance HasHackageRoot HackageRoot where
|
|
getHackageRoot = id
|