Compare commits

...

2 Commits

Author SHA1 Message Date
3755adde02 feat(readerx): basic functionality 2023-07-03 19:31:09 +10:00
aeecc55673 chore: project init 2023-07-03 18:58:33 +10:00
4 changed files with 63 additions and 0 deletions

1
.gitignore vendored Normal file
View File

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

1
.tool-versions Normal file
View File

@ -0,0 +1 @@
golang 1.18.10

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module gitea.suyono.dev/suyono/readerx
go 1.18

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
}