buf

package
v1.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2025 License: AGPL-3.0 Imports: 20 Imported by: 0

Documentation

Overview

Package buf provides a light-weight memory allocation mechanism.

Index

Constants

View Source
const (
	Offset = 60
	// default buffer BufferSize
	BufferSize = 1024 * 8
	// available to write.
	Size = BufferSize - Offset
)

Variables

View Source
var (
	// Discard is a Writer that swallows all contents written in.
	Discard Writer = NoOpWriter(0)

	// DiscardBytes is an io.Writer that swallows all contents written in.
	DiscardBytes io.Writer = NoOpWriter(0)

	DiscardReader NoOpWriter = NoOpWriter(0)
)
View Source
var ErrNotTimeoutReader = errors.New("not a TimeoutReader")
View Source
var ErrReadTimeout = errors.New("IO timeout")

ErrReadTimeout is an error that happens with IO timeout.

View Source
var ErrWriteTimeout = errors.New("IO timeout")

Functions

func Copy

func Copy(reader Reader, writer Writer, options ...CopyOption) error

Copy dumps all payload from reader to writer or stops when an error occurs or EOF in which case it returns nil. An error is either failure to read or failure to write

func CopyOnceTimeout

func CopyOnceTimeout(reader Reader, writer Writer, timeout time.Duration) error

func IsReadError

func IsReadError(err error) bool

IsReadError returns true if the error in Copy() comes from reading.

func IsWriteError

func IsWriteError(err error) bool

IsWriteError returns true if the error in Copy() comes from writing.

func MergeMulti

func MergeMulti(dest MultiBuffer, src MultiBuffer) (MultiBuffer, MultiBuffer)

MergeMulti merges content from src to dest, and returns the new address of dest and src

func ReadAllToBytes

func ReadAllToBytes(reader io.Reader) ([]byte, error)

ReadAllToBytes reads all content from the reader into a byte array, until EOF.

func SplitFirst

func SplitFirst(mb MultiBuffer) (MultiBuffer, *Buffer)

SplitFirst splits the first Buffer from the beginning of the MultiBuffer.

func SplitSize

func SplitSize(mb MultiBuffer, size int32) (MultiBuffer, MultiBuffer)

SplitSize splits the beginning of the MultiBuffer into another one, for at most size bytes. The latter MultiBuffer is the one with size bytes.

func Unwrap

func Unwrap(unwrapReader UnwrapReader) any

unwrap reader to maximum extent

func WriteAllBytes

func WriteAllBytes(writer io.Writer, payload []byte) error

WriteAllBytes ensures all bytes are written into the given writer.

Types

type Buffer

type Buffer struct {
	// contains filtered or unexported fields
}

Buffer is a recyclable allocation of a byte array. Buffer.Release() recycles the buffer into an internal buffer pool, in order to recreate a buffer more quickly.

func FromBytes

func FromBytes(data []byte) *Buffer

FromBytes creates a Buffer with an existed bytearray

func New

func New() *Buffer

func NewWithRelease

func NewWithRelease(data []byte, release func()) *Buffer

func NewWithSize

func NewWithSize(size int32) *Buffer

NewWithSize creates a Buffer with 0 length and capacity with at least the given size.

func ReadBuffer

func ReadBuffer(r io.Reader) (*Buffer, error)

ReadBuffer reads a Buffer from the given reader.

func StackNew

func StackNew() Buffer

StackNew creates a new Buffer object on stack. This method is for buffers that is released in the same function.

func (*Buffer) AdvanceStart

func (b *Buffer) AdvanceStart(from int32)

AdvanceStart cuts the buffer at the given position. Changes [b.start]

func (*Buffer) Available

func (b *Buffer) Available() int32

func (*Buffer) Byte

func (b *Buffer) Byte(index int32) byte

Byte returns the bytes at index.

func (*Buffer) Bytes

func (b *Buffer) Bytes() []byte

