module Web.Growler.EventSource where
import Blaze.ByteString.Builder (Builder)
import Control.Monad.Trans
import Data.Function (fix)
import Network.HTTP.Types (hContentType, status200)
import Network.Wai.EventSource.EventStream
import Web.Growler
eventSource :: MonadIO m => IO ServerEvent -> HandlerT m ()
eventSource m = do
status status200
setHeader hContentType "text/event-stream"
stream $ \sendChunk flush -> fix $ \loop -> do
se <- m
case eventToBuilder se of
Nothing -> return ()
Just b -> sendChunk b >> flush >> loop