def rules
bend-kit-http2@0.4.0.0 · http2.bend:107
import bend-kit-http2@0.4.0.0/http2.bend as Http2
import Base
107def rules(+kind: U32, +flags: U32, +stream: U32, +len: U32, +pad: U32, +promised: U32, +value: U32, m: Maybe<&2, Error>) -> Maybe<&2, Error>:
108 match kind:
109 case 0:
110 first(reject(U32.is_eq(stream, 0), 1, True{}, stream),
111 first(reject(Bool.and(has(flags, 8), U32.is_eq(len, 0)), 6, False{}, stream),
112 reject(padding(flags, len, 0, pad), 1, True{}, stream)))
113 case 1:
114 +fixed = Bool.pick(U32, has(flags, 32), 5, 0)
115 +prefix = Bool.pick(U32, has(flags, 8), 1, 0)
116 first(reject(U32.is_eq(stream, 0), 1, True{}, stream),
117 first(reject(U32.is_lt(len, (fixed + prefix : U32)), 6, True{}, stream),
118 reject(padding(flags, len, fixed, pad), 1, True{}, stream)))
119 case 2:
120 first(reject(U32.is_ne(len, 5), 6, U32.is_eq(stream, 0), stream),
121 reject(U32.is_eq(stream, 0), 1, True{}, stream))
122 case 3:
123 first(reject(U32.is_ne(len, 4), 6, True{}, stream),
124 reject(U32.is_eq(stream, 0), 1, True{}, stream))
125 case 4:
126 first(reject(U32.is_ne(stream, 0), 1, True{}, stream),
127 first(reject(Bool.and(has(flags, 1), U32.is_ne(len, 0)), 6, True{}, stream),
128 first(reject(U32.is_ne((len % 6 : U32), 0), 6, True{}, stream), m)))
129 case 5:
130 +prefix = Bool.pick(U32, has(flags, 8), 1, 0)
131 first(reject(U32.is_eq(stream, 0), 1, True{}, stream),
132 first(reject(U32.is_lt(len, (prefix + 4 : U32)), 6, True{}, stream),
133 first(reject(padding(flags, len, 4, pad), 1, True{}, stream),
134 reject(U32.is_eq(promised, 0), 1, True{}, stream))))
135 case 6:
136 first(reject(U32.is_ne(len, 8), 6, True{}, stream),
137 reject(U32.is_ne(stream, 0), 1, True{}, stream))
138 case 7:
139 first(reject(U32.is_lt(len, 8), 6, True{}, stream),
140 reject(U32.is_ne(stream, 0), 1, True{}, stream))
141 case 8:
142 first(reject(U32.is_ne(len, 4), 6, U32.is_eq(stream, 0), stream),
143 reject(U32.is_eq((value .&. 2147483647 : U32), 0), 1, U32.is_eq(stream, 0), stream))
144 case 9:
145 reject(U32.is_eq(stream, 0), 1, True{}, stream)
146 case _:
147 None{}