diff options
author | 2022-11-05 12:10:19 +0100 | |
---|---|---|
committer | 2022-11-05 11:10:19 +0000 | |
commit | bcb80d3ff4a669d52d63950c8830427646c05884 (patch) | |
tree | 4aa95a83545b3f87a80fe4b625cb6f2ad9c4427f /vendor/codeberg.org/gruf/go-store/v2/util/io.go | |
parent | [bugfix] Increase field size limits when registering apps (#958) (diff) | |
download | gotosocial-bcb80d3ff4a669d52d63950c8830427646c05884.tar.xz |
[chore] bump gruf/go-store to v2 (#953)
* [chore] bump gruf/go-store to v2
* no more boobs
Diffstat (limited to 'vendor/codeberg.org/gruf/go-store/v2/util/io.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-store/v2/util/io.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/vendor/codeberg.org/gruf/go-store/v2/util/io.go b/vendor/codeberg.org/gruf/go-store/v2/util/io.go new file mode 100644 index 000000000..334ae4dd0 --- /dev/null +++ b/vendor/codeberg.org/gruf/go-store/v2/util/io.go @@ -0,0 +1,96 @@ +package util + +import ( + "bytes" + "io" +) + +// ReaderSize ... +type ReaderSize interface { + io.Reader + + // Size ... + Size() int64 +} + +// ByteReaderSize ... +type ByteReaderSize struct { + bytes.Reader + sz int64 +} + +// NewByteReaderSize ... +func NewByteReaderSize(b []byte) *ByteReaderSize { + rs := ByteReaderSize{} + rs.Reset(b) + return &rs +} + +// Size implements ReaderSize.Size(). +func (rs ByteReaderSize) Size() int64 { + return rs.sz +} + +// Reset resets the ReaderSize to be reading from b. +func (rs *ByteReaderSize) Reset(b []byte) { + rs.Reader.Reset(b) + rs.sz = int64(len(b)) +} + +// NopReadCloser turns a supplied io.Reader into io.ReadCloser with a nop Close() implementation. +func NopReadCloser(r io.Reader) io.ReadCloser { + return &nopReadCloser{r} +} + +// NopWriteCloser turns a supplied io.Writer into io.WriteCloser with a nop Close() implementation. +func NopWriteCloser(w io.Writer) io.WriteCloser { + return &nopWriteCloser{w} +} + +// ReadCloserWithCallback adds a customizable callback to be called upon Close() of a supplied io.ReadCloser. +func ReadCloserWithCallback(rc io.ReadCloser, cb func()) io.ReadCloser { + return &callbackReadCloser{ + ReadCloser: rc, + callback: cb, + } +} + +// WriteCloserWithCallback adds a customizable callback to be called upon Close() of a supplied io.WriteCloser. +func WriteCloserWithCallback(wc io.WriteCloser, cb func()) io.WriteCloser { + return &callbackWriteCloser{ + WriteCloser: wc, + callback: cb, + } +} + +// nopReadCloser turns an io.Reader -> io.ReadCloser with a nop Close(). +type nopReadCloser struct{ io.Reader } + +func (r *nopReadCloser) Close() error { return nil } + +// nopWriteCloser turns an io.Writer -> io.WriteCloser with a nop Close(). +type nopWriteCloser struct{ io.Writer } + +func (w nopWriteCloser) Close() error { return nil } + +// callbackReadCloser allows adding our own custom callback to an io.ReadCloser. +type callbackReadCloser struct { + io.ReadCloser + callback func() +} + +func (c *callbackReadCloser) Close() error { + defer c.callback() + return c.ReadCloser.Close() +} + +// callbackWriteCloser allows adding our own custom callback to an io.WriteCloser. +type callbackWriteCloser struct { + io.WriteCloser + callback func() +} + +func (c *callbackWriteCloser) Close() error { + defer c.callback() + return c.WriteCloser.Close() +} |