~/bend-docscommunity

protobuf.bend checks

raw source on the hub · import bend-kit-protobuf@0.1.0.0/protobuf.bend as Protobuf

Pure bounded protobuf wire codec over Bytes. https://github.com/paymog/bend-kit/tree/main/protobuf

3 imports
import Base
import bend-kit-bytes@0.3.2.0/bytes.bend as B
import bend-kit-f64@0.1.0.0/f64.bend as F

Types

type Word64 source · line 7 · raw

Data

Signed integers use two's-complement bits, not host numeric conversions.

type Error source · line 10 · raw

Data

type Value source · line 16 · raw

Type

type Field source · line 23 · raw

Type

type VarintByte source · line 95 · raw

Data

type Frame source · line 202 · raw

Type

type DecodeState source · line 206 · raw

Type

type PackedState source · line 469 · raw

Type

type Utf8 source · line 679 · raw

Data

Definitions

def valid_number source · line 26 · raw

@+n:U32 -> Bool

def Word64.zero source · line 29 · raw

Word64

def Word64.is_zero source · line 32 · raw

@w:Word64 -> Bool

def Word64.shr7 source · line 36 · raw

@w:Word64 -> Word64

def Word64.zigzag source · line 40 · raw

@w:Word64 -> Word64

def Word64.unzigzag source · line 45 · raw

@w:Word64 -> Word64

def read32.result source · line 50 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32)>

def read32 source · line 58 · raw

@c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32)>

def read64.hi source · line 61 · raw

@l:U32 -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64)>

def read64.lo source · line 65 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64)>

def read64 source · line 71 · raw

@c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64)>

def varint.add.low source · line 76 · raw

@fifth:Bool -> @+i:U32 -> @+v:U32 -> @h:U32 -> @l:U32 -> Word64

def varint.add.pick source · line 83 · raw

@low:Bool -> @+i:U32 -> @+v:U32 -> @w:Word64 -> Word64

def varint.add source · line 92 · raw

@+i:U32 -> @+v:U32 -> @w:Word64 -> Word64

def varint.read.result source · line 98 · raw

@i:U32 -> @last:U32 -> @max_last:U32 -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, VarintByte>)

def varint.read source · line 106 · raw

@+i:U32 -> @last:U32 -> @max_last:U32 -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, VarintByte>)

def varint.go source · line 110 · raw

@fuel:Nat -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, VarintByte>) -> @+i:U32 -> @+last:U32 -> @+max_last:U32 -> @w:Word64 -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64)>

The last byte must fit its word; its continuation bit is never allowed.

def read_varint source · line 130 · raw

@c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64)>

def read_varint32 source · line 133 · raw

@c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64)>

def read_blob.slice source · line 136 · raw

@pos:U32 -> @start:U32 -> @end:U32 -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)>

def read_blob.fits source · line 140 · raw

@fits:Bool -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+n:U32 -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)>

def read_blob.length source · line 148 · raw

@ok:Bool -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+n:U32 -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)>

def read_blob.word source · line 156 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)>

def read_blob source · line 160 · raw

@c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes)>

def read_value.varint source · line 165 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value)>

def read_value.fixed64 source · line 169 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value)>

def read_value.blob source · line 173 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value)>

def read_value.fixed32 source · line 177 · raw

@r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, U32) -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value)>

def read_value source · line 181 · raw

@kind:U32 -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> Result<&2, &1, Error, Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value)>

def decode.state source · line 209 · raw

@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> DecodeState

def decode.step.value source · line 213 · raw

@depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> @number:U32 -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value) -> Result<&2, &1, Error, DecodeState>

def decode.step.close source · line 217 · raw

@ok:Bool -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @number:U32 -> @outer:List<&1, Field> -> @depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> Result<&2, &1, Error, DecodeState>

def decode.step.kind source · line 224 · raw

@kind:U32 -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @+depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> @+number:U32 -> Result<&2, &1, Error, DecodeState>

def decode.step.valid source · line 243 · raw

@ok:Bool -> @kind:U32 -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> @number:U32 -> Result<&2, &1, Error, DecodeState>

def decode.step.tag source · line 250 · raw

@depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> @tag:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Word64) -> Result<&2, &1, Error, DecodeState>

def decode.step source · line 255 · raw

@c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> Result<&2, &1, Error, DecodeState>

