module SocketActivation.Parsing where
import Control.Monad (Functor (fmap), Monad (return),
(>=>))
import Data.Bits (toIntegralSized)
import Data.Function ((.))
import Data.Maybe (Maybe)
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 = read >=> wrap
where
read = readMaybe @ProcessID . Text.unpack
wrap = return . RecipientPID
readCount :: Text -> Maybe Count
readCount = read >=> convert >=> wrap
where
read = readMaybe @CInt . Text.unpack
convert = toIntegralSized :: CInt -> Maybe Natural
wrap = return . CountNat
readNames :: Text -> Names
readNames = NamesList . fmap NameText . Text.splitOn ":"