~/bend-docscommunity

codec.bend checks

raw source on the hub · import bend-kit-postgres@0.1.0.0/codec.bend as Codec

Postgres frontend/backend protocol 3.0 messages over Bytes, and an incremental reader of backend messages.

2 imports
import Base
import bend-kit-bytes@0.3.1.0/bytes.bend as Bytes

Types

type Param source · line 8 · raw

Type

A StartupMessage parameter, such as ("user", name) or ("database", db).

type Front source · line 13 · raw

Type

Frontend messages. Describe and CloseMsg take kind 83 ('S', statement) or 80 ('P', portal). Bind params hold one Maybe per parameter, None for SQL NULL; empty formats mean text.

type Field source · line 28 · raw

Type

A RowDescription column. size and modifier are the raw int16 and int32 words.

type Notice source · line 32 · raw

Type

An ErrorResponse or NoticeResponse field: code is its type byte, such as 67 ('C', SQLSTATE) or 77 ('M', message).

type Back source · line 37 · raw

Type

Backend messages. AuthOther holds any other authentication code (MD5 is 5) and its payload. ReadyForQuery status is 73 ('I'), 84 ('T') or 69 ('E'). Other holds a well-framed message of any other tag.

type Cur source · line 260 · raw

Type

The buffer, the next byte i, the end e of the message body (e <= len), and whether every read so far fit. A read that does not fit clears ok and leaves i; the message is Bad unless ok holds and i reaches e.

type Loop source · line 399 · raw

@-A:Type -> @-B:Type -> Type

A loop up to a terminator: Go holds an item still to push, Stop the end. acc is reversed.

type Reader source · line 626 · raw

Type

Bytes read from the server, and the index of the first byte not yet decoded.

type Next source · line 646 · raw

Type

One message; Want until it has all arrived; Bad for a length below 4 or above 1 GiB, or a body its tag does not fill exactly. After Bad the stream has lost its framing.

Definitions

def notice.get source · line 61 · raw

@+code:U32 -> @fs:List<&1, Notice> -> Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

The first field whose code is code.

def byte1 source · line 70 · raw

@+c:U32 -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def be16 source · line 73 · raw

@+v:U32 -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def be32 source · line 76 · raw

@+v:U32 -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def cstr.enc source · line 80 · raw

@b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

ponytail: a NUL inside a cstr field ends it early; the message length still frames it, so the server rejects that message only.

def frame.of source · line 83 · raw

@+tag:U32 -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def frame source · line 88 · raw

@+tag:U32 -> @body:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

A tagged message: the tag byte, the int32 length (counting itself), then the body.

def packet.of source · line 91 · raw

@r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def packet source · line 96 · raw

@body:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

An untagged startup-phase packet.

def n16.con source · line 99 · raw

@h:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>, U32) -> Pair(List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>, U32)

def n16.count source · line 103 · raw

@xs:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> Pair(List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>, U32)

def n16.of source · line 110 · raw

@r:Pair(List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>, U32) -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def n16 source · line 115 · raw

@xs:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

An int16 count, then the pieces.

def be16s source · line 118 · raw

@xs:List<&2, U32> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def be32s source · line 125 · raw

@xs:List<&2, U32> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def value.of source · line 132 · raw

@r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def value source · line 137 · raw

@m:Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

An int32 length then the bytes; -1 and nothing for NULL.

def values source · line 144 · raw

@xs:List<&1, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def params.enc source · line 151 · raw

@xs:List<&1, Param> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def names.enc source · line 158 · raw

@xs:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def notices.enc source · line 165 · raw

@xs:List<&1, Notice> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def fields.enc source · line 172 · raw

@xs:List<&1, Field> -> List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def encode source · line 180 · raw

@m:Front -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

The wire bytes of a frontend message.

def auth.enc source · line 207 · raw

@+code:U32 -> @payload:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

def encode.back source · line 211 · raw

@m:Back -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes

The wire bytes of a backend message, as a server sends it.

def fail source · line 263 · raw

@c:Cur -> Cur

