Coverage report: /development/source/library/org/datagraph/spocq-shard/src/spocq-server/server-side-event-stream/classes.lisp
| Kind | Covered | All | % |
| expression | 2 | 88 | 2.3 |
| branch | 0 | 6 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;;; -*- Mode: lisp; Syntax: ansi-common-lisp; Base: 10; Package: org.datagraph.spocq.implementation; -*-
5
(defclass event-stream (SB-GRAY:FUNDAMENTAL-STREAM)
6
((stream :initarg :stream
7
:reader event-stream-stream)
8
(eol :initform t :accessor event-stream-eol)))
10
(defmethod stream-fresh-line ((stream event-stream))
11
(setf (event-stream-eol stream) nil)
12
(stream-fresh-line (event-stream-stream stream)))
14
(defmethod stream-terpri ((stream event-stream))
15
(stream-write-char stream #\newline))
17
(defmethod stream-write-header ((stream event-stream) name value)
18
(unless (event-stream-eol stream)
19
(stream-write-char stream #\newline))
20
(format (event-stream-stream stream) "~a: ~a~c~c"
21
name value #\return #\linefeed)
22
(setf (event-stream-eol stream) #\linefeed))
24
(defmethod stream-write-string ((stream event-stream) string &optional (start 0) (end nil))
25
(loop with stream-stream = (event-stream-stream stream)
26
with limit = (or end (length string))
27
for i from 0 below limit
28
for char across string
31
((#\return #\linefeed) (stream-write-char stream char))
32
(t (stream-write-char stream-stream char)))))
34
(defmethod stream-write-char ((stream event-stream) char)
36
(stream-write-byte stream (char-code char)))
38
(defmethod stream-write-byte ((stream event-stream) byte)
39
(when (event-stream-eol stream)
40
(setf (event-stream-eol stream) nil)
41
(write-string "data: " (event-stream-stream stream)))
42
(case (event-stream-eol stream)
43
(#.(char-code #\linefeed)
45
(#.(char-code #\linefeed)
46
(stream-fresh-line stream)
47
(setf (event-stream-eol stream) byte))
48
(#.(char-code #\return)
49
(setf (event-stream-eol stream) byte))
51
(stream-fresh-line stream)
52
(setf (event-stream-eol stream) nil))))
53
(#.(char-code #\return)
55
(#.(char-code #\return)
56
(stream-fresh-line stream)
57
(setf (event-stream-eol stream) byte))
58
(#.(char-code #\linefeed)
59
(setf (event-stream-eol stream) byte))
61
(stream-fresh-line stream)
62
(setf (event-stream-eol stream) nil))))
65
((#.(char-code #\return) #.(char-code #\linefeed))
66
(setf (event-stream-eol stream) byte)))))
67
(stream-write-byte (event-stream-stream stream) byte))
69
(defun call-with-event-stream (function base-stream)
70
(let ((event-stream (make-instance 'event-stream :stream base-stream)))
71
(funcall function event-stream)))
73
(defmacro with-event-stream ((stream base-stream) &body body)
74
`(flet ((event-stream-function (,stream) ,@body))
75
(call-with-event-stream #'event-stream-function ,base-stream)))