module Effectful.Zoo.Log.Api.String
  ( log,
    trace,
    debug,
    info,
    warn,
    error,
    crit,
  ) where

import Effectful
import Effectful.Dispatch.Dynamic
import Effectful.Zoo.Core
import Effectful.Zoo.Log.Data.Severity
import Effectful.Zoo.Log.Dynamic
import HaskellWorks.Prelude

log :: ()
  => HasCallStack
  => r <: Log String
  => Severity
  -> String
  -> Eff r ()
log :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
severity String
message =
  (HasCallStack => Eff r ()) -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => Eff r ()) -> Eff r ())
-> (HasCallStack => Eff r ()) -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Log String (Eff r) () -> Eff r ()
forall (e :: Effect) (es :: [Effect]) a.
(HasCallStack, DispatchOf e ~ 'Dynamic, e :> es) =>
e (Eff es) a -> Eff es a
send (Severity -> String -> Log String (Eff r) ()
forall i (a :: * -> *). HasCallStack => Severity -> i -> Log i a ()
Log Severity
severity String
message)

trace :: ()
  => HasCallStack
  => r <: Log String
  => String
  -> Eff r ()
trace :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
String -> Eff r ()
trace =
  (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => String -> Eff r ()) -> String -> Eff r ())
-> (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Severity -> String -> Eff r ()
forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
Trace

debug :: ()
  => HasCallStack
  => r <: Log String
  => String
  -> Eff r ()
debug :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
String -> Eff r ()
debug =
  (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => String -> Eff r ()) -> String -> Eff r ())
-> (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Severity -> String -> Eff r ()
forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
Debug

info :: ()
  => HasCallStack
  => r <: Log String
  => String
  -> Eff r ()
info :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
String -> Eff r ()
info =
  (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => String -> Eff r ()) -> String -> Eff r ())
-> (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Severity -> String -> Eff r ()
forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
Info

warn :: ()
  => HasCallStack
  => r <: Log String
  => String
  -> Eff r ()
warn :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
String -> Eff r ()
warn =
  (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => String -> Eff r ()) -> String -> Eff r ())
-> (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Severity -> String -> Eff r ()
forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
Warn

error :: ()
  => HasCallStack
  => r <: Log String
  => String
  -> Eff r ()
error :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
String -> Eff r ()
error =
  (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => String -> Eff r ()) -> String -> Eff r ())
-> (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Severity -> String -> Eff r ()
forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
Error

crit :: ()
  => HasCallStack
  => r <: Log String
  => String
  -> Eff r ()
crit :: forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
String -> Eff r ()
crit =
  (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => String -> Eff r ()) -> String -> Eff r ())
-> (HasCallStack => String -> Eff r ()) -> String -> Eff r ()
forall a b. (a -> b) -> a -> b
$
    Severity -> String -> Eff r ()
forall (r :: [Effect]).
(HasCallStack, r <: Log String) =>
Severity -> String -> Eff r ()
log Severity
Crit