packages feed

hackport-0.2.10: Portage/Metadata.hs

module Portage.Metadata
        ( Metadata(..)
        , metadataFromFile
        ) where

import qualified Data.ByteString as B

import Control.Applicative

import Text.XML.Light

import Control.Monad

data Metadata = Metadata
      { metadataHerds :: [String]
      -- , metadataMaintainers :: [String],
      -- , metadataUseFlags :: [(String,String)]
      } deriving (Show)

metadataFromFile :: FilePath -> IO (Maybe Metadata)
metadataFromFile fp = do
  doc <- parseXMLDoc <$> B.readFile fp
  return (doc >>= parseMetadata)

parseMetadata :: Element -> Maybe Metadata
parseMetadata xml = do
  let herds = map strContent (findChildren (unqual "herd") xml)
  return Metadata
            {
              metadataHerds = herds
            }