jsonl.go

 1// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 2
 3package jsonl
 4
 5import (
 6	"bufio"
 7	"encoding/json"
 8	"io"
 9	"net/http"
10)
11
12type Stream[T any] struct {
13	rc  io.ReadCloser
14	scn *bufio.Scanner
15	cur T
16	err error
17}
18
19func NewStream[T any](res *http.Response, err error) *Stream[T] {
20	if res == nil || res.Body == nil {
21		return nil
22	}
23
24	return &Stream[T]{
25		rc:  res.Body,
26		scn: bufio.NewScanner(res.Body),
27		err: err,
28	}
29}
30
31func (s *Stream[T]) Next() bool {
32	if s.err != nil {
33		return false
34	}
35
36	if !s.scn.Scan() {
37		return false
38	}
39
40	line := s.scn.Bytes()
41	var nxt T
42	s.err = json.Unmarshal(line, &nxt)
43	s.cur = nxt
44	return s.err == nil
45}
46
47func (s *Stream[T]) Current() T {
48	return s.cur
49}
50
51func (s *Stream[T]) Err() error {
52	return s.err
53}
54
55func (s *Stream[T]) Close() error {
56	return s.rc.Close()
57}