def need source · line 267 · raw

@ok:Bool -> @c:Cur -> Cur

def left source · line 274 · raw

@c:Cur -> Pair(Cur, Nat)

def uint.got source · line 278 · raw

@+i:U32 -> @+n:U32 -> @+e:U32 -> @+ok:Bool -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Maybe<&2, U32>) -> Pair(Cur, U32)

def uint.at source · line 286 · raw

@fit:Bool -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+i:U32 -> @+n:U32 -> @+e:U32 -> @+ok:Bool -> Pair(Cur, U32)

def uint source · line 294 · raw

@c:Cur -> @+n:U32 -> Pair(Cur, U32)

A big-endian unsigned integer of n bytes (1, 2 or 4).

def take.got source · line 298 · raw

@+i:U32 -> @+e:U32 -> @+ok:Bool -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

def take.at source · line 302 · raw

@fit:Bool -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+i:U32 -> @+n:U32 -> @+e:U32 -> @+ok:Bool -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

def take source · line 310 · raw

@c:Cur -> @+n:U32 -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

The next n bytes, copied out.

def rest source · line 314 · raw

@c:Cur -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

def nul source · line 318 · raw

String

def cstr.in source · line 321 · raw

@inside:Bool -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+i:U32 -> @+j:U32 -> @+e:U32 -> @+ok:Bool -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

def cstr.at source · line 328 · raw

@+i:U32 -> @+e:U32 -> @+ok:Bool -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Maybe<&2, U32>) -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

def cstr source · line 337 · raw

@c:Cur -> Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)

The bytes before the next NUL inside the body, and the cursor past it.

def u16s source · line 341 · raw

@c:Cur -> Pair(Cur, U32)

def u32s source · line 344 · raw

@c:Cur -> Pair(Cur, U32)

def dup source · line 372 · raw

@xs:List<&1, U32> -> List<&2, U32>

def col.some source · line 379 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

def col.of source · line 383 · raw

@null:Bool -> @+n:U32 -> @c:Cur -> Pair(Cur, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

def col.len source · line 390 · raw

@r:Pair(Cur, U32) -> Pair(Cur, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

def col source · line 395 · raw

@c:Cur -> Pair(Cur, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

An int32 length then the bytes; -1 is NULL, and any other negative length does not fit.

def loop.end source · line 404 · raw

@-A:Type -> @-B:Type -> @s:Loop<A, B> -> Pair(Cur, List<&1, B>)

Out of fuel before the terminator is Bad.

def loop.pick source · line 411 · raw

@-A:Type -> @-B:Type -> @stop:Bool -> @c:Cur -> @x:A -> @acc:List<&1, B> -> Loop<A, B>

def strs.len source · line 418 · raw

@c:Cur -> @acc:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def strs.read source · line 422 · raw

@acc:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>

def strs source · line 427 · raw

@f:Nat -> @s:Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> Pair(Cur, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

Each string takes a byte, so fuel of the bytes left is enough.

def strs.start source · line 438 · raw

@r:Pair(Cur, Nat) -> Pair(Cur, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

def names.dec source · line 443 · raw

@c:Cur -> Pair(Cur, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)

NUL-terminated strings up to an empty one.

def pr.len source · line 446 · raw

@c:Cur -> @acc:List<&1, Param> -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Param>

def pr.read source · line 450 · raw

@acc:List<&1, Param> -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Param>

def pr.val source · line 454 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @acc:List<&1, Param> -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Param>

def prs source · line 459 · raw

@f:Nat -> @s:Loop<0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Param> -> Pair(Cur, List<&1, Param>)

Name and value pairs up to an empty name; a value may be empty. Each pair takes two bytes.

def prs.start source · line 470 · raw

@r:Pair(Cur, Nat) -> Pair(Cur, List<&1, Param>)

def params.dec source · line 474 · raw

@c:Cur -> Pair(Cur, List<&1, Param>)

def notice.code source · line 477 · raw

@acc:List<&1, Notice> -> @r:Pair(Cur, U32) -> Loop<U32, Notice>

def notice.push source · line 481 · raw

@+code:U32 -> @acc:List<&1, Notice> -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Loop<U32, Notice>

def notices source · line 486 · raw

@f:Nat -> @s:Loop<U32, Notice> -> Pair(Cur, List<&1, Notice>)

Fields up to a zero code byte; each takes two bytes, so the bytes left are enough fuel.

def notices.start source · line 497 · raw

@r:Pair(Cur, Nat) -> Pair(Cur, List<&1, Notice>)

def notices.dec source · line 501 · raw

@c:Cur -> Pair(Cur, List<&1, Notice>)

def fd.g source · line 504 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+tb:U32 -> @+col:U32 -> @+oid:U32 -> @+sz:U32 -> @+md:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Field)

def fd.f source · line 508 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+tb:U32 -> @+col:U32 -> @+oid:U32 -> @+sz:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Field)

def fd.e source · line 512 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+tb:U32 -> @+col:U32 -> @+oid:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Field)

def fd.d source · line 516 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+tb:U32 -> @+col:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Field)

def fd.c source · line 520 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+tb:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Field)