Bytes returns the content bytes of this Buffer.

func (*Buffer) BytesFrom

func (b *Buffer) BytesFrom(from int32) []byte

BytesFrom returns a slice of this Buffer starting from the given position.

func (*Buffer) BytesRange

func (b *Buffer) BytesRange(from, to int32) []byte

BytesRange returns a slice of this buffer with given from and to boundary.

func (*Buffer) BytesTo

func (b *Buffer) BytesTo(to int32) []byte

BytesTo returns a slice of this Buffer from start to the given position.

func (*Buffer) Cap

func (b *Buffer) Cap() int32

Cap returns the len/cap of the underlying slice. len - start

func (*Buffer) Clear

func (b *Buffer) Clear()

Clear clears the content of the buffer, results an empty buffer with Len() = 0.

func (*Buffer) Clone

func (b *Buffer) Clone() *Buffer

Clone returns a new Buffer with the same content as the original.

func (*Buffer) Extend

func (b *Buffer) Extend(n int32) []byte

Extend increases the buffer size by n bytes, and returns the extended part. It panics if result size is larger than buf.Size. change b.end

func (*Buffer) IsEmpty

func (b *Buffer) IsEmpty() bool

IsEmpty returns true if the buffer is empty.

func (*Buffer) IsFull

func (b *Buffer) IsFull() bool

IsFull returns true if the buffer has no more room to grow.

func (*Buffer) Len

func (b *Buffer) Len() int32

Len returns the length of the buffer content.

func (*Buffer) Read

func (b *Buffer) Read(data []byte) (int, error)

Read implements io.Reader.Read().

func (*Buffer) ReadByte

func (b *Buffer) ReadByte() (byte, error)

ReadByte implements io.ByteReader

func (*Buffer) ReadBytes

func (b *Buffer) ReadBytes(length int32) ([]byte, error)

ReadBytes implements bufio.Reader.ReadBytes

func (*Buffer) ReadFullFrom

func (b *Buffer) ReadFullFrom(reader io.Reader, size int32) (int64, error)

ReadFullFrom reads exact size of bytes from given reader, or until error occurs.

func (*Buffer) ReadOnce

func (b *Buffer) ReadOnce(reader io.Reader) (int64, error)

func (*Buffer) ReadOnceWithSize

func (b *Buffer) ReadOnceWithSize(reader io.Reader, size int32) (int64, error)

func (*Buffer) Release

func (b *Buffer) Release()

Release recycles the buffer.v into an internal buffer pool and resets start and end to 0.

func (*Buffer) Resize

func (b *Buffer) Resize(from, to int32)

Resize cuts the buffer at the given position. [start+from, start+to]

func (*Buffer) RetreatStart

func (b *Buffer) RetreatStart(v int32)

RetreatStart moves the buffer start position back by v bytes. If retreat cannot be done because of out of bound, a new slice is allocated from the pool and it replace the exsiting one. If v is negative, it will be ignored.

func (*Buffer) SetByte

func (b *Buffer) SetByte(index int32, value byte)

SetByte sets the byte value at index.

func (*Buffer) String

func (b *Buffer) String() string

String returns the string form of this Buffer.

func (*Buffer) Write

func (b *Buffer) Write(data []byte) (int, error)

Write implements Write method in io.Writer.

func (*Buffer) WriteByte

func (b *Buffer) WriteByte(v byte) error

WriteByte writes a single byte into the buffer.

func (*Buffer) WriteString

func (b *Buffer) WriteString(s string) (int, error)

WriteString implements io.StringWriter.

func (*Buffer) Zero

func (b *Buffer) Zero(from, to int32)

func (*Buffer) ZeroAll

func (b *Buffer) ZeroAll()

type BufferToBytesWriter

type BufferToBytesWriter struct {
	io.Writer
	// contains filtered or unexported fields
}

BufferToBytesWriter is a Writer that writes alloc.Buffer into underlying writer. used in tcp. Writer is typically a net.Conn

