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}