module Effectful.Notify.Internal.Os.Linux ( initNotifyEnv, notify, ) where import Effectful.Notify.Internal.Data.Note (Note) import Effectful.Notify.Internal.Data.NotifyEnv ( NotifyEnv (NotifyEnvDBus, NotifyEnvNotifySend), ) import Effectful.Notify.Internal.Data.NotifySystem ( NotifySystemOs (NotifySystemOsDBus, NotifySystemOsNotifySend), ) import Effectful.Notify.Internal.System.DBus qualified as DBus import Effectful.Notify.Internal.System.NotifySend qualified as NotifySend import GHC.Stack.Types (HasCallStack) initNotifyEnv :: (HasCallStack) => NotifySystemOs -> IO NotifyEnv initNotifyEnv :: HasCallStack => NotifySystemOs -> IO NotifyEnv initNotifyEnv = \case NotifySystemOs NotifySystemOsDBus -> Client -> NotifyEnv NotifyEnvDBus (Client -> NotifyEnv) -> IO Client -> IO NotifyEnv forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> IO Client HasCallStack => IO Client DBus.initNotifyEnv NotifySystemOs NotifySystemOsNotifySend -> NotifyEnv -> IO NotifyEnv forall a. a -> IO a forall (f :: * -> *) a. Applicative f => a -> f a pure NotifyEnv NotifyEnvNotifySend notify :: NotifyEnv -> Note -> IO () notify :: NotifyEnv -> Note -> IO () notify NotifyEnv env Note note = case NotifyEnv env of NotifyEnvDBus Client client -> HasCallStack => Client -> Note -> IO () Client -> Note -> IO () DBus.notify Client client Note note NotifyEnv NotifyEnvNotifySend -> Note -> IO () NotifySend.notify Note note