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).
Param@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @value:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Param
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.
Startup@params:List<&1, Param> -> Front
SSLRequestFront
Password@text:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Front
SASLInitial@mech:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @data:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Front
SASLResponse@data:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Front
Parse@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @query:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @oids:List<&2, U32> -> Front
Bind@portal:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @stmt:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @formats:List<&2, U32> -> @params:List<&1, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>> -> @results:List<&2, U32> -> Front
Describe@kind:U32 -> @name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Front
Execute@portal:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @max:U32 -> Front
SyncFront
CloseMsg@kind:U32 -> @name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Front
TerminateFront
type Field source · line 28 · raw
Type
A RowDescription column. size and modifier are the raw int16 and int32 words.
Field@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @table:U32 -> @column:U32 -> @oid:U32 -> @size:U32 -> @modifier:U32 -> @format:U32 -> Field
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).
Notice@code:U32 -> @value:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Notice
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.
AuthOkBack
AuthCleartextBack
AuthSASL@mechs:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> Back
AuthSASLContinue@data:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Back
AuthSASLFinal@data:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Back
AuthOther@code:U32 -> @data:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Back
ParameterStatus@name:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @value:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Back
BackendKeyData@pid:U32 -> @key:U32 -> Back
ReadyForQuery@status:U32 -> Back
RowDescription@fields:List<&1, Field> -> Back
DataRow@cols:List<&1, Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>> -> Back
CommandComplete@tag:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Back
ErrorResponse@fields:List<&1, Notice> -> Back
NoticeResponse@fields:List<&1, Notice> -> Back
ParseCompleteBack
BindCompleteBack
CloseCompleteBack
NoDataBack
EmptyQueryBack
PortalSuspendedBack
Other@tag:U32 -> @body:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Back
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.
Cur@b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @i:U32 -> @e:U32 -> @ok:Bool -> Cur
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.
Go@-A:Type -> @-B:Type -> @c:Cur -> @x:A -> @acc:List<&1, B> -> Loop<A, B>
Stop@-A:Type -> @-B:Type -> @c:Cur -> @acc:List<&1, B> -> Loop<A, B>
type Reader source · line 626 · raw
Type
Bytes read from the server, and the index of the first byte not yet decoded.
Reader@buf:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @pos:U32 -> Reader
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.
Got@m:Back -> Next
WantNext
BadNext
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>)