packages feed

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