File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -24,15 +24,15 @@ impl bindings::exports::wasi::http::incoming_handler::Guest for T {
2424 let req_hdrs = request. headers ( ) ;
2525
2626 assert ! (
27- req_hdrs. get( & header) . is_empty ( ) ,
27+ req_hdrs. get( & header) . is_none ( ) ,
2828 "forbidden `custom-forbidden-header` found in request"
2929 ) ;
3030
3131 assert ! ( req_hdrs. delete( & header) . is_err( ) ) ;
3232 assert ! ( req_hdrs. append( & header, & b"no" . to_vec( ) ) . is_err( ) ) ;
3333
3434 assert ! (
35- req_hdrs. get( & header) . is_empty ( ) ,
35+ req_hdrs. get( & header) . is_none ( ) ,
3636 "append of forbidden header succeeded"
3737 ) ;
3838
Original file line number Diff line number Diff line change @@ -144,19 +144,24 @@ impl<T: WasiHttpView> crate::bindings::http::types::HostFields for T {
144144 & mut self ,
145145 fields : Resource < HostFields > ,
146146 name : String ,
147- ) -> wasmtime:: Result < Vec < Vec < u8 > > > {
147+ ) -> wasmtime:: Result < Option < Vec < Vec < u8 > > > > {
148+ let fields = get_fields ( self . table ( ) , & fields) . context ( "[fields_get] getting fields" ) ?;
149+
148150 let header = match hyper:: header:: HeaderName :: from_bytes ( name. as_bytes ( ) ) {
149151 Ok ( header) => header,
150- Err ( _) => return Ok ( vec ! [ ] ) ,
152+ Err ( _) => return Ok ( None ) ,
151153 } ;
152154
153- let res = get_fields ( self . table ( ) , & fields)
154- . context ( "[fields_get] getting fields" ) ?
155- . get_all ( header)
155+ if !fields. contains_key ( & header) {
156+ return Ok ( None ) ;
157+ }
158+
159+ let res = fields
160+ . get_all ( & header)
156161 . into_iter ( )
157162 . map ( |val| val. as_bytes ( ) . to_owned ( ) )
158163 . collect ( ) ;
159- Ok ( res)
164+ Ok ( Some ( res) )
160165 }
161166
162167 fn set (
Original file line number Diff line number Diff line change @@ -169,8 +169,10 @@ interface types {
169169 entries : list <tuple <field-key ,field-value >>
170170 ) -> result <fields , header-error >;
171171
172- /// Get all of the values corresponding to a key.
173- get : func (name : field-key ) -> list <field-value >;
172+ /// Get all of the values corresponding to a key. Returns a `none` value
173+ /// when the key isn't present, to distinguish from the case where it's
174+ /// present but empty.
175+ get : func (name : field-key ) -> option <list <field-value >>;
174176
175177 /// Set all of the values for a key. Clears any existing values for that
176178 /// key, if they have been set.
Original file line number Diff line number Diff line change @@ -169,8 +169,10 @@ interface types {
169169 entries : list <tuple <field-key ,field-value >>
170170 ) -> result <fields , header-error >;
171171
172- /// Get all of the values corresponding to a key.
173- get : func (name : field-key ) -> list <field-value >;
172+ /// Get all of the values corresponding to a key. Returns a `none` value
173+ /// when the key isn't present, to distinguish from the case where it's
174+ /// present but empty.
175+ get : func (name : field-key ) -> option <list <field-value >>;
174176
175177 /// Set all of the values for a key. Clears any existing values for that
176178 /// key, if they have been set.
You can’t perform that action at this time.
0 commit comments