{-# LANGUAGE DeriveGeneric #-}
{-|
Module : Rollbar.Item.CodeVersion
Description : Metadata for describing versions of software
Copyright : (c) Hardy Jones, 2017
License : BSD3
Maintainer : jones3.hardy@gmail.com
Stability : experimental
-}
module Rollbar.Item.CodeVersion
( CodeVersion(..)
) where
import Data.Aeson (ToJSON, toEncoding, toJSON)
import GHC.Generics (Generic)
import qualified Data.Text as T
-- | Rollbar supports different ways to say what version the code is.
data CodeVersion
-- | Good ole SemVer.
-- It's 'T.Text' because who knows if you actually got it right...
= SemVer T.Text
-- | Plain integers.
| Number Int
-- | Should be a Git SHA.
| SHA T.Text
deriving (Eq, Generic, Show)
prettyCodeVersion :: CodeVersion -> T.Text
prettyCodeVersion (SemVer s) = s
prettyCodeVersion (Number n) = T.pack . show $ n
prettyCodeVersion (SHA h) = h
instance ToJSON CodeVersion where
toJSON = toJSON . prettyCodeVersion
toEncoding = toEncoding . prettyCodeVersion