in golang/service/service.go [594:630]
func ReadAsSSE(body io.ReadCloser) (<-chan SSEEvent, <-chan error) {
eventChannel := make(chan SSEEvent)
errorChannel := make(chan error)
go func() {
defer body.Close()
defer close(eventChannel)
reader := bufio.NewReader(body)
var eventLines []string
for {
line, err := reader.ReadString('\n')
if err == io.EOF {
break
}
if err != nil {
errorChannel <- err
}
line = strings.TrimRight(line, "\n")
if line == "" {
if len(eventLines) > 0 {
event, err := parseEvent(eventLines)
if err != nil {
errorChannel <- err
}
eventChannel <- event
eventLines = []string{}
}
continue
}
eventLines = append(eventLines, line)
}
}()
return eventChannel, errorChannel
}