hpack.bend checks
raw source on the hub · import bend-kit-http2@0.2.0.0/hpack.bend as Hpack
RFC 7541 HPACK header blocks with a bounded dynamic table.
3 imports
import Base import bend-kit-bytes@0.3.1.0/bytes.bend as Bytes import ./huffman.bend as Huff
Types
type Field source · line 7 · raw
Data
mode: 0 permits indexing, 1 is without indexing, 2 is never indexed.
Field@name:String -> @value:String -> @mode:U32 -> Field
type State source · line 10 · raw
Data
State@entries:List<&2, Field> -> @size:U32 -> @capacity:U32 -> @allowed:U32 -> @pending:Maybe<&2, U32> -> @minimum:Maybe<&2, U32> -> State
type Cursor source · line 144 · raw
Type
Cursor@bytes:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @at:U32 -> @length:U32 -> Cursor
type Step source · line 356 · raw
Type
Step@state:State -> @cursor:Cursor -> @field:Maybe<&2, Field> -> Step
Definitions
def new source · line 13 · raw
@+max:U32 -> State
def static source · line 17 · raw
@+index:U32 -> Field
RFC 7541 Appendix A, indexed from 1 to 61.
def take.of source · line 147 · raw
@r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, Maybe<&2, U32>) -> @+at:U32 -> @+length:U32 -> Maybe<&1, Pair(Cursor, U32)>
def take source · line 155 · raw
@c:Cursor -> Maybe<&1, Pair(Cursor, U32)>
def with_pair source · line 159 · raw
@-R:Type -> @r:Pair(Cursor, U32) -> @k:(@_:Cursor -> @_:U32 -> R) -> R
def with_taken source · line 163 · raw
@-R:Type -> @m:Maybe<&1, Pair(Cursor, U32)> -> @k:(@_:Cursor -> @_:U32 -> Maybe<&1, R>) -> Maybe<&1, R>
def within source · line 170 · raw
@ok:Bool -> Maybe<&1, Unit>
def integer.done source · line 177 · raw
@n:Nat -> @cont:Bool -> @c:Cursor -> @+shift:U32 -> @+value:U32 -> Maybe<&1, Pair(Cursor, U32)>
def integer.more source · line 192 · raw
@full:Bool -> @c:Cursor -> @+value:U32 -> Maybe<&1, Pair(Cursor, U32)>
def integer.after source · line 199 · raw
@+byte:U32 -> @+mask:U32 -> @c:Cursor -> Maybe<&1, Pair(Cursor, U32)>
def table.at source · line 203 · raw
@xs:List<&2, Field> -> @n:Nat -> Maybe<&2, Field>
def indexed.static source · line 213 · raw
@valid:Bool -> @+i:U32 -> Maybe<&2, Field>
def indexed.choose source · line 219 · raw
@s:Bool -> @+i:U32 -> @xs:List<&2, Field> -> Maybe<&2, Field>
def indexed source · line 225 · raw
@+i:U32 -> @st:State -> Maybe<&2, Field>
def literal.decoded source · line 229 · raw
@huff:Bool -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Maybe<&2, String>
def literal.result source · line 236 · raw
@m:Maybe<&2, String> -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+at:U32 -> @+count:U32 -> @+length:U32 -> Maybe<&1, Pair(Cursor, String)>
def literal.slice source · line 243 · raw
@r:Pair(0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> @huff:Bool -> @+at:U32 -> @+count:U32 -> @+length:U32 -> Maybe<&1, Pair(Cursor, String)>
def literal.fits source · line 247 · raw
@ok:Bool -> @huff:Bool -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @+at:U32 -> @+count:U32 -> @+length:U32 -> Maybe<&1, Pair(Cursor, String)>
def literal.bytes source · line 254 · raw
@huff:Bool -> @c:Cursor -> @+count:U32 -> Maybe<&1, Pair(Cursor, String)>
def literal source · line 258 · raw
@c:Cursor -> Maybe<&1, Pair(Cursor, String)>
def field.size source · line 263 · raw
@f:Field -> U32
def table.trim.go source · line 267 · raw
@xs:List<&2, Field> -> @+room:U32 -> @keep:Bool -> @+acc:List<&2, Field> -> @+used:U32 -> Pair(List<&2, Field>, U32)
def table.trim source · line 280 · raw
@xs:List<&2, Field> -> @+capacity:U32 -> Pair(List<&2, Field>, U32)
def table.trimmed source · line 283 · raw
@r:Pair(List<&2, Field>, U32) -> @+capacity:U32 -> @+allowed:U32 -> @pending:Maybe<&2, U32> -> @minimum:Maybe<&2, U32> -> State
def table.add source · line 287 · raw
@room:Bool -> @+field:Field -> @xs:List<&2, Field> -> @+used:U32 -> @+capacity:U32 -> @+allowed:U32 -> @pending:Maybe<&2, U32> -> @minimum:Maybe<&2, U32> -> State
def table.oversize source · line 294 · raw
@too_big:Bool -> @+field:Field -> @xs:List<&2, Field> -> @+used:U32 -> @+capacity:U32 -> @+allowed:U32 -> @pending:Maybe<&2, U32> -> @minimum:Maybe<&2, U32> -> State
def table.insert source · line 300 · raw
@+field:Field -> @st:State -> State
def field.matches source · line 305 · raw
@exact:Bool -> @f:Field -> @+name:String -> @+value:String -> Bool
def find.static source · line 314 · raw
@+exact:Bool -> @n:Nat -> @+i:U32 -> @+name:String -> @+value:String -> @found:U32 -> U32
def find.dynamic source · line 324 · raw
@+exact:Bool -> @xs:List<&2, Field> -> @+i:U32 -> @+name:String -> @+value:String -> @found:U32 -> U32
def find.in_dynamic source · line 334 · raw
@exact:Bool -> @st:State -> @+name:String -> @+value:String -> @found:U32 -> U32
def find.index source · line 338 · raw
@+exact:Bool -> @st:State -> @+name:String -> @+value:String -> U32
def limit.min source · line 341 · raw
@m:Maybe<&2, U32> -> @+n:U32 -> U32
def set_limit source · line 348 · raw
@+n:U32 -> @st:State -> State
def table.resize source · line 352 · raw
@+n:U32 -> @st:State -> State
def with_text.pair source · line 359 · raw
@-R:Type -> @r:Pair(Cursor, String) -> @k:(@_:Cursor -> @_:String -> R) -> R
def with_text source · line 363 · raw
@-R:Type -> @m:Maybe<&1, Pair(Cursor, String)> -> @k:(@_:Cursor -> @_:String -> Maybe<&1, R>) -> Maybe<&1, R>
def name.indexed source · line 370 · raw
@m:Maybe<&2, Field> -> @c:Cursor -> Maybe<&1, Pair(Cursor, String)>
def name.read source · line 377 · raw
@+i:U32 -> @st:State -> @c:Cursor -> Maybe<&1, Pair(Cursor, String)>
def decode.indexed.field source · line 384 · raw
@m:Maybe<&2, Field> -> @st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.indexed source · line 391 · raw
@+first:U32 -> @+st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.literal.finish source · line 395 · raw
@insert:Bool -> @+field:Field -> @st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.literal source · line 402 · raw
@+first:U32 -> @+mask:U32 -> @+mode:U32 -> @+st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.min source · line 408 · raw
@m:Maybe<&2, U32> -> @+n:U32 -> Bool
def decode.updated.from source · line 415 · raw
@st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.updated source · line 419 · raw
@n:U32 -> @st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.update.valid source · line 422 · raw
@valid:Bool -> @+n:U32 -> @st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.update.value source · line 429 · raw
@+n:U32 -> @st:State -> @c:Cursor -> Maybe<&1, Step>
def decode.update source · line 434 · raw
@+first:U32 -> @st:State -> @c:Cursor -> @seen:Bool -> Maybe<&1, Step>
def decode.ready source · line 440 · raw
@st:State -> Bool
def decode.kind source · line 444 · raw
@+first:U32 -> U32
def decode.representation source · line 449 · raw
@kind:U32 -> @+first:U32 -> @c:Cursor -> @+st:State -> @seen:Bool -> Maybe<&1, Step>
def decode.one source · line 466 · raw
@c:Cursor -> @+st:State -> @seen:Bool -> Maybe<&1, Step>
def decode.add source · line 470 · raw
@m:Maybe<&2, Field> -> @acc:List<&2, Field> -> @seen:Bool -> Pair(List<&2, Field>, Bool)
def with_step source · line 477 · raw
@-R:Type -> @step:Step -> @k:(@_:State -> @_:Cursor -> @_:Maybe<&2, Field> -> R) -> R
def with_end source · line 481 · raw
@-R:Type -> @c:Cursor -> @k:(@_:Cursor -> @_:Bool -> R) -> R
def with_fields source · line 485 · raw
@-R:Type -> @r:Pair(List<&2, Field>, Bool) -> @k:(@_:List<&2, Field> -> @_:Bool -> R) -> R
def decode.go source · line 489 · raw
@fuel:Nat -> @ended:Bool -> @c:Cursor -> @st:State -> @acc:List<&2, Field> -> @+seen:Bool -> Maybe<&1, Pair(State, List<&2, Field>)>
def decode source · line 504 · raw
@block:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @st:State -> Maybe<&1, Pair(State, List<&2, Field>)>
def integer.tail source · line 509 · raw
@n:Nat -> @+value:U32 -> @active:Bool -> String
def integer.encoded source · line 519 · raw
@small:Bool -> @+prefix:U32 -> @+mask:U32 -> @+value:U32 -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes
def integer.encode source · line 527 · raw
@+prefix:U32 -> @+mask:U32 -> @+value:U32 -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes
def octets.valid source · line 530 · raw
@s:String -> Bool
def literal.raw source · line 537 · raw
@+s:String -> Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>
def literal.pack source · line 542 · raw
@b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> @huff:Bool -> 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes
def literal.encode source · line 546 · raw
@huff:Bool -> @s:String -> Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>
def name.parts source · line 553 · raw
@+index:U32 -> @huff:Bool -> @name:String -> Maybe<&1, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>>
def encode.literal.bytes source · line 560 · raw
@+index:U32 -> @+prefix:U32 -> @+mask:U32 -> @+huff:Bool -> @name:String -> @value:String -> Maybe<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>
def encode.literal.done source · line 567 · raw
@insert:Bool -> @field:Field -> @st:State -> @b:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> Maybe<&1, Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)>
def encode.literal source · line 574 · raw
@+mode:U32 -> @+name:String -> @+value:String -> @huff:Bool -> @+st:State -> Maybe<&1, Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)>
def encode.exact source · line 582 · raw
@found:Bool -> @+index:U32 -> @+name:String -> @+value:String -> @huff:Bool -> @st:State -> Maybe<&1, Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)>
def encode.field source · line 589 · raw
@f:Field -> @huff:Bool -> @+st:State -> Maybe<&1, Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)>
def encode.cleared source · line 603 · raw
@st:State -> @pieces:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)
def encode.emit source · line 607 · raw
@smaller:Bool -> @+minimum:U32 -> @+final:U32 -> @st:State -> Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)
def encode.pending source · line 615 · raw
@m:Maybe<&2, U32> -> @minimum:Maybe<&2, U32> -> @st:State -> Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)
def encode.prepare source · line 623 · raw
@st:State -> Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)
def with_encoded source · line 627 · raw
@-R:Type -> @r:Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes) -> @k:(@_:State -> @_:0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes -> R) -> R
def encode.go source · line 631 · raw
@xs:List<&2, Field> -> @+huff:Bool -> @st:State -> @acc:List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes> -> Maybe<&1, Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>)>
def encode.finish source · line 640 · raw
@r:Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>) -> Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)
def encode.from source · line 644 · raw
@r:Pair(State, List<&1, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes>) -> @fields:List<&2, Field> -> @huff:Bool -> Maybe<&1, Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)>
def encode source · line 649 · raw
@fields:List<&2, Field> -> @huff:Bool -> @st:State -> Maybe<&1, Pair(State, 0xb7603dcfa1d7f60d01e06c928738cc73/bytes.Bytes)>