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 | |
| 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')
| -rw-r--r-- | vendor/codeberg.org/gruf/go-store/v2/util/io.go | 96 | ||||
| -rw-r--r-- | vendor/codeberg.org/gruf/go-store/v2/util/pool.go | 20 |
2 files changed, 116 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() +} diff --git a/vendor/codeberg.org/gruf/go-store/v2/util/pool.go b/vendor/codeberg.org/gruf/go-store/v2/util/pool.go new file mode 100644 index 000000000..dc35dae01 --- /dev/null +++ b/vendor/codeberg.org/gruf/go-store/v2/util/pool.go @@ -0,0 +1,20 @@ +package util + +import ( + "codeberg.org/gruf/go-fastpath" + "codeberg.org/gruf/go-pools" +) + +// pathBuilderPool is the global fastpath.Builder pool. +var pathBuilderPool = pools.NewPathBuilderPool(512) + +// GetPathBuilder fetches a fastpath.Builder object from the pool. +func GetPathBuilder() *fastpath.Builder { + return pathBuilderPool.Get() +} + +// PutPathBuilder places supplied fastpath.Builder back in the pool. +func PutPathBuilder(pb *fastpath.Builder) { + pb.Reset() + pathBuilderPool.Put(pb) +} |