def fd.b source · line 524 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, U32) -> Pair(Cur, Field)

def fd.a source · line 528 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Field)

def field source · line 532 · raw

@c:Cur -> Pair(Cur, Field)

def one source · line 537 · raw

@-A:Type -> @f:(@_:A -> Back) -> @r:Pair(Cur, A) -> Pair(Cur, Back)

def ps.b source · line 541 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Back)

def ps.a source · line 545 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Back)

def bkd.b source · line 549 · raw

@+pid:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Back)

def bkd.a source · line 553 · raw

@r:Pair(Cur, U32) -> Pair(Cur, Back)

def rfq source · line 557 · raw

@r:Pair(Cur, U32) -> Pair(Cur, Back)

def auth.data source · line 561 · raw

@k:U32 -> @+code:U32 -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Back)

def auth.of source · line 573 · raw

@k:U32 -> @+code:U32 -> @c:Cur -> Pair(Cur, Back)

def auth source · line 584 · raw

@r:Pair(Cur, U32) -> Pair(Cur, Back)

def back source · line 588 · raw

@t:U32 -> @+tag:U32 -> @c:Cur -> Pair(Cur, Back)

def reader source · line 629 · raw

Reader

def feed.at source · line 632 · raw

@zero:Bool -> @buf:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+pos:U32 -> @chunk:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Reader

def feed source · line 640 · raw

@r:Reader -> @chunk:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Reader

Drops the decoded bytes, then adds chunk.

def next.done source · line 651 · raw

@ok:Bool -> @+pos:U32 -> @+e:U32 -> @buf:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @m:Back -> Pair(Reader, Next)

def next.body source · line 658 · raw

@+pos:U32 -> @r:Pair(Cur, Back) -> Pair(Reader, Next)

def next.whole source · line 663 · raw

@ok:Bool -> @+t:U32 -> @+pos:U32 -> @+n:U32 -> @buf:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Pair(Reader, Next)

def next.size source · line 670 · raw

@ok:Bool -> @+t:U32 -> @+pos:U32 -> @+len:U32 -> @+n:U32 -> @buf:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Pair(Reader, Next)

def next.n source · line 677 · raw

@+t:U32 -> @+pos:U32 -> @+len:U32 -> @r:Pair(Cur, U32) -> Pair(Reader, Next)

def next.tag source · line 682 · raw

@+pos:U32 -> @+len:U32 -> @r:Pair(Cur, U32) -> Pair(Reader, Next)

def next.room source · line 686 · raw

@ok:Bool -> @+pos:U32 -> @+len:U32 -> @buf:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Pair(Reader, Next)

def next.len source · line 693 · raw

@+pos:U32 -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> Pair(Reader, Next)

def next source · line 698 · raw

@r:Reader -> Pair(Reader, Next)

The next backend message.

def pending.of source · line 702 · raw

