feat(readerx): basic functionality
This commit is contained in:
parent
aeecc55673
commit
3755adde02
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/.idea/
|
||||
58
readerx.go
Normal file
58
readerx.go
Normal 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
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user