module SocketActivation.CheckRecipient where
import Essentials
import Control.Monad.IO.Class (MonadIO (liftIO))
import Data.Either (Either)
import System.IO (IO)
import qualified Control.Monad as Monad
import qualified System.Posix.Process as Sys
import SocketActivation.Concepts (Error(WrongProcess), Recipient (recipientPID))
import SocketActivation.Env (getEnv')
import SocketActivation.IO (IO' (IO', run), throwError)
checkRecipient :: IO (Either Error ())
checkRecipient :: IO (Either Error ())
checkRecipient = forall a. IO' a -> IO (Either Error a)
run do
Recipient
recipient <- forall a. IO (Either Error a) -> IO' a
IO' forall a b. (a -> b) -> a -> b
$ forall a. Env' a => IO (Either Error a)
getEnv' @Recipient
forall a. IO (Either Error a) -> IO' a
IO' forall a b. (a -> b) -> a -> b
$ Recipient -> IO (Either Error ())
checkRecipient' Recipient
recipient
checkRecipient' :: Recipient -> IO (Either Error ())
checkRecipient' :: Recipient -> IO (Either Error ())
checkRecipient' Recipient
recipient = forall a. IO' a -> IO (Either Error a)
run do
ProcessID
myPid <- forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO ProcessID
Sys.getProcessID
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
Monad.unless (Recipient -> ProcessID
recipientPID Recipient
recipient forall a. Eq a => a -> a -> Bool
== ProcessID
myPid) forall a b. (a -> b) -> a -> b
$ forall a. Error -> IO' a
throwError Error
WrongProcess