@+pos:U32 -> @r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, U32) -> Pair(Reader, U32)

def pending source · line 707 · raw

@r:Reader -> Pair(Reader, U32)

The count of bytes read but not yet decoded.

def one.f source · line 713 · raw

@-A:Type -> @f:(@_:A -> Front) -> @r:Pair(Cur, A) -> Pair(Cur, Front)

def fe.sasl source · line 717 · raw

@mech:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>) -> Pair(Cur, Front)

def fe.sasl.a source · line 725 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.pass source · line 729 · raw

@k:U32 -> @c:Cur -> Pair(Cur, Front)

def fe.parse.c source · line 738 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @q:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, List<&1, U32>) -> Pair(Cur, Front)

def fe.parse.b source · line 742 · raw

@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.parse.a source · line 746 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.bind.e source · line 750 · raw

@p:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @s:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @fs:List<&1, U32> -> @ps:List<&1, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>> -> @r:Pair(Cur, List<&1, U32>) -> Pair(Cur, Front)

def fe.bind.d source · line 754 · raw

@p:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @s:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @fs:List<&1, U32> -> @r:Pair(Cur, List<&1, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>>) -> Pair(Cur, Front)

def fe.bind.c source · line 758 · raw

@p:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @s:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, List<&1, U32>) -> Pair(Cur, Front)

def fe.bind.b source · line 762 · raw

@p:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.bind.a source · line 766 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.kind source · line 770 · raw

@close:Bool -> @+k:U32 -> @r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.kind.a source · line 779 · raw

@+close:Bool -> @r:Pair(Cur, U32) -> Pair(Cur, Front)

def fe.exec source · line 783 · raw

@p:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @r:Pair(Cur, U32) -> Pair(Cur, Front)

def fe.exec.a source · line 787 · raw

@r:Pair(Cur, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> Pair(Cur, Front)

def fe.tagged source · line 791 · raw

@t:U32 -> @+mode:U32 -> @c:Cur -> Pair(Cur, Front)

def fe.len source · line 812 · raw

@+t:U32 -> @+mode:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Front)

def fe.tag source · line 817 · raw

@+mode:U32 -> @r:Pair(Cur, U32) -> Pair(Cur, Front)

def fe.pkt source · line 821 · raw

@k:U32 -> @c:Cur -> Pair(Cur, Front)

def fe.code source · line 830 · raw

@r:Pair(Cur, U32) -> Pair(Cur, Front)

def fe.plen source · line 834 · raw

@r:Pair(Cur, U32) -> Pair(Cur, Front)

def fe.start source · line 839 · raw

@k:U32 -> @+mode:U32 -> @c:Cur -> Pair(Cur, Front)

def fe.fin source · line 846 · raw

@r:Pair(Cur, Front) -> Maybe<&1, Front>

def decode.front source · line 857 · raw

@+mode:U32 -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Maybe<&1, Front>

One frontend message that fills b exactly, or None. The protocol leaves the phase to context: mode 0 reads an untagged startup packet, and 'p' reads as Password (1), SASLInitial (2) or SASLResponse (3).

Templates

template many source · line 348 · raw

@-A:Type -> @-item:(@_:Cur -> Pair(Cur, A)) -> @n:Nat -> @r:Pair(Cur, A) -> @acc:List<&1, A> -> Pair(Cur, List<&1, A>)

n more items after the one in r, oldest last in acc.

template n16.go source · line 357 · raw

@-A:Type -> @-item:(@_:Cur -> Pair(Cur, A)) -> @zero:Bool -> @+k:U32 -> @c:Cur -> Pair(Cur, List<&1, A>)

template n16.dec source · line 365 · raw

@-A:Type -> @-item:(@_:Cur -> Pair(Cur, A)) -> @r:Pair(Cur, U32) -> Pair(Cur, List<&1, A>)

An int16 count, then that many items.

template list16 source · line 369 · raw

@-A:Type -> @-item:(@_:Cur -> Pair(Cur, A)) -> @c:Cur -> Pair(Cur, List<&1, A>)