@@ -1,44 +1,31 @@
11module Reporting.Progress.Json
2− ( create
2+ ( reporter
33 )
44 where
55
66
7−import Control.Concurrent (forkIO)
8−import Control.Concurrent.Chan (Chan, newChan, readChan)
9−import Control.Concurrent.MVar (newEmptyMVar, putMVar)
7+import qualified Data.ByteString.Builder as B
8+import System.IO (stderr)
109
1110import qualified Reporting.Exit as Exit
1211import qualified Reporting.Progress as Progress
12+import qualified Json.Encode as Encode
1313
1414
1515
16−-- CREATE
16+-- REPORTER
1717
1818
19−create :: IO Progress.Reporter
20−create =
21− do chan <- newChan
22− mvar <- newEmptyMVar
23− _ <- forkIO (loop chan >>= putMVar mvar)
24− return (Progress.makeReporter chan mvar)
19+reporter :: Progress.Reporter
20+reporter =
21+ Progress.Reporter (\_ -> return ()) end
2522
2623
24+end :: Maybe Exit.Exit -> IO ()
25+end maybeExit =
26+ case maybeExit of
27+ Just exit ->
28+ B.hPutBuilder stderr (Encode.encodeUgly (Exit.toJson exit))
2729
28−-- LOOP
29−
30−
31−loop :: Chan Progress.Msg -> IO ()
32−loop chan =
33− do msg <- readChan chan
34− case msg of
35− Progress.Progress _ ->
36− loop chan
37−
38− Progress.End maybeExit ->
39− case maybeExit of
40− Just exit ->
41− Exit.toJson exit
42−
43− Nothing ->
44− return ()
30+ Nothing ->
31+ return ()