func (*BufferToBytesWriter) CloseWrite

func (w *BufferToBytesWriter) CloseWrite() error

func (*BufferToBytesWriter) OkayToUnwrapWriter

func (w *BufferToBytesWriter) OkayToUnwrapWriter() int

func (*BufferToBytesWriter) ReadFrom

func (w *BufferToBytesWriter) ReadFrom(reader io.Reader) (int64, error)

ReadFrom implements io.ReaderFrom.

func (*BufferToBytesWriter) UnwrapWriter

func (w *BufferToBytesWriter) UnwrapWriter() any

func (*BufferToBytesWriter) WriteMultiBuffer

func (w *BufferToBytesWriter) WriteMultiBuffer(mb MultiBuffer) error

WriteMultiBuffer implements Writer. This method takes ownership of the given buffer. transfer multi buffer to net.buffers and use net.Buffers.WriteTo to write to the underlying io.writer

type BufferedReader

type BufferedReader struct {
	// Reader is the underlying reader to be read from
	Reader Reader
	// Buffer is the internal buffer to be read from first
	Buffer MultiBuffer
	// Spliter is a function to read bytes from MultiBuffer
	Spliter func(MultiBuffer, []byte) (MultiBuffer, int)
}

BufferedReader is a Reader that keeps its internal buffer.

func (*BufferedReader) BufferedBytes

func (r *BufferedReader) BufferedBytes() int32

BufferedBytes returns the number of bytes that is cached in this reader.

func (*BufferedReader) Close

func (r *BufferedReader) Close() error

func (*BufferedReader) OkayToUnwrapReader

func (r *BufferedReader) OkayToUnwrapReader() int

func (*BufferedReader) Read

func (r *BufferedReader) Read(b []byte) (int, error)

Read implements io.Reader. It reads from internal buffer first (if available) and then reads from the underlying reader. If the internal buffer is empty, it first reads a MultiBuffer from the underlying reader, then split the MultiBuffer based on b

func (*BufferedReader) ReadAtMost

func (r *BufferedReader) ReadAtMost(size int32) (MultiBuffer, error)

ReadAtMost returns a MultiBuffer with at most size.

func (*BufferedReader) ReadByte

func (r *BufferedReader) ReadByte() (byte, error)

ReadByte implements io.ByteReader.

func (*BufferedReader) ReadMultiBuffer

func (r *BufferedReader) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

func (*BufferedReader) UnwrapReader

func (r *BufferedReader) UnwrapReader() any

func (*BufferedReader) WriteTo

func (r *BufferedReader) WriteTo(writer io.Writer) (int64, error)

WriteTo implements io.WriterTo.

type BufferedWriter

type BufferedWriter struct {
	sync.Mutex
	Writer
	// contains filtered or unexported fields
}

BufferedWriter is a Writer with internal buffer.

func NewBufferedWriter

func NewBufferedWriter(writer Writer) *BufferedWriter

NewBufferedWriter creates a new BufferedWriter.

func (*BufferedWriter) Buffered

func (w *BufferedWriter) Buffered() bool

func (*BufferedWriter) Close

func (w *BufferedWriter) Close() error

Close implements io.Closable.

func (*BufferedWriter) CloseWrite

func (w *BufferedWriter) CloseWrite() error

func (*BufferedWriter) Flush

func (w *BufferedWriter) Flush() error

Flush flushes buffered content into underlying writer.

func (*BufferedWriter) OkayToUnwrapWriter

func (w *BufferedWriter) OkayToUnwrapWriter() int

func (*BufferedWriter) ReadFrom

func (w *BufferedWriter) ReadFrom(reader io.Reader) (int64, error)

ReadFrom implements io.ReaderFrom.

func (*BufferedWriter) SetBuffered

func (w *BufferedWriter) SetBuffered(f bool) error

SetBuffered sets whether the internal buffer is used. If set to false, Flush() will be called to clear the buffer.

