mirror of
https://github.com/miniflux/v2.git
synced 2025-08-16 18:01:37 +00:00
46 lines
756 B
Go
46 lines
756 B
Go
package main
|
|
|
|
import "io"
|
|
|
|
type countingReader struct {
|
|
io.Reader
|
|
N int
|
|
}
|
|
|
|
func (r *countingReader) Read(p []byte) (int, error) {
|
|
n, err := r.Reader.Read(p)
|
|
r.N += n
|
|
return n, err
|
|
}
|
|
|
|
type countingWriter struct {
|
|
io.Writer
|
|
N int
|
|
}
|
|
|
|
func (w *countingWriter) Write(p []byte) (int, error) {
|
|
n, err := w.Writer.Write(p)
|
|
w.N += n
|
|
return n, err
|
|
}
|
|
|
|
type prependReader struct {
|
|
io.ReadCloser
|
|
prepend []byte
|
|
}
|
|
|
|
func NewPrependReader(r io.ReadCloser, prepend []byte) *prependReader {
|
|
return &prependReader{r, prepend}
|
|
}
|
|
|
|
func (r *prependReader) Read(p []byte) (int, error) {
|
|
if r.prepend != nil {
|
|
n := copy(p, r.prepend)
|
|
if n != len(r.prepend) {
|
|
return n, io.ErrShortBuffer
|
|
}
|
|
r.prepend = nil
|
|
return n, nil
|
|
}
|
|
return r.ReadCloser.Read(p)
|
|
}
|