summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-store/v2/util/io.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-11-05 12:10:19 +0100
committerLibravatar GitHub <noreply@github.com>2022-11-05 11:10:19 +0000
commitbcb80d3ff4a669d52d63950c8830427646c05884 (patch)
tree4aa95a83545b3f87a80fe4b625cb6f2ad9c4427f /vendor/codeberg.org/gruf/go-store/v2/util/io.go
parent[bugfix] Increase field size limits when registering apps (#958) (diff)
downloadgotosocial-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.go96
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()
+}