func (*BufferedWriter) UnwrapWriter

func (w *BufferedWriter) UnwrapWriter() any

func (*BufferedWriter) Write

func (w *BufferedWriter) Write(b []byte) (int, error)

Write implements io.Writer. If w.buffered is true, the given bytes will be written into internal buffer, if after writing the buffer is full, it will be flushed into underlying writer.

func (*BufferedWriter) WriteByte

func (w *BufferedWriter) WriteByte(c byte) error

WriteByte implements io.ByteWriter.

func (*BufferedWriter) WriteMultiBuffer

func (w *BufferedWriter) WriteMultiBuffer(b MultiBuffer) error

WriteMultiBuffer implements Writer. It takes ownership of the given MultiBuffer. If w.buffered is true, the given MultiBuffer will be written into internal buffer, if after writing the buffer is full, it will be flushed into underlying writer; if the buffer is not full, that's it, the buffer is not written into the underlying writer.

type CloseWriter

type CloseWriter interface {
	CloseWrite() error
}

type CopyOption

type CopyOption func(*copySetting)

func AddToStatCounter

func AddToStatCounter(sc *atomic.Uint64) CopyOption

AddToStatCounter a CopyOption add to stat counter

func CountSize

func CountSize(sc *SizeCounter) CopyOption

CountSize is a CopyOption that sums the total size of data copied into the given SizeCounter.

func DataHandler

func DataHandler(dh dataHandler) CopyOption

func OnEOFCopyOption

func OnEOFCopyOption(f func()) CopyOption

func OnEndCopyOption

func OnEndCopyOption(f func()) CopyOption

func UpdateActivityCopyOption

func UpdateActivityCopyOption(ac *signal.ActivityChecker) CopyOption

type DdlReaderWriter

type DdlReaderWriter interface {
	ReaderWriter
	SetReadDeadline(time.Time) error
}

type DeadlineReader

type DeadlineReader interface {
	Reader
	SetReadDeadline(time.Time) error
}

type LengthPacketReader

type LengthPacketReader struct {
	io.Reader
}

func NewLengthPacketReader

func NewLengthPacketReader(reader io.Reader) *LengthPacketReader

func (*LengthPacketReader) ReadMultiBuffer

func (r *LengthPacketReader) ReadMultiBuffer() (MultiBuffer, error)

type MemoryReader

type MemoryReader struct {
	// contains filtered or unexported fields
}

all data read from reader will be saved to history until stop

func NewMemoryReader

func NewMemoryReader(reader io.Reader) *MemoryReader

func (*MemoryReader) History

func (c *MemoryReader) History() MultiBuffer

func (*MemoryReader) OkayToUnwrapReader

func (c *MemoryReader) OkayToUnwrapReader() int

func (*MemoryReader) Read

func (c *MemoryReader) Read(p []byte) (int, error)

func (*MemoryReader) StopMemorize

func (c *MemoryReader) StopMemorize()

type MultiBuffer

type MultiBuffer []*Buffer

MultiBuffer is a list of Buffers. The order of Buffer matters.

func Compact

func Compact(mb MultiBuffer) MultiBuffer

Compact returns another MultiBuffer by merging all content of the given one together.

func MergeBytes

func MergeBytes(dest MultiBuffer, src []byte) MultiBuffer

MergeBytes merges the given bytes into MultiBuffer and return the new address of the merged MultiBuffer.

func ReadFrom

func ReadFrom(reader io.Reader) (MultiBuffer, error)

ReadFrom reads all content from reader until EOF.

func ReleaseMulti

func ReleaseMulti(mb MultiBuffer) MultiBuffer

ReleaseMulti releases all content of the MultiBuffer, and returns an empty MultiBuffer.

func RemoveEmptyBuffer

func RemoveEmptyBuffer(mb MultiBuffer) MultiBuffer

RemoveEmptyBuffer removes empty buffers from the given MultiBuffer. The removed buffers are released.

