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
// if closed twice
func (rc *ReadCloser) Close() error {
switch {
case rc.r != nil:
switch p := rc.r.(type) {
case io.Closer:
return p.Close()
case nil:
return fs.ErrClosed
default:
rc.r = nil
return nil
default:
return fs.ErrClosed
}
}
// NewReadCloser wraps a [io.Reader] to satisfy
// [io.ReadCloser] if needed
func NewReadCloser(r io.Reader) io.ReadCloser {
switch p := r.(type) {
case io.ReadCloser:
return p
case nil:
// [io.ReadCloser]
func NewReadCloser(r io.Reader) *ReadCloser {
if r == nil {
return nil
default:
return &ReadCloser{
r: r,
}
}
return &ReadCloser{
r: r,
}
}
// NewReadCloserBytes wraps a bytes slice to implement
// a [io.ReadCloser]
func NewReadCloserBytes(b []byte) io.ReadCloser {
func NewReadCloserBytes(b []byte) *ReadCloser {
return NewReadCloser(bytes.NewReader(b))
}
// NewReadCloserString wraps a string to implement
// a [io.ReadCloser]
func NewReadCloserString(s string) io.ReadCloser {
func NewReadCloserString(s string) *ReadCloser {
return NewReadCloser(strings.NewReader(s))
}