Server-Sent Events (SSE) parser and serializer
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

ocaml-sse: enable MDX on lib/sse.mli, fix broken doc examples

Run mdx on lib/sse.mli so the {[ ... ]} odoc blocks now type-check.

The Parser example used a free `stream_data` and the comment-style
`(fun e -> ...)` without a type annotation, which leaves the record
fields ambiguous against any future record type with the same labels.
Filled in a real `stream_data` literal, annotated `(e : Sse.event)`,
and added `open Bytesrw` so `Bytes.Reader` resolves.

The Serializer example called `write_event ~event:"update" ~data:"hello" ()`,
but the real signature is `write_event ?event ?id ?retry data` -- data is
positional, not labelled. Replaced the labelled call, and the trailing
prose comment ("writer now contains:...") became an `assert` against
the buffer contents so the documented output is actually verified.

+20 -10
+4
lib/dune
··· 2 2 (name sse) 3 3 (public_name sse) 4 4 (libraries bytesrw fmt)) 5 + 6 + (mdx 7 + (files sse.mli) 8 + (libraries sse bytesrw))
+16 -10
lib/sse.mli
··· 12 12 {2 Client (parsing from a byte reader)} 13 13 14 14 {[ 15 - let parser = Sse.Parser.create () in 16 - let reader = Bytes.Reader.of_string stream_data in 17 - let events = Sse.Parser.read parser reader in 18 - List.iter 19 - (fun e -> 20 - Printf.printf "type=%s data=%s id=%s\n" e.event e.data e.last_event_id) 15 + open Bytesrw 16 + 17 + let stream_data = "data: hello\n\nevent: update\ndata: world\n\n" 18 + let parser = Sse.Parser.create () 19 + let reader = Bytes.Reader.of_string stream_data 20 + let events = Sse.Parser.read parser reader 21 + let () = List.iter 22 + (fun (e : Sse.event) -> 23 + Printf.printf "type=%s data=%s id=%s\n" 24 + e.event e.data e.last_event_id) 21 25 events 22 26 ]} 23 27 24 28 {2 Server (serializing to a byte writer)} 25 29 26 30 {[ 27 - let buf = Buffer.create 256 in 28 - let writer = Bytes.Writer.of_buffer buf in 29 - Sse.Serializer.write_event writer ~event:"update" ~data:"hello" () 30 - (* writer now contains: "event:update\ndata:hello\n\n" *) 31 + open Bytesrw 32 + 33 + let buf = Buffer.create 256 34 + let writer = Bytes.Writer.of_buffer buf 35 + let () = Sse.Serializer.write_event writer ~event:"update" "hello" 36 + let () = assert (Buffer.contents buf = "event:update\ndata:hello\n\n") 31 37 ]} 32 38 33 39 {2 References}