yesod-gitrev-0.2.1: src/Yesod/GitRev/Data.hs
{-# LANGUAGE DeriveLift #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeFamilies #-}
module Yesod.GitRev.Data where
import GitHash
import Language.Haskell.TH.Syntax (Lift, Q, TExp, Exp, unTypeQ)
import Yesod.Core
-- | You should not construct one of these yourself.
-- Instead, use gitRev or tGitRev.
-- Fields added to this record are treated as a minor version bump.
data GitRev = GitRev
{ gitRevHash :: String
, gitRevBranch :: String
, gitRevDirty :: Bool
, gitRevCommitDate :: String
-- ^ @since 0.2.1
, gitRevCommitCount :: Int
-- ^ @since 0.2.1
, gitRevCommitMessage :: String
-- ^ @since 0.2.1
}
deriving Lift
mkYesodSubData "GitRev" [parseRoutes|
/ GitRevR GET
|]
-- | A typed splice for creating a GitRev.
-- Example: $$(tGitRev) :: GitRev
tGitRev :: Q (TExp GitRev)
tGitRev = [|| gitRevFromGitInfo $$(tGitInfoCwd) ||]
-- | An untyped splice for creating a GitRev.
-- Example: $(gitRev) :: GitRev
gitRev :: Q Exp
gitRev = unTypeQ tGitRev
-- This function is considered to be "internal".
-- Changes to this function will not be accounted for in minor version bumps.
gitRevFromGitInfo :: GitInfo -> GitRev
gitRevFromGitInfo gi = GitRev
{ gitRevHash = giHash gi
, gitRevBranch = giBranch gi
, gitRevDirty = giDirty gi
, gitRevCommitDate = giCommitDate gi
, gitRevCommitCount = giCommitCount gi
, gitRevCommitMessage = giCommitMessage gi
}