module Effectful.Zoo.Log.Api.Generic
  ( 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 i
  => Severity
  -> i
  -> Eff r ()
log :: forall (r :: [Effect]) i.
(HasCallStack, r <: Log i) =>
Severity -> i -> Eff r ()
log Severity
severity i
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 i (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 -> i -> Log i (Eff r) ()
forall i (a :: * -> *). HasCallStack => Severity -> i -> Log i a ()
Log Severity
severity i
message)

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

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

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

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

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

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