module System.Nix.Store.Remote.Types (
MonadStore
, Logger(..)
, Field(..)
, getLog
, flushLog
, gotError
, getError) where
import qualified Data.ByteString.Lazy as LBS
import Network.Socket (Socket)
import Control.Monad.Except
import Control.Monad.Reader
import Control.Monad.State
type MonadStore a = ExceptT String (StateT [Logger] (ReaderT Socket IO)) a
type ActivityID = Int
type ActivityParentID = Int
type ActivityType = Int
type Verbosity = Int
type ResultType = Int
data Field = LogStr LBS.ByteString | LogInt Int
deriving (Eq, Ord, Show)
data Logger =
Next LBS.ByteString
| Read Int
| Write LBS.ByteString
| Last
| Error Int LBS.ByteString
| StartActivity ActivityID Verbosity ActivityType LBS.ByteString [Field] ActivityParentID
| StopActivity ActivityID
| Result ActivityID ResultType [Field]
deriving (Eq, Ord, Show)
isError :: Logger -> Bool
isError (Error _ _) = True
isError _ = False
gotError :: MonadStore Bool
gotError = any isError <$> get
getError :: MonadStore [Logger]
getError = filter isError <$> get
getLog :: MonadStore [Logger]
getLog = get
flushLog :: MonadStore ()
flushLog = put []