github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/jsonlines/array.go (about)

     1  package jsonlines
     2  
     3  import (
     4  	"bufio"
     5  	"bytes"
     6  	"context"
     7  	"fmt"
     8  
     9  	"github.com/lmorg/murex/lang/stdio"
    10  	"github.com/lmorg/murex/lang/types"
    11  )
    12  
    13  func readArray(ctx context.Context, read stdio.Io, callback func([]byte)) error {
    14  	scanner := bufio.NewScanner(read)
    15  	for scanner.Scan() {
    16  		select {
    17  		case <-ctx.Done():
    18  			return scanner.Err()
    19  
    20  		default:
    21  			callback(bytes.TrimSpace(scanner.Bytes()))
    22  		}
    23  	}
    24  
    25  	err := scanner.Err()
    26  	if err != nil {
    27  		return fmt.Errorf("error while reading a %s array: %s", types.JsonLines, err.Error())
    28  	}
    29  	return nil
    30  }
    31  
    32  func readArrayWithType(ctx context.Context, read stdio.Io, callback func(interface{}, string)) error {
    33  	scanner := bufio.NewScanner(read)
    34  	for scanner.Scan() {
    35  		select {
    36  		case <-ctx.Done():
    37  			return scanner.Err()
    38  
    39  		default:
    40  			callback(bytes.TrimSpace(scanner.Bytes()), types.Json)
    41  		}
    42  	}
    43  
    44  	err := scanner.Err()
    45  	if err != nil {
    46  		return fmt.Errorf("error while reading a %s array: %s", types.JsonLines, err.Error())
    47  	}
    48  	return nil
    49  }
    50  
    51  type arrayWriter struct {
    52  	writer stdio.Io
    53  }
    54  
    55  func newArrayWriter(writer stdio.Io) (stdio.ArrayWriter, error) {
    56  	w := &arrayWriter{writer: writer}
    57  	return w, nil
    58  }
    59  
    60  func (w *arrayWriter) Write(b []byte) (err error) {
    61  	_, err = w.writer.Writeln(b)
    62  	return
    63  }
    64  
    65  func (w *arrayWriter) WriteString(s string) (err error) {
    66  	return w.Write([]byte(s))
    67  }
    68  
    69  func (w *arrayWriter) Close() error {
    70  	return nil
    71  }