Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
612 B
31 lines
612 B
package limio |
|
|
|
import "io" |
|
|
|
type limitedWriter struct { |
|
W io.Writer |
|
N int64 |
|
} |
|
|
|
func (l *limitedWriter) Write(p []byte) (n int, err error) { |
|
if l.N <= 0 { |
|
return 0, io.ErrShortWrite |
|
} |
|
if int64(len(p)) > l.N { |
|
p = p[0:l.N] |
|
err = io.ErrShortWrite |
|
} |
|
n, er := l.W.Write(p) |
|
if er != nil { |
|
err = er |
|
} |
|
l.N -= int64(n) |
|
return n, err |
|
} |
|
|
|
// LimitWriter works like io.LimitReader. It writes at most n bytes |
|
// to the underlying Writer. It returns io.ErrShortWrite if more than n |
|
// bytes are attempted to be written. |
|
func LimitWriter(w io.Writer, n int64) io.Writer { |
|
return &limitedWriter{W: w, N: n} |
|
}
|
|
|