func ReadAsSSE()

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
}