2 Commits

Author SHA1 Message Date
amery 408b66bb79 build-sys: import build system from darvaza.org/core
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-28 20:58:05 +00:00
amery 88966c1a7d introduce NewReadCloser to allow byte and string buffers to offer io.ReadCloser
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-28 20:55:06 +00:00
+15 -16
View File
@@ -32,38 +32,37 @@ func (rc *ReadCloser) Read(b []byte) (int, error) {
// remove it if it doesn't support Close() and fail // remove it if it doesn't support Close() and fail
// if closed twice // if closed twice
func (rc *ReadCloser) Close() error { func (rc *ReadCloser) Close() error {
switch { switch p := rc.r.(type) {
case rc.r != nil: case io.Closer:
return p.Close()
case nil:
return fs.ErrClosed
default:
rc.r = nil rc.r = nil
return nil return nil
default:
return fs.ErrClosed
} }
} }
// NewReadCloser wraps a [io.Reader] to satisfy // NewReadCloser wraps a [io.Reader] to satisfy
// [io.ReadCloser] if needed // [io.ReadCloser]
func NewReadCloser(r io.Reader) io.ReadCloser { func NewReadCloser(r io.Reader) *ReadCloser {
switch p := r.(type) { if r == nil {
case io.ReadCloser:
return p
case nil:
return nil return nil
default: }
return &ReadCloser{
r: r, return &ReadCloser{
} r: r,
} }
} }
// NewReadCloserBytes wraps a bytes slice to implement // NewReadCloserBytes wraps a bytes slice to implement
// a [io.ReadCloser] // a [io.ReadCloser]
func NewReadCloserBytes(b []byte) io.ReadCloser { func NewReadCloserBytes(b []byte) *ReadCloser {
return NewReadCloser(bytes.NewReader(b)) return NewReadCloser(bytes.NewReader(b))
} }
// NewReadCloserString wraps a string to implement // NewReadCloserString wraps a string to implement
// a [io.ReadCloser] // a [io.ReadCloser]
func NewReadCloserString(s string) io.ReadCloser { func NewReadCloserString(s string) *ReadCloser {
return NewReadCloser(strings.NewReader(s)) return NewReadCloser(strings.NewReader(s))
} }