class PG::Wire::Reader

Reads big-endian integers, NUL-terminated strings and byte runs from Bytes, front to back. Reading past the end raises PG::ProtocolError.

src/wire.qz:57

Class methods

def self.new(data: Bytes) -> PG::Wire::Reader

Reads data from its first byte.

src/wire.qz:62

Methods

def remaining -> Int

The bytes not read yet.

src/wire.qz:65

def done? -> Bool

Whether everything was read.

src/wire.qz:68

def byte -> Int

The next byte, 0 to 255.

src/wire.qz:71

def int16 -> Int

The next big-endian signed 16-bit integer.

PG::Wire::Reader.new(b"\xff\xfe").int16   # => -2

src/wire.qz:83

def int32 -> Int

The next big-endian signed 32-bit integer.

PG::Wire::Reader.new(b"\x00\x00\x01\x00").int32   # => 256
PG::Wire::Reader.new(b"\xff\xff\xff\xff").int32   # => -1

src/wire.qz:96

def uint16 -> Int

The next big-endian unsigned 16-bit integer (counts).

PG::Wire::Reader.new(b"\xff\xfe").uint16   # => 65534

src/wire.qz:108

def uint32 -> Int

The next big-endian unsigned 32-bit integer (OIDs).

PG::Wire::Reader.new(b"\x80\x00\x00\x01").uint32   # => 2147483649

src/wire.qz:118

def cstring -> String

The next NUL-terminated string, without its NUL, decoded as UTF-8 (an invalid sequence raises PG::ProtocolError).

PG::Wire::Reader.new(b"ab\x00c\x00").cstring   # => "ab"

src/wire.qz:129

def bytes(n: Int) -> Bytes

The next n bytes.

src/wire.qz:139

def rest -> Bytes

The bytes not read yet, all of them.

src/wire.qz:148