packages feed

systemd-socket-activation-1.0.0.2: src/SocketActivation/Parsing.hs

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 ":"