{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE PatternSynonyms #-} module Hercules.API.Logs.LogEntry where import Control.Applicative import qualified Data.Aeson.Types as A import Data.Vector (Vector) import Data.Word (Word64) import Hercules.API.Prelude newtype ActivityId = ActivityId Word64 deriving newtype ([ActivityId] -> Encoding [ActivityId] -> Value ActivityId -> Encoding ActivityId -> Value forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> ToJSON a toEncodingList :: [ActivityId] -> Encoding $ctoEncodingList :: [ActivityId] -> Encoding toJSONList :: [ActivityId] -> Value $ctoJSONList :: [ActivityId] -> Value toEncoding :: ActivityId -> Encoding $ctoEncoding :: ActivityId -> Encoding toJSON :: ActivityId -> Value $ctoJSON :: ActivityId -> Value ToJSON, Value -> Parser [ActivityId] Value -> Parser ActivityId forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a parseJSONList :: Value -> Parser [ActivityId] $cparseJSONList :: Value -> Parser [ActivityId] parseJSON :: Value -> Parser ActivityId $cparseJSON :: Value -> Parser ActivityId FromJSON, Int -> ActivityId -> ShowS [ActivityId] -> ShowS ActivityId -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ActivityId] -> ShowS $cshowList :: [ActivityId] -> ShowS show :: ActivityId -> String $cshow :: ActivityId -> String showsPrec :: Int -> ActivityId -> ShowS $cshowsPrec :: Int -> ActivityId -> ShowS Show, ActivityId -> ActivityId -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ActivityId -> ActivityId -> Bool $c/= :: ActivityId -> ActivityId -> Bool == :: ActivityId -> ActivityId -> Bool $c== :: ActivityId -> ActivityId -> Bool Eq, ActivityId -> () forall a. (a -> ()) -> NFData a rnf :: ActivityId -> () $crnf :: ActivityId -> () NFData) newtype ActivityType = ActivityType Word64 deriving newtype ([ActivityType] -> Encoding [ActivityType] -> Value ActivityType -> Encoding ActivityType -> Value forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> ToJSON a toEncodingList :: [ActivityType] -> Encoding $ctoEncodingList :: [ActivityType] -> Encoding toJSONList :: [ActivityType] -> Value $ctoJSONList :: [ActivityType] -> Value toEncoding :: ActivityType -> Encoding $ctoEncoding :: ActivityType -> Encoding toJSON :: ActivityType -> Value $ctoJSON :: ActivityType -> Value ToJSON, Value -> Parser [ActivityType] Value -> Parser ActivityType forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a parseJSONList :: Value -> Parser [ActivityType] $cparseJSONList :: Value -> Parser [ActivityType] parseJSON :: Value -> Parser ActivityType $cparseJSON :: Value -> Parser ActivityType FromJSON, Int -> ActivityType -> ShowS [ActivityType] -> ShowS ActivityType -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ActivityType] -> ShowS $cshowList :: [ActivityType] -> ShowS show :: ActivityType -> String $cshow :: ActivityType -> String showsPrec :: Int -> ActivityType -> ShowS $cshowsPrec :: Int -> ActivityType -> ShowS Show, ActivityType -> ActivityType -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ActivityType -> ActivityType -> Bool $c/= :: ActivityType -> ActivityType -> Bool == :: ActivityType -> ActivityType -> Bool $c== :: ActivityType -> ActivityType -> Bool Eq, ActivityType -> () forall a. (a -> ()) -> NFData a rnf :: ActivityType -> () $crnf :: ActivityType -> () NFData) newtype ResultType = ResultType Word64 deriving newtype ([ResultType] -> Encoding [ResultType] -> Value ResultType -> Encoding ResultType -> Value forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> ToJSON a toEncodingList :: [ResultType] -> Encoding $ctoEncodingList :: [ResultType] -> Encoding toJSONList :: [ResultType] -> Value $ctoJSONList :: [ResultType] -> Value toEncoding :: ResultType -> Encoding $ctoEncoding :: ResultType -> Encoding toJSON :: ResultType -> Value $ctoJSON :: ResultType -> Value ToJSON, Value -> Parser [ResultType] Value -> Parser ResultType forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a parseJSONList :: Value -> Parser [ResultType] $cparseJSONList :: Value -> Parser [ResultType] parseJSON :: Value -> Parser ResultType $cparseJSON :: Value -> Parser ResultType FromJSON, Int -> ResultType -> ShowS [ResultType] -> ShowS ResultType -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [ResultType] -> ShowS $cshowList :: [ResultType] -> ShowS show :: ResultType -> String $cshow :: ResultType -> String showsPrec :: Int -> ResultType -> ShowS $cshowsPrec :: Int -> ResultType -> ShowS Show, ResultType -> ResultType -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: ResultType -> ResultType -> Bool $c/= :: ResultType -> ResultType -> Bool == :: ResultType -> ResultType -> Bool $c== :: ResultType -> ResultType -> Bool Eq, ResultType -> () forall a. (a -> ()) -> NFData a rnf :: ResultType -> () $crnf :: ResultType -> () NFData) pattern ResultTypeProgress :: ResultType pattern $bResultTypeProgress :: ResultType $mResultTypeProgress :: forall {r}. ResultType -> ((# #) -> r) -> ((# #) -> r) -> r ResultTypeProgress = ResultType 105 pattern ResultTypeSetExpected :: ResultType pattern $bResultTypeSetExpected :: ResultType $mResultTypeSetExpected :: forall {r}. ResultType -> ((# #) -> r) -> ((# #) -> r) -> r ResultTypeSetExpected = ResultType 106 pattern ResultTypeBuildLogLine :: ResultType pattern $bResultTypeBuildLogLine :: ResultType $mResultTypeBuildLogLine :: forall {r}. ResultType -> ((# #) -> r) -> ((# #) -> r) -> r ResultTypeBuildLogLine = ResultType 101 data Field = Int !Word64 | String !Text deriving (Field -> Field -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Field -> Field -> Bool $c/= :: Field -> Field -> Bool == :: Field -> Field -> Bool $c== :: Field -> Field -> Bool Eq, Int -> Field -> ShowS [Field] -> ShowS Field -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Field] -> ShowS $cshowList :: [Field] -> ShowS show :: Field -> String $cshow :: Field -> String showsPrec :: Int -> Field -> ShowS $cshowsPrec :: Int -> Field -> ShowS Show, forall x. Rep Field x -> Field forall x. Field -> Rep Field x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep Field x -> Field $cfrom :: forall x. Field -> Rep Field x Generic, Field -> () forall a. (a -> ()) -> NFData a rnf :: Field -> () $crnf :: Field -> () NFData) instance ToJSON Field where toJSON :: Field -> Value toJSON (Int Word64 int) = forall a. ToJSON a => a -> Value A.toJSON Word64 int toJSON (String Text s) = forall a. ToJSON a => a -> Value A.toJSON Text s instance FromJSON Field where parseJSON :: Value -> Parser Field parseJSON Value v = Word64 -> Field Int forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. FromJSON a => Value -> Parser a A.parseJSON Value v forall (f :: * -> *) a. Alternative f => f a -> f a -> f a <|> Text -> Field String forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> forall a. FromJSON a => Value -> Parser a A.parseJSON Value v data LogEntry = Msg { LogEntry -> Word64 i :: !Word64, LogEntry -> Word64 ms :: !Word64, LogEntry -> Int level :: !Int, LogEntry -> Text msg :: !Text } | Start { i :: !Word64, ms :: !Word64, LogEntry -> ActivityId act :: !ActivityId, level :: !Int, LogEntry -> ActivityType typ :: !ActivityType, LogEntry -> Text text :: !Text, LogEntry -> Vector Field fields :: !(Vector Field), LogEntry -> ActivityId parent :: !ActivityId } | Stop { i :: !Word64, ms :: !Word64, act :: !ActivityId } | Result { i :: !Word64, ms :: !Word64, act :: !ActivityId, LogEntry -> ResultType rtype :: !ResultType, fields :: !(Vector Field) } deriving (forall x. Rep LogEntry x -> LogEntry forall x. LogEntry -> Rep LogEntry x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep LogEntry x -> LogEntry $cfrom :: forall x. LogEntry -> Rep LogEntry x Generic, Int -> LogEntry -> ShowS [LogEntry] -> ShowS LogEntry -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [LogEntry] -> ShowS $cshowList :: [LogEntry] -> ShowS show :: LogEntry -> String $cshow :: LogEntry -> String showsPrec :: Int -> LogEntry -> ShowS $cshowsPrec :: Int -> LogEntry -> ShowS Show, LogEntry -> LogEntry -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: LogEntry -> LogEntry -> Bool $c/= :: LogEntry -> LogEntry -> Bool == :: LogEntry -> LogEntry -> Bool $c== :: LogEntry -> LogEntry -> Bool Eq, LogEntry -> () forall a. (a -> ()) -> NFData a rnf :: LogEntry -> () $crnf :: LogEntry -> () NFData, [LogEntry] -> Encoding [LogEntry] -> Value LogEntry -> Encoding LogEntry -> Value forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> ToJSON a toEncodingList :: [LogEntry] -> Encoding $ctoEncodingList :: [LogEntry] -> Encoding toJSONList :: [LogEntry] -> Value $ctoJSONList :: [LogEntry] -> Value toEncoding :: LogEntry -> Encoding $ctoEncoding :: LogEntry -> Encoding toJSON :: LogEntry -> Value $ctoJSON :: LogEntry -> Value ToJSON, Value -> Parser [LogEntry] Value -> Parser LogEntry forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a parseJSONList :: Value -> Parser [LogEntry] $cparseJSONList :: Value -> Parser [LogEntry] parseJSON :: Value -> Parser LogEntry $cparseJSON :: Value -> Parser LogEntry FromJSON)