chiasma-0.12.2.0: lib/Chiasma/Interpreter/ProcessOutput.hs
module Chiasma.Interpreter.ProcessOutput where
import Data.Attoparsec.ByteString (parse)
import qualified Data.Attoparsec.Types as Attoparsec
import qualified Polysemy.Process.Data.ProcessOutputParseResult as ProcessOutputParseResult
import Polysemy.Process.Data.ProcessOutputParseResult (ProcessOutputParseResult)
import Polysemy.Process.Effect.ProcessOutput (ProcessOutput)
import Polysemy.Process.Interpreter.ProcessOutput (interpretProcessOutputIncremental)
import Chiasma.Data.TmuxEvent (TmuxEvent)
import Chiasma.Native.TmuxOutputBlock (messageParser)
-- | Convert an attoparsec 'Attoparsec.IResult' to 'ProcessOutputParseResult'.
fromAttoparsec :: Attoparsec.IResult ByteString TmuxEvent -> ProcessOutputParseResult TmuxEvent
fromAttoparsec = \case
Attoparsec.Fail _ _ err -> ProcessOutputParseResult.Fail (toText err)
Attoparsec.Partial c -> ProcessOutputParseResult.Partial (fromAttoparsec . c)
Attoparsec.Done rest a -> ProcessOutputParseResult.Done a rest
interpretProcessOutputTmuxEvent ::
∀ p r .
InterpreterFor (ProcessOutput p (Either Text TmuxEvent)) r
interpretProcessOutputTmuxEvent =
interpretProcessOutputIncremental (fromAttoparsec . parse messageParser)