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.
Word64@hi:U32 -> @lo:U32 -> Word64
type Error source · line 10 · raw
Data
IncompleteError
MalformedError
LimitError
InvalidUtf8Error
type Value source · line 16 · raw
Type
Varint@value:Word64 -> Value
Fixed32@value:U32 -> Value
Fixed64@value:Word64 -> Value
Blob@value:0x185ae03c75e3e75be1171471f68b43cb/bytes.Bytes -> Value
Group@fields:List<&1, Field> -> Value
type Field source · line 23 · raw
Type
Field@number:U32 -> @value:Value -> Field
type VarintByte source · line 95 · raw
Data
VarintByte@bad:Bool -> @done:Bool -> @value:U32 -> VarintByte
type Frame source · line 202 · raw
Type
Frame@number:U32 -> @outer:List<&1, Field> -> @depth:Nat -> Frame
type DecodeState source · line 206 · raw
Type
DecodeState@empty:Bool -> @cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @depth:Nat -> @stack:List<&1, Frame> -> @acc:List<&1, Field> -> DecodeState
type PackedState source · line 469 · raw
Type
PackedState@empty:Bool -> @cursor:0x185ae03c75e3e75be1171471f68b43cb/bytes.Cursor -> @acc:List<&1, Value> -> PackedState
type Utf8 source · line 679 · raw
Data
Utf8@need:U32 -> @lo:U32 -> @hi:U32 -> @cp:U32 -> @out:String -> Utf8
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>