module SocketActivation.Parsing where import Essentials import Data.Bits (toIntegralSized) import Data.Text (Text) import Foreign.C.Types (CInt) import Numeric.Natural (Natural) import Text.Read (readMaybe) import qualified Data.Text as Text import SocketActivation.Concepts readRecipient :: Text -> Maybe Recipient readRecipient :: Text -> Maybe Recipient readRecipient = Text -> Maybe ProcessID read forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> ProcessID -> Maybe Recipient wrap where read :: Text -> Maybe ProcessID read = forall a. Read a => String -> Maybe a readMaybe @ProcessID forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Text -> String Text.unpack wrap :: ProcessID -> Maybe Recipient wrap = forall (f :: * -> *) a. Applicative f => a -> f a pure forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ProcessID -> Recipient RecipientPID readCount :: Text -> Maybe Count readCount :: Text -> Maybe Count readCount = Text -> Maybe CInt read forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> CInt -> Maybe Natural convert forall (m :: * -> *) a b c. Monad m => (a -> m b) -> (b -> m c) -> a -> m c >=> Natural -> Maybe Count wrap where read :: Text -> Maybe CInt read = forall a. Read a => String -> Maybe a readMaybe @CInt forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Text -> String Text.unpack convert :: CInt -> Maybe Natural convert = forall a b. (Integral a, Integral b, Bits a, Bits b) => a -> Maybe b toIntegralSized :: CInt -> Maybe Natural wrap :: Natural -> Maybe Count wrap = forall (f :: * -> *) a. Applicative f => a -> f a pure forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Natural -> Count CountNat readNames :: Text -> Names readNames :: Text -> Names readNames = [Name] -> Names NamesList forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Text -> Name NameText forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Text -> Text -> [Text] Text.splitOn Text ":"