func SplitBytes

func SplitBytes(mb MultiBuffer, b []byte) (MultiBuffer, int)

SplitBytes splits the given amount of bytes from the beginning of the MultiBuffer. It returns the new address of MultiBuffer leftover, and number of bytes written into the input byte slice. bytes in mb are written into b

func SplitFirstBytes

func SplitFirstBytes(mb MultiBuffer, p []byte) (MultiBuffer, int)

SplitFirstBytes splits the first buffer from MultiBuffer, and then copy its content into the given slice.

func WriteMultiBuffer

func WriteMultiBuffer(writer io.Writer, mb MultiBuffer) (MultiBuffer, error)

WriteMultiBuffer writes all buffers from the MultiBuffer to the Writer one by one, and return error if any, with leftover MultiBuffer.

func (MultiBuffer) Copy

func (mb MultiBuffer) Copy(b []byte) int

Copy copied the beginning part of the MultiBuffer into the given byte array.

func (MultiBuffer) IsEmpty

func (mb MultiBuffer) IsEmpty() bool

IsEmpty returns true if the MultiBuffer has no content.

func (MultiBuffer) Len

func (mb MultiBuffer) Len() int32

Len returns the total number of bytes in the MultiBuffer.

func (MultiBuffer) String

func (mb MultiBuffer) String() string

String returns the content of the MultiBuffer in string.

type MultiBufferContainer

type MultiBufferContainer struct {
	MultiBuffer
}

MultiBufferContainer is a ReadWriteCloser wrapper over MultiBuffer.

func (*MultiBufferContainer) Close

func (c *MultiBufferContainer) Close() error

Close implements io.Closer.

func (*MultiBufferContainer) CloseWrite

func (*MultiBufferContainer) CloseWrite() error

func (*MultiBufferContainer) Read

func (c *MultiBufferContainer) Read(b []byte) (int, error)

Read implements io.Reader.

func (*MultiBufferContainer) ReadMultiBuffer

func (c *MultiBufferContainer) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

func (*MultiBufferContainer) Write

func (c *MultiBufferContainer) Write(b []byte) (int, error)

Write implements io.Writer.

func (*MultiBufferContainer) WriteMultiBuffer

func (c *MultiBufferContainer) WriteMultiBuffer(b MultiBuffer) error

WriteMultiBuffer implements Writer.

type MultiLengthPacketWriter

type MultiLengthPacketWriter struct {
	Writer
}

create a new mb for each buffer in the old multi buffer, write the length of the buffer first, then write the buffer

func NewMultiLengthPacketWriter

func NewMultiLengthPacketWriter(writer Writer) *MultiLengthPacketWriter

func (*MultiLengthPacketWriter) WriteMultiBuffer

func (w *MultiLengthPacketWriter) WriteMultiBuffer(mb MultiBuffer) error

type NoOpWriter

type NoOpWriter byte

func (NoOpWriter) CloseWrite

func (NoOpWriter) CloseWrite() error

func (NoOpWriter) ReadFrom

func (NoOpWriter) ReadFrom(reader io.Reader) (int64, error)

func (NoOpWriter) ReadFullFrom

func (NoOpWriter) ReadFullFrom(reader io.Reader, size int32) (int64, error)

func (NoOpWriter) Write

func (NoOpWriter) Write(b []byte) (int, error)

func (NoOpWriter) WriteMultiBuffer

func (NoOpWriter) WriteMultiBuffer(b MultiBuffer) error

type PacketReader

type PacketReader struct {
	io.Reader
}

PacketReader is a Reader that read one Buffer every time. If no pakcet has arrived, it keeps waiting until one arrives.

func (*PacketReader) ReadMultiBuffer

func (r *PacketReader) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

type RW

type RW struct {
	Reader
	Writer
}

func NewRW

func NewRW(r Reader, w Writer) *RW

type RWD

type RWD struct {
	Reader
	Writer
	SetDeadline
}

