2 Commits

Author SHA1 Message Date
amery c9dbaa958f build-sys: import build system from darvaza.org/core
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-28 21:14:23 +00:00
amery 442f7b7c0c introduce NewReadCloser to allow byte and string buffers to offer io.ReadCloser
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-28 21:13:16 +00:00
+16 -15
View File
@@ -32,37 +32,38 @@ 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 p := rc.r.(type) { switch {
case io.Closer: case rc.r != nil:
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] // [io.ReadCloser] if needed
func NewReadCloser(r io.Reader) *ReadCloser { func NewReadCloser(r io.Reader) io.ReadCloser {
if r == nil { switch p := r.(type) {
case io.ReadCloser:
return p
case nil:
return nil return nil
} default:
return &ReadCloser{
return &ReadCloser{ r: r,
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) *ReadCloser { func NewReadCloserBytes(b []byte) io.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) *ReadCloser { func NewReadCloserString(s string) io.ReadCloser {
return NewReadCloser(strings.NewReader(s)) return NewReadCloser(strings.NewReader(s))
} }