hackage-server-0.4: Distribution/Server/Features/Distro/Types.hs
{-# LANGUAGE
DeriveDataTypeable
, GeneralizedNewtypeDeriving
, TemplateHaskell
#-}
module Distribution.Server.Features.Distro.Types where
import Distribution.Server.Framework.Instances ()
import Distribution.Server.Framework.MemSize
import Distribution.Server.Users.State()
import Distribution.Server.Users.Group (UserList)
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Distribution.Version as Version
import Distribution.Package
import Control.Applicative ((<$>))
import Distribution.Text (Text(..))
import qualified Distribution.Compat.ReadP as Parse
import qualified Text.PrettyPrint as Disp
import qualified Data.Char as Char
import Data.SafeCopy (base, deriveSafeCopy)
import Data.Typeable
-- | Distribution names may contain letters, numbers and punctuation.
newtype DistroName = DistroName String
deriving (Eq, Ord, Read, Show, Typeable, MemSize)
instance Text DistroName where
disp (DistroName name) = Disp.text name
parse = DistroName <$> Parse.munch1 (\c -> Char.isAlphaNum c || c `elem` "-_()[]{}=$,;")
-- | Listing of known distirbutions and their maintainers
data Distributions = Distributions {
nameMap :: !(Map.Map DistroName UserList)
}
deriving (Eq, Typeable, Show)
-- | Listing of which distirbutions have which version of particular
-- packages.
data DistroVersions = DistroVersions {
packageDistroMap :: !(Map.Map PackageName (Map.Map DistroName DistroPackageInfo)),
distroMap :: !(Map.Map DistroName (Set.Set PackageName))
} deriving (Eq, Typeable, Show)
data DistroPackageInfo
= DistroPackageInfo
{ distroVersion :: Version.Version
, distroUrl :: String
}
deriving (Eq, Typeable, Show)
$(deriveSafeCopy 0 'base ''DistroName)
$(deriveSafeCopy 0 'base ''Distributions)
$(deriveSafeCopy 0 'base ''DistroVersions)
$(deriveSafeCopy 0 'base ''DistroPackageInfo)
instance MemSize Distributions where
memSize (Distributions a) = memSize1 a
instance MemSize DistroVersions where
memSize (DistroVersions a b) = memSize2 a b
instance MemSize DistroPackageInfo where
memSize (DistroPackageInfo a b) = memSize2 a b