feat(readerx): basic functionality

This commit is contained in:
Suyono 2023-07-03 19:30:06 +10:00
parent aeecc55673
commit 3755adde02
2 changed files with 59 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/.idea/

58
readerx.go Normal file
View File

@ -0,0 +1,58 @@
package readerx
import "io"
type Reader struct {
reader io.Reader
fun func([]byte) (int, error)
}
func NewReader(reader io.Reader) Reader {
return Reader{
reader: reader,
}
}
func (r Reader) Read(b []byte) (l []byte, n int, err error) {
n, err = r.reader.Read(b)
if n > 0 {
l = b[:n]
}
return
}
func (r Reader) ReadX(b []byte) (l []byte, err error) {
l, _, err = r.Read(b)
return
}
func (r Reader) readFunc(b []byte) (l []byte, n int, err error) {
n, err = r.fun(b)
if n > 0 {
l = b[:n]
}
return
}
func ReadFrom(reader io.Reader, b []byte) (l []byte, n int, err error) {
l, n, err = NewReader(reader).Read(b)
return
}
func ReadFromX(reader io.Reader, b []byte) (l []byte, err error) {
l, err = NewReader(reader).ReadX(b)
return
}
func ReadFunc(f func([]byte) (int, error), b []byte) (l []byte, n int, err error) {
r := Reader{
fun: f,
}
l, n, err = r.readFunc(b)
return
}
func ReadFuncX(f func([]byte) (int, error), b []byte) (l []byte, err error) {
l, _, err = ReadFunc(f, b)
return
}