module Mischief.ECS.Log where

import Colog qualified
import Control.Monad.IO.Class
import Data.Text (Text)
import Data.Text qualified as Text
import GHC.Stack
import Mischief.ECS.World

debug :: (HasCallStack) => (MonadSystem w m) => Text -> m ()
debug :: forall w (m :: * -> *).
(HasCallStack, MonadSystem w m) =>
Text -> m ()
debug Text
msg = (HasCallStack => m ()) -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ do
  world <- m World
forall w (m :: * -> *). MonadSystem w m => m World
unsafeGetWorld
  liftIO $ Colog.usingLoggerT world.logger $ Colog.logDebug msg

info :: (HasCallStack) => (MonadSystem w m) => Text -> m ()
info :: forall w (m :: * -> *).
(HasCallStack, MonadSystem w m) =>
Text -> m ()
info Text
msg = (HasCallStack => m ()) -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ do
  world <- m World
forall w (m :: * -> *). MonadSystem w m => m World
unsafeGetWorld
  liftIO $ Colog.usingLoggerT world.logger $ Colog.logInfo msg

warn :: (HasCallStack) => (MonadSystem w m) => Text -> m ()
warn :: forall w (m :: * -> *).
(HasCallStack, MonadSystem w m) =>
Text -> m ()
warn Text
msg = (HasCallStack => m ()) -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ do
  world <- m World
forall w (m :: * -> *). MonadSystem w m => m World
unsafeGetWorld
  liftIO $ Colog.usingLoggerT world.logger $ Colog.logWarning msg

err :: (HasCallStack) => (MonadSystem w m) => Text -> m ()
err :: forall w (m :: * -> *).
(HasCallStack, MonadSystem w m) =>
Text -> m ()
err Text
msg = (HasCallStack => m ()) -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ do
  world <- m World
forall w (m :: * -> *). MonadSystem w m => m World
unsafeGetWorld
  liftIO $ Colog.usingLoggerT world.logger $ Colog.logError msg

panic :: (HasCallStack) => (MonadSystem w m) => Text -> m ()
panic :: forall w (m :: * -> *).
(HasCallStack, MonadSystem w m) =>
Text -> m ()
panic Text
msg = (HasCallStack => m ()) -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m ()
forall a b. (a -> b) -> a -> b
$ do
  Text -> m ()
forall w (m :: * -> *).
(HasCallStack, MonadSystem w m) =>
Text -> m ()
err Text
msg
  m ()
forall a. HasCallStack => a
undefined

text :: (Show a) => a -> Text
text :: forall a. Show a => a -> Text
text = String -> Text
Text.pack (String -> Text) -> (a -> String) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show