Low-level byte buffer helpers for big-endian encoding / bulk copy. Only depends on pg_errors (itself dependency-free) so it stays importable from pg_protocol and pg_types/* without cycles.
Procs
func decodeFloat32BE(data: openArray[byte]; offset = 0): float32 {.inline, ...raises: [], tags: [], forbids: [].}
- Decode a big-endian IEEE-754 32-bit float from data at offset.
func decodeFloat64BE(data: openArray[byte]; offset = 0): float64 {.inline, ...raises: [], tags: [], forbids: [].}
- Decode a big-endian IEEE-754 64-bit float from data at offset.
func fromBE16(data: openArray[byte]; offset = 0): int16 {.inline, ...raises: [], tags: [], forbids: [].}
- Decode a big-endian 16-bit integer from data at offset.
func fromBE32(data: openArray[byte]; offset = 0): int32 {.inline, ...raises: [], tags: [], forbids: [].}
- Decode a big-endian 32-bit integer from data at offset.
func fromBE64(data: openArray[byte]; offset = 0): int64 {.inline, ...raises: [], tags: [], forbids: [].}
- Decode a big-endian 64-bit integer from data at offset.
proc readBytes(src: openArray[byte]; off, len: int): seq[byte] {. ...raises: [PgProtocolError], tags: [], forbids: [].}
- Copy len bytes from src at off into a new seq[byte]. Same guards as readString.
proc readString(src: openArray[byte]; off, len: int): string {. ...raises: [PgProtocolError], tags: [], forbids: [].}
- Copy len bytes from src at off into a new string. Raises PgProtocolError on out-of-range slice: newString(-1) is an uncatchable RangeDefect, and -d:danger skips the src[off] bounds check.
func toBE16(v: int16): array[2, byte] {.inline, ...raises: [], tags: [], forbids: [].}
- Encode a 16-bit integer as big-endian bytes.
func toBE32(v: int32): array[4, byte] {.inline, ...raises: [], tags: [], forbids: [].}
- Encode a 32-bit integer as big-endian bytes.
func toBE64(v: int64): array[8, byte] {.inline, ...raises: [], tags: [], forbids: [].}
- Encode a 64-bit integer as big-endian bytes.
Templates
template appendBytes(buf: var seq[byte]; src: openArray[byte])
- Append src bytes to the end of buf. No-op when src is empty.
template writeBE16(buf: var openArray[byte]; pos: int; v: int16)
template writeBE32(buf: var openArray[byte]; pos: int; v: int32)
template writeBE64(buf: var openArray[byte]; pos: int; v: int64)
template writeBytesAt(dst: var openArray[byte]; pos: int; src: openArray[byte])
- Copy src bytes into dst starting at pos. No-op when src is empty. Raises PgProtocolError on out-of-range slice: under -d:danger addr dst[pos] skips bounds checks, so guard here.