func NewRWD

func NewRWD(r Reader, w Writer, d SetDeadline) *RWD

func (*RWD) OkayToUnwrapReader

func (r *RWD) OkayToUnwrapReader() int

func (*RWD) OkayToUnwrapWriter

func (r *RWD) OkayToUnwrapWriter() int

func (*RWD) UnwrapReader

func (r *RWD) UnwrapReader() any

func (*RWD) UnwrapWriter

func (r *RWD) UnwrapWriter() any

type ReadError added in v1.0.1

type ReadError struct {
	// contains filtered or unexported fields
}

func (ReadError) Error added in v1.0.1

func (e ReadError) Error() string

func (ReadError) Inner added in v1.0.1

func (e ReadError) Inner() error

func (ReadError) Unwrap added in v1.0.1

func (e ReadError) Unwrap() error

type ReadVReader

type ReadVReader struct {
	io.Reader
	// contains filtered or unexported fields
}

ReadVReader is a Reader that uses readv(2) syscall to read data.

func NewReadVReader

func NewReadVReader(reader io.Reader, rawConn syscall.RawConn) *ReadVReader

NewReadVReader creates a new ReadVReader.

func (*ReadVReader) OkayToUnwrapReader

func (r *ReadVReader) OkayToUnwrapReader() int

func (*ReadVReader) ReadMultiBuffer

func (r *ReadVReader) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

func (*ReadVReader) UnwrapReader

func (r *ReadVReader) UnwrapReader() any

type Reader

type Reader interface {
	// Same as io.Reader.Read, MultiBuffer might be not empty and error is not-nil
	ReadMultiBuffer() (MultiBuffer, error)
}

Reader extends io.Reader with MultiBuffer.

func NewPacketReader

func NewPacketReader(reader io.Reader) Reader

NewPacketReader creates a new PacketReader based on the given reader. read one buffer every time

func NewReader

func NewReader(reader io.Reader) Reader

NewReader creates a new Reader. From a io.Reader to a buf.Reader The Reader instance doesn't take the ownership of reader.

func NewSizedReader

func NewSizedReader(reader *BufferedReader) Reader

type ReaderWriter

type ReaderWriter interface {
	Reader
	Writer
}

type RingBuffer

type RingBuffer[T any] struct {
	// contains filtered or unexported fields
}

func NewRingBuffer

func NewRingBuffer[T any](size int) *RingBuffer[T]

func (*RingBuffer[T]) Add

func (rb *RingBuffer[T]) Add(value T)

Add adds a new value to the buffer

func (*RingBuffer[T]) Clear

func (rb *RingBuffer[T]) Clear()

func (*RingBuffer[T]) Count

func (rb *RingBuffer[T]) Count() int

Count returns the current number of items in the buffer

func (*RingBuffer[T]) GetAll

func (rb *RingBuffer[T]) GetAll() []T

GetAll returns all values in order from oldest to newest

func (*RingBuffer[T]) IsEmpty

func (rb *RingBuffer[T]) IsEmpty() bool

IsEmpty returns true if the buffer is empty

func (*RingBuffer[T]) IsFull

func (rb *RingBuffer[T]) IsFull() bool

IsFull returns true if the buffer is full

func (*RingBuffer[T]) Peek

func (rb *RingBuffer[T]) Peek() (T, bool)

Peek returns the oldest value without removing it

func (*RingBuffer[T]) Read

func (rb *RingBuffer[T]) Read(slice []T) (int, error)

func (*RingBuffer[T]) ReadOldestValue

func (rb *RingBuffer[T]) ReadOldestValue() (T, bool)

ReadOldestValue reads and removes the oldest value from the buffer Returns the value and true if successful, zero value and false if buffer is empty

type SecondDdlReaderWriter

type SecondDdlReaderWriter struct {
	DdlReaderWriter
	Mb MultiBuffer
}

func (*SecondDdlReaderWriter) ReadMultiBuffer

