{-# LANGUAGE OverloadedStrings #-} module Debug.TraceEmbrace.Config.Type.Mode where import Data.Aeson hiding (Error) import Data.Generics.Labels () import Data.Typeable import GHC.Generics import Language.Haskell.TH.Syntax import Refined data IoSink = StdErrSink | StdOutSink | FileSink FilePath deriving (IoSink -> IoSink -> Bool (IoSink -> IoSink -> Bool) -> (IoSink -> IoSink -> Bool) -> Eq IoSink forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: IoSink -> IoSink -> Bool == :: IoSink -> IoSink -> Bool $c/= :: IoSink -> IoSink -> Bool /= :: IoSink -> IoSink -> Bool Eq, Int -> IoSink -> ShowS [IoSink] -> ShowS IoSink -> FilePath (Int -> IoSink -> ShowS) -> (IoSink -> FilePath) -> ([IoSink] -> ShowS) -> Show IoSink forall a. (Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> IoSink -> ShowS showsPrec :: Int -> IoSink -> ShowS $cshow :: IoSink -> FilePath show :: IoSink -> FilePath $cshowList :: [IoSink] -> ShowS showList :: [IoSink] -> ShowS Show, (forall x. IoSink -> Rep IoSink x) -> (forall x. Rep IoSink x -> IoSink) -> Generic IoSink forall x. Rep IoSink x -> IoSink forall x. IoSink -> Rep IoSink x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. IoSink -> Rep IoSink x from :: forall x. IoSink -> Rep IoSink x $cto :: forall x. Rep IoSink x -> IoSink to :: forall x. Rep IoSink x -> IoSink Generic, (forall (m :: * -> *). Quote m => IoSink -> m Exp) -> (forall (m :: * -> *). Quote m => IoSink -> Code m IoSink) -> Lift IoSink forall t. (forall (m :: * -> *). Quote m => t -> m Exp) -> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t forall (m :: * -> *). Quote m => IoSink -> m Exp forall (m :: * -> *). Quote m => IoSink -> Code m IoSink $clift :: forall (m :: * -> *). Quote m => IoSink -> m Exp lift :: forall (m :: * -> *). Quote m => IoSink -> m Exp $cliftTyped :: forall (m :: * -> *). Quote m => IoSink -> Code m IoSink liftTyped :: forall (m :: * -> *). Quote m => IoSink -> Code m IoSink Lift) instance ToJSON IoSink where toEncoding :: IoSink -> Encoding toEncoding = Options -> IoSink -> Encoding forall a. (Generic a, GToJSON' Encoding Zero (Rep a)) => Options -> a -> Encoding genericToEncoding Options defaultOptions instance FromJSON IoSink data SinkMode = TraceDisabled | TraceStd | TraceUnsafeIo { SinkMode -> IoSink sink :: IoSink } | TraceEvent deriving (SinkMode -> SinkMode -> Bool (SinkMode -> SinkMode -> Bool) -> (SinkMode -> SinkMode -> Bool) -> Eq SinkMode forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: SinkMode -> SinkMode -> Bool == :: SinkMode -> SinkMode -> Bool $c/= :: SinkMode -> SinkMode -> Bool /= :: SinkMode -> SinkMode -> Bool Eq, Int -> SinkMode -> ShowS [SinkMode] -> ShowS SinkMode -> FilePath (Int -> SinkMode -> ShowS) -> (SinkMode -> FilePath) -> ([SinkMode] -> ShowS) -> Show SinkMode forall a. (Int -> a -> ShowS) -> (a -> FilePath) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> SinkMode -> ShowS showsPrec :: Int -> SinkMode -> ShowS $cshow :: SinkMode -> FilePath show :: SinkMode -> FilePath $cshowList :: [SinkMode] -> ShowS showList :: [SinkMode] -> ShowS Show, (forall x. SinkMode -> Rep SinkMode x) -> (forall x. Rep SinkMode x -> SinkMode) -> Generic SinkMode forall x. Rep SinkMode x -> SinkMode forall x. SinkMode -> Rep SinkMode x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. SinkMode -> Rep SinkMode x from :: forall x. SinkMode -> Rep SinkMode x $cto :: forall x. Rep SinkMode x -> SinkMode to :: forall x. Rep SinkMode x -> SinkMode Generic, (forall (m :: * -> *). Quote m => SinkMode -> m Exp) -> (forall (m :: * -> *). Quote m => SinkMode -> Code m SinkMode) -> Lift SinkMode forall t. (forall (m :: * -> *). Quote m => t -> m Exp) -> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t forall (m :: * -> *). Quote m => SinkMode -> m Exp forall (m :: * -> *). Quote m => SinkMode -> Code m SinkMode $clift :: forall (m :: * -> *). Quote m => SinkMode -> m Exp lift :: forall (m :: * -> *). Quote m => SinkMode -> m Exp $cliftTyped :: forall (m :: * -> *). Quote m => SinkMode -> Code m SinkMode liftTyped :: forall (m :: * -> *). Quote m => SinkMode -> Code m SinkMode Lift) instance ToJSON SinkMode where toEncoding :: SinkMode -> Encoding toEncoding = Options -> SinkMode -> Encoding forall a. (Generic a, GToJSON' Encoding Zero (Rep a)) => Options -> a -> Encoding genericToEncoding Options defaultOptions instance FromJSON SinkMode data SinkModeP instance Predicate SinkModeP SinkMode where validate :: Proxy SinkModeP -> SinkMode -> Maybe RefineException validate Proxy SinkModeP p = \case SinkMode TraceDisabled -> Maybe RefineException forall a. Maybe a Nothing SinkMode TraceStd -> Maybe RefineException forall a. Maybe a Nothing SinkMode TraceEvent -> Maybe RefineException forall a. Maybe a Nothing TraceUnsafeIo IoSink s -> case IoSink s of IoSink StdErrSink -> Maybe RefineException forall a. Maybe a Nothing IoSink StdOutSink -> Maybe RefineException forall a. Maybe a Nothing FileSink FilePath "" -> TypeRep -> Text -> Maybe RefineException throwRefineOtherException (Proxy SinkModeP -> TypeRep forall {k} (proxy :: k -> *) (a :: k). Typeable a => proxy a -> TypeRep typeRep Proxy SinkModeP p) Text "Sink path is empty" FileSink FilePath _ -> Maybe RefineException forall a. Maybe a Nothing