github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/ranges/buffer.go (about) 1 package ranges 2 3 import ( 4 "github.com/lmorg/murex/builtins/pipes/streams" 5 "github.com/lmorg/murex/lang" 6 "github.com/lmorg/murex/lang/stdio" 7 ) 8 9 func buffer(p *lang.Process, dt string) (stdio.Io, int, error) { 10 stdin := streams.NewStdinWithContext(p.Context, p.Done) 11 stdin.SetDataType(dt) 12 13 array, err := stdin.WriteArray(dt) 14 if err != nil { 15 return nil, 0, err 16 } 17 18 var ( 19 nestedErr error 20 length int 21 ) 22 23 err = p.Stdin.ReadArray(p.Context, func(b []byte) { 24 nestedErr = array.Write(b) 25 if nestedErr != nil { 26 p.Done() 27 return 28 } 29 length++ 30 }) 31 32 if nestedErr != nil { 33 return nil, 0, nestedErr 34 } 35 36 if err != nil { 37 return nil, 0, err 38 } 39 40 return stdin, length, array.Close() 41 }