func (r *SecondDdlReaderWriter) ReadMultiBuffer() (MultiBuffer, error)

type SequentialWriter

type SequentialWriter struct {
	io.Writer
}

SequentialWriter is a Writer that writes MultiBuffer sequentially into the underlying io.Writer. Write buffer one by one

func (*SequentialWriter) CloseWrite

func (w *SequentialWriter) CloseWrite() error

func (*SequentialWriter) OkayToUnwrapWriter

func (w *SequentialWriter) OkayToUnwrapWriter() int

func (*SequentialWriter) UnwrapWriter

func (w *SequentialWriter) UnwrapWriter() any

func (*SequentialWriter) WriteMultiBuffer

func (w *SequentialWriter) WriteMultiBuffer(mb MultiBuffer) error

WriteMultiBuffer implements Writer.

type SetDeadline

type SetDeadline interface {
	SetReadDeadline(time.Time) error
}

type SingleReader

type SingleReader struct {
	io.Reader
}

SingleReader is a Reader that read one Buffer every time.

func (*SingleReader) OkayToUnwrapReader

func (r *SingleReader) OkayToUnwrapReader() int

func (*SingleReader) ReadMultiBuffer

func (r *SingleReader) ReadMultiBuffer() (MultiBuffer, error)

ReadMultiBuffer implements Reader.

func (*SingleReader) UnwrapReader

func (r *SingleReader) UnwrapReader() any

type SizeCounter

type SizeCounter struct {
	Size int64
}

SizeCounter is for counting bytes copied by Copy().

type SizedReader

type SizedReader struct {
	// contains filtered or unexported fields
}

implement buf.Reader read 2 bytes (uint16, the num of bytes) from the reader first, then read "the num of bytes" from the reader, after this, further ReadMultiBuffer() will return io.EOF

func (*SizedReader) ReadMultiBuffer

func (r *SizedReader) ReadMultiBuffer() (MultiBuffer, error)

type TimeoutReader

type TimeoutReader interface {
	ReadMultiBufferTimeout(time.Duration) (MultiBuffer, error)
}

TimeoutReader is a reader that returns error if Read() operation takes longer than the given timeout.

type UnwrapReader

type UnwrapReader interface {
	// 1 means okay, 0 means not yet, -1 means not supported
	OkayToUnwrapReader() int
	// return either a Reader or io.Reader. Reading from this unwrapped reader
	// get same result as reading from the original Reader.
	UnwrapReader() any
}

type UnwrapReaderReader

type UnwrapReaderReader struct {
	Reader       Reader
	Unwrapped    bool
	UnwrapReader UnwrapReader
}

UnwrapReader is non-nil until unwrapped. For using readv

func (*UnwrapReaderReader) ReadMultiBuffer

func (r *UnwrapReaderReader) ReadMultiBuffer() (MultiBuffer, error)

type UnwrapWriter

type UnwrapWriter interface {
	// 1 means okay, 0 means not yet, -1 means not supported
	OkayToUnwrapWriter() int
	// return either a Writer or io.Writer. Writing to this unwrapped writer
	// is same as writing to the original Writer.
	UnwrapWriter() any
}

type WriteError added in v1.0.1

type WriteError struct {
	// contains filtered or unexported fields
}

func (WriteError) Error added in v1.0.1

func (e WriteError) Error() string

func (WriteError) Inner added in v1.0.1

func (e WriteError) Inner() error

func (WriteError) UnWrap added in v1.0.1

func (e WriteError) UnWrap() error

type Writer

type Writer interface {
	// WriteMultiBuffer writes a MultiBuffer into underlying writer.
	// Writer releases the MultiBuffer anyway(even if it fails).
	WriteMultiBuffer(MultiBuffer) error
	CloseWrite() error
}

Writer extends io.Writer with MultiBuffer.

func NewWriter

func NewWriter(writer io.Writer) Writer

NewWriter creates a new Writer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL