1
{-# LANGUAGE OverloadedStrings #-}
2
{- code adapted by Mathias Billman originaly from Chris Smith https://github.com/cdsmith/gloss-web -}
5
Internal module, usually you don't need to use it.
7
module Network.Wai.EventSource.EventStream (
12
import Blaze.ByteString.Builder
13
import Blaze.ByteString.Builder.Char8
17
Type representing a communication over an event stream. This can be an
18
actual event, a comment, a modification to the retry timer, or a special
19
"close" event indicating the server should close the connection.
23
eventName :: Maybe Builder,
24
eventId :: Maybe Builder,
25
eventData :: [Builder]
28
eventComment :: Builder
44
Field names as Builder
46
nameField, idField, dataField, retryField, commentField :: Builder
47
nameField = fromString "event:"
48
idField = fromString "id:"
49
dataField = fromString "data:"
50
retryField = fromString "retry:"
51
commentField = fromChar ':'
55
Wraps the text as a labeled field of an event stream.
57
field :: Builder -> Builder -> Builder
58
field l b = l `mappend` b `mappend` nl
62
Converts a 'ServerEvent' to its wire representation as specified by the
63
@text/event-stream@ content type.
65
eventToBuilder :: ServerEvent -> Maybe Builder
66
eventToBuilder (CommentEvent txt) = Just $ field commentField txt
67
eventToBuilder (RetryEvent n) = Just $ field retryField (fromShow n)
68
eventToBuilder (CloseEvent) = Nothing
69
eventToBuilder (ServerEvent n i d)= Just $
70
(name n $ evid i $ mconcat (map (field dataField) d)) `mappend` nl
73
name (Just n') = mappend (field nameField n')
75
evid (Just i') = mappend (field idField i')