packages feed

stack-hpc-coveralls-0.0.0.1: src/SHC/Types.hs

{-# LANGUAGE OverloadedStrings #-}

module SHC.Types
    where

import Data.Aeson
import Trace.Hpc.Mix


data ConversionType = FullLines
                    | PartialLines
                    deriving (Show, Eq)

type CoverageEntry = ( [MixEntry]  -- ^ Mix entries
                     , [Integer]   -- ^ Tix values
                     , [String]    -- ^ Entry source code
                     )

data Hit = Full
         | Partial
         | None
         | Irrelevant
         deriving (Eq, Show)

type Lix = [Hit]

data PostResult = PostSuccess String
                | PostFailure String
                deriving (Show)

data Config = Config {
    suiteName   :: String
  , serviceName :: String
  , jobId       :: String
  , repoToken   :: Maybe String
  , gitInfo     :: GitInfo
  , hpcDir      :: FilePath
  , mixDir      :: FilePath
  , conversion  :: ConversionType
  }

data GitInfo = GitInfo {
    headRef :: Commit
  , branch  :: String
  , remotes :: [Remote]
  }

data Commit = Commit {
    hash           :: String
  , authorName     :: String
  , authorEmail    :: String
  , committerName  :: String
  , committerEmail :: String
  , message        :: String
  }

data Remote = Remote {
    name :: String
  , url  :: String
  }

instance ToJSON GitInfo where
    toJSON i = object [ "head"    .= headRef i
                      , "branch"  .= branch i
                      , "remotes" .= remotes i
                      ]

instance ToJSON Commit where
    toJSON c = object [ "id"              .= hash c
                      , "author_name"     .= authorName c
                      , "author_email"    .= authorEmail c
                      , "committer_name"  .= committerName c
                      , "committer_email" .= committerEmail c
                      , "message"         .= message c
                      ]

instance ToJSON Remote where
    toJSON r = object [ "name" .= name r
                      , "url"  .= url r
                      ]