packages feed

systemd-socket-activation-1: 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 ":"