module BDCS.API.QueueStatus(QueueStatus(..),
queueStatusEnded,
queueStatusFromText,
queueStatusInProgress,
queueStatusText)
where
import Control.Monad(mzero)
import Data.Aeson(FromJSON(..), ToJSON(..), Value(..))
import qualified Data.Text as T
data QueueStatus = QWaiting
| QRunning
| QFinished
| QFailed
deriving(Eq, Show)
instance ToJSON QueueStatus where
toJSON QWaiting = "WAITING"
toJSON QRunning = "RUNNING"
toJSON QFinished = "FINISHED"
toJSON QFailed = "FAILED"
instance FromJSON QueueStatus where
parseJSON (String s) = case queueStatusFromText s of
Just qs -> pure qs
Nothing -> mzero
parseJSON _ = mzero
queueStatusEnded :: QueueStatus -> Bool
queueStatusEnded QFinished = True
queueStatusEnded QFailed = True
queueStatusEnded _ = False
queueStatusFromText :: T.Text -> Maybe QueueStatus
queueStatusFromText t = case T.strip t of
"WAITING" -> Just QWaiting
"RUNNING" -> Just QRunning
"FINISHED" -> Just QFinished
"FAILED" -> Just QFailed
_ -> Nothing
queueStatusInProgress :: QueueStatus -> Bool
queueStatusInProgress QRunning = True
queueStatusInProgress _ = False
queueStatusText :: QueueStatus -> T.Text
queueStatusText QWaiting = "WAITING"
queueStatusText QRunning = "RUNNING"
queueStatusText QFinished = "FINISHED"
queueStatusText QFailed = "FAILED"