def decode.go source · line 261 · raw

@fuel:Nat -> @state:DecodeState -> Result<&2, &1, Error, List<&1, Field>>

Explicit group stack keeps decoding linear and avoids mutually recursive parsers.

def decode.limit source · line 279 · raw

@ok:Bool -> @b:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+n:U32 -> @depth:Nat -> Result<&2, &1, Error, List<&1, Field>>

def decode source · line 286 · raw

@b:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> @depth:Nat -> Result<&2, &1, Error, List<&1, Field>>

def append.limit source · line 291 · raw

@ok:Bool -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @part:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

Append checks subtraction before addition, including U32 size overflow.

def append source · line 298 · raw

@out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @part:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def byte.limit source · line 304 · raw

@ok:Bool -> @+n:U32 -> @buf:Array<U32> -> @v:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def byte source · line 311 · raw

@out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @v:U32 -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_varint.done source · line 315 · raw

@w:Word64 -> Bool

def write_varint.go source · line 319 · raw

@fuel:Nat -> @done:Bool -> @w:Word64 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_varint source · line 335 · raw

@+w:Word64 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_tag.valid source · line 338 · raw

@valid:Bool -> @number:U32 -> @kind:U32 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_tag source · line 345 · raw

@+number:U32 -> @kind:U32 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_fixed32.limit source · line 348 · raw

@ok:Bool -> @+n:U32 -> @buf:Array<U32> -> @v:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_fixed32 source · line 355 · raw

@v:U32 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_fixed64.limit source · line 360 · raw

@ok:Bool -> @+n:U32 -> @buf:Array<U32> -> @v:Word64 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_fixed64 source · line 368 · raw

@v:Word64 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_value source · line 373 · raw

@v:Value -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def write_field source · line 389 · raw

@number:U32 -> @v:Value -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def encode.go source · line 411 · raw

@+depth:Nat -> @fields:List<&1, Field> -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

Depth is the first decreasing argument for a group; list tails decrease the second.

def encode source · line 466 · raw

@fields:List<&1, Field> -> @max_size:U32 -> @depth:Nat -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def packed_decode.state source · line 472 · raw

@cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @acc:List<&1, Value> -> PackedState

def packed_decode.step.value source · line 476 · raw

@acc:List<&1, Value> -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Value) -> Result<&2, &1, Error, PackedState>

def packed_decode.step source · line 480 · raw

@kind:U32 -> @c:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @acc:List<&1, Value> -> Result<&2, &1, Error, PackedState>

def packed_decode.go source · line 485 · raw

@fuel:Nat -> @+kind:U32 -> @state:PackedState -> Result<&2, &1, Error, List<&1, Value>>

def packed_decode.result source · line 499 · raw

@r:Result<&2, &1, Error, List<&1, Value>> -> Result<&2, &1, Error, List<&1, Value>>

def packed_decode.limit source · line 508 · raw

@fits:Bool -> @kind:U32 -> @bytes:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @n:U32 -> Result<&2, &1, Error, List<&1, Value>>

def packed_decode.valid source · line 515 · raw

@valid:Bool -> @kind:U32 -> @b:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, List<&1, Value>>

def packed_decode source · line 523 · raw

@+kind:U32 -> @b:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @max_size:U32 -> Result<&2, &1, Error, List<&1, Value>>

def packed_encode.go source · line 526 · raw

@values:List<&1, Value> -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> @+max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def packed_encode source · line 549 · raw

@values:List<&1, Value> -> @max_size:U32 -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def from_uint32 source · line 552 · raw

@v:U32 -> Value

def to_uint32 source · line 555 · raw

@v:Value -> Result<&2, &2, Error, U32>

def from_int32 source · line 562 · raw

@+v:U32 -> Value

def to_int32 source · line 565 · raw

@v:Value -> Result<&2, &2, Error, U32>

def from_sint32 source · line 568 · raw

@+v:U32 -> Value

def unzigzag32 source · line 571 · raw

@+bits:U32 -> U32

def to_sint32 source · line 574 · raw

@v:Value -> Result<&2, &2, Error, U32>

def from_fixed32 source · line 579 · raw

@v:U32 -> Value

def to_fixed32 source · line 582 · raw

@v:Value -> Result<&2, &2, Error, U32>

def from_sfixed32 source · line 589 · raw

@v:U32 -> Value

