{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeFamilies #-}

module Yesod.GitRev.Data where

import Development.GitRev (gitHash, gitBranch, gitDirty)
import Language.Haskell.TH.Syntax (Lift(lift), Q, TExp, Exp, unsafeTExpCoerce)
import Yesod.Core hiding (lift)

data GitRev = GitRev
  { gitRevHash :: String
  , gitRevBranch :: String
  , gitRevDirty :: Bool
  }

mkYesodSubData "GitRev" [parseRoutes|
/ GitRevR GET
|]

instance Lift GitRev where
  lift GitRev{..} =
    [|
      GitRev
        { gitRevHash = $(lift gitRevHash)
        , gitRevBranch = $(lift gitRevBranch)
        , gitRevDirty = $(lift gitRevDirty)
        }
    |]

tGitRev :: Q (TExp GitRev)
tGitRev = unsafeTExpCoerce gitRev

gitRev :: Q Exp
gitRev =
  [|
    GitRev
      { gitRevHash = $gitHash
      , gitRevBranch = $gitBranch
      , gitRevDirty = $gitDirty
      }
  |]