module Sarsi.Tools.Trace where import Data.Machine ((<~), auto, runT_) import Data.Attoparsec.Text (Parser) import Data.Attoparsec.Text.Machine (streamParser) import System.IO (Handle) import System.IO.Machine (byLine, printer, sourceHandle) import qualified Codec.GHC.Log as GHC import qualified Codec.Sarsi.Rust as Rust import qualified Codec.Sarsi.SBT as SBT import qualified Data.Text as Text traceHS :: Handle -> IO () traceHS = traceParser GHC.messageParser traceRS :: Handle -> IO () traceRS = traceParser Rust.messageParser traceSBT :: Handle -> IO () traceSBT = traceParser SBT.eventParser traceParser :: Show a => Parser a -> Handle -> IO () traceParser parser h = do runT_ $ printer <~ streamParser parser <~ appendCR <~ sourceHandle byLine h where appendCR = auto $ (`Text.snoc` '\n')