def to_sfixed32 source · line 592 · raw

@v:Value -> Result<&2, &2, Error, U32>

def from_uint64 source · line 595 · raw

@v:Word64 -> Value

def to_uint64 source · line 598 · raw

@v:Value -> Result<&2, &2, Error, Word64>

def from_int64 source · line 605 · raw

@v:Word64 -> Value

def to_int64 source · line 608 · raw

@v:Value -> Result<&2, &2, Error, Word64>

def from_sint64 source · line 611 · raw

@v:Word64 -> Value

def to_sint64 source · line 614 · raw

@v:Value -> Result<&2, &2, Error, Word64>

def from_fixed64 source · line 619 · raw

@v:Word64 -> Value

def to_fixed64 source · line 622 · raw

@v:Value -> Result<&2, &2, Error, Word64>

def from_sfixed64 source · line 629 · raw

@v:Word64 -> Value

def to_sfixed64 source · line 632 · raw

@v:Value -> Result<&2, &2, Error, Word64>

def from_bool source · line 635 · raw

@v:Bool -> Value

def to_bool source · line 638 · raw

@v:Value -> Result<&2, &2, Error, Bool>

def float_of_bits source · line 644 · raw

@v:U32 -> F32

Numeric F32.to_u32 is not a bit cast. Reuse the native Word(32n) payload.

def from_float source · line 648 · raw

@v:F32 -> Value

def to_float source · line 651 · raw

@v:Value -> Result<&2, &2, Error, F32>

def from_double source · line 656 · raw

@v:0x737bc789819508f0aebd4ad15d19e26f/f64.F64 -> Value

def double_of_bits source · line 660 · raw

@bits:Word64 -> 0x737bc789819508f0aebd4ad15d19e26f/f64.F64

def to_double source · line 664 · raw

@v:Value -> Result<&2, &2, Error, 0x737bc789819508f0aebd4ad15d19e26f/f64.F64>

def from_bytes source · line 669 · raw

@v:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Value

def to_bytes source · line 672 · raw

@v:Value -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def utf8.lead.multi source · line 682 · raw

@+b:U32 -> @out:String -> Utf8

def utf8.lead.high source · line 688 · raw

@ok:Bool -> @b:U32 -> @out:String -> Result<&2, &2, Error, Utf8>

def utf8.lead source · line 695 · raw

@ascii:Bool -> @+b:U32 -> @out:String -> Result<&2, &2, Error, Utf8>

def utf8.more source · line 702 · raw

@done:Bool -> @need:U32 -> @cp:U32 -> @out:String -> Utf8

def utf8.cont source · line 709 · raw

@ok:Bool -> @+need:U32 -> @cp:U32 -> @b:U32 -> @out:String -> Result<&2, &2, Error, Utf8>

def utf8.step.idle source · line 716 · raw

@idle:Bool -> @+need:U32 -> @lo:U32 -> @hi:U32 -> @cp:U32 -> @+b:U32 -> @out:String -> Result<&2, &2, Error, Utf8>

def utf8.step source · line 723 · raw

@st:Utf8 -> @b:U32 -> Result<&2, &2, Error, Utf8>

def utf8.finish source · line 727 · raw

@ok:Bool -> @out:String -> Result<&2, &2, Error, String>

def utf8.decode.go source · line 734 · raw

@n:Nat -> @r:Pair(0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor, Maybe<&2, U32>) -> @st:Utf8 -> Result<&2, &2, Error, String>

def utf8.decode source · line 749 · raw

@b:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&2, &2, Error, String>

def utf8.width source · line 753 · raw

@+c:U32 -> U32

def utf8.scalar source · line 756 · raw

@+c:U32 -> Bool

def require source · line 759 · raw

@ok:Bool -> @e:Error -> Result<&2, &1, Error, Unit>

def utf8.cont_byte source · line 766 · raw

@c:U32 -> @shift:Nat -> U32

def utf8.push source · line 769 · raw

@width:U32 -> @+c:U32 -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def utf8.encode.go source · line 789 · raw

@s:String -> @out:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def utf8.encode source · line 799 · raw

@s:String -> Result<&2, &1, Error, 0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes>

def from_string source · line 802 · raw

@s:String -> Result<&2, &1, Error, Value>

def to_string source · line 807 · raw

@v:Value -> Result<&2, &2, Error, String>