@@ -2128,6 +2128,173 @@ func (b *HTTPBody) Length() (uint64, error) {
21282128 return uint64 (l ), nil
21292129}
21302130
2131+ // witx:
2132+ //
2133+ // (@interface func (export "trailer_append")
2134+ // (param $h $body_handle)
2135+ // (param $name (list u8))
2136+ // (param $value (list u8))
2137+ // (result $err (expected (error $fastly_status)))
2138+ // )
2139+ //
2140+ //go:wasmimport fastly_http_body trailer_append
2141+ //go:noescape
2142+ func fastlyHTTPBodyTrailerAppend (
2143+ h bodyHandle ,
2144+ nameData prim.Pointer [prim.U8 ], nameLen prim.Usize ,
2145+ valuesData prim.Pointer [prim.U8 ], valuesLen prim.Usize , // multiple values separated by \0
2146+ ) FastlyStatus
2147+
2148+ // TrailerAppend appends a name/value pair as an HTTP Trailer
2149+ func (r * HTTPBody ) TrailerAppend (name string , value string ) error {
2150+ nameBuffer := prim .NewReadBufferFromString (name ).ArrayU8 ()
2151+ valueBuffer := prim .NewReadBufferFromString (value ).ArrayU8 ()
2152+
2153+ return fastlyHTTPBodyTrailerAppend (
2154+ r .h ,
2155+ nameBuffer .Data , nameBuffer .Len ,
2156+ valueBuffer .Data , valueBuffer .Len ,
2157+ ).toError ()
2158+ }
2159+
2160+ // witx:
2161+ //
2162+ // (@interface func (export "trailer_names_get")
2163+ // (param $h $body_handle)
2164+ // (param $buf (@witx pointer (@witx char8)))
2165+ // (param $buf_len (@witx usize))
2166+ // (param $cursor $multi_value_cursor)
2167+ // (param $ending_cursor_out (@witx pointer $multi_value_cursor_result))
2168+ // (param $nwritten_out (@witx pointer (@witx usize)))
2169+ // (result $err (expected (error $fastly_status)))
2170+ // )
2171+ //
2172+ //go:wasmimport fastly_http_body trailer_names_get
2173+ //go:noescape
2174+ func fastlyHTTPBodyTrailerNamesGet (
2175+ h bodyHandle ,
2176+ buf prim.Pointer [prim.Char8 ],
2177+ bufLen prim.Usize ,
2178+ cursor multiValueCursor ,
2179+ endingCursorOut prim.Pointer [multiValueCursorResult ],
2180+ nwrittenOut prim.Pointer [prim.Usize ],
2181+ ) FastlyStatus
2182+
2183+ // GetTrailerNames returns an iterator that yields the names of each trailer of
2184+ // the request.
2185+ func (r * HTTPBody ) GetTrailerNames () * Values {
2186+ adapter := func (
2187+ buf * prim.Char8 ,
2188+ bufLen prim.Usize ,
2189+ cursor multiValueCursor ,
2190+ endingCursorOut * multiValueCursorResult ,
2191+ nwrittenOut * prim.Usize ,
2192+ ) FastlyStatus {
2193+ return fastlyHTTPBodyTrailerNamesGet (
2194+ r .h ,
2195+ prim .ToPointer (buf ), bufLen ,
2196+ cursor ,
2197+ prim .ToPointer (endingCursorOut ),
2198+ prim .ToPointer (nwrittenOut ),
2199+ )
2200+ }
2201+
2202+ return newValues (adapter , DefaultMediumBufLen ) // Large enough to get most header names in a single call.
2203+ }
2204+
2205+ // witx:
2206+ //
2207+ // (@interface func (export "trailer_value_get")
2208+ // (param $h $body_handle)
2209+ // (param $name (list u8))
2210+ // (param $value (@witx pointer (@witx char8)))
2211+ // (param $value_max_len (@witx usize))
2212+ // (param $nwritten_out (@witx pointer (@witx usize)))
2213+ // (result $err (expected (error $fastly_status)))
2214+ // )
2215+ //
2216+ //go:wasmimport fastly_http_body trailer_value_get
2217+ //go:noescape
2218+ func fastlyHTTPBodyTrailerValueGet (
2219+ h bodyHandle ,
2220+ nameData prim.Pointer [prim.U8 ], nameLen prim.Usize ,
2221+ value prim.Pointer [prim.Char8 ],
2222+ valueMaxLen prim.Usize ,
2223+ nwrittenOut prim.Pointer [prim.Usize ],
2224+ ) FastlyStatus
2225+
2226+ // GetTrailerValue returns the first trailer value of the given trailer name on the
2227+ // request, if any.
2228+ func (r * HTTPBody ) GetTrailerValue (name string ) (string , error ) {
2229+ // Most header keys are short: e.g. "Host", "Content-Type", "User-Agent", etc.
2230+ nameBuffer := prim .NewReadBufferFromString (name ).ArrayU8 ()
2231+ value , err := withAdaptiveBuffer (DefaultSmallBufLen , func (buf * prim.WriteBuffer ) FastlyStatus {
2232+ return fastlyHTTPBodyTrailerValueGet (
2233+ r .h ,
2234+ nameBuffer .Data , nameBuffer .Len ,
2235+ prim .ToPointer (buf .Char8Pointer ()),
2236+ buf .Cap (),
2237+ prim .ToPointer (buf .NPointer ()),
2238+ )
2239+ })
2240+ if err != nil {
2241+ return "" , err
2242+ }
2243+ return value .ToString (), nil
2244+ }
2245+
2246+ // witx:
2247+ //
2248+ // (@interface func (export "trailer_values_get")
2249+ //
2250+ // (param $h $body_handle)
2251+ // (param $name (list u8))
2252+ // (param $buf (@witx pointer (@witx char8)))
2253+ // (param $buf_len (@witx usize))
2254+ // (param $cursor $multi_value_cursor)
2255+ // (param $ending_cursor_out (@witx pointer $multi_value_cursor_result))
2256+ // (param $nwritten_out (@witx pointer (@witx usize)))
2257+ // (result $err (expected (error $fastly_status)))
2258+ //
2259+ // )
2260+ //
2261+ //go:wasmimport fastly_http_body trailer_values_get
2262+ //go:noescape
2263+ func fastlyHTTPBodyTrailerValuesGet (
2264+ h bodyHandle ,
2265+ nameData prim.Pointer [prim.U8 ], nameLen prim.Usize ,
2266+ buf prim.Pointer [prim.Char8 ],
2267+ bufLen prim.Usize ,
2268+ cursor multiValueCursor ,
2269+ endingCursorOut prim.Pointer [multiValueCursorResult ],
2270+ nwrittenOut prim.Pointer [prim.Usize ],
2271+ ) FastlyStatus
2272+
2273+ // GetTrailerValues returns an iterator that yields the values for the named
2274+ // header that are of the request.
2275+ func (r * HTTPBody ) GetTrailerValues (name string ) * Values {
2276+ adapter := func (
2277+ buf * prim.Char8 ,
2278+ bufLen prim.Usize ,
2279+ cursor multiValueCursor ,
2280+ endingCursorOut * multiValueCursorResult ,
2281+ nwrittenOut * prim.Usize ,
2282+ ) FastlyStatus {
2283+ nameBuffer := prim .NewReadBufferFromString (name ).ArrayU8 ()
2284+
2285+ return fastlyHTTPBodyTrailerValuesGet (
2286+ r .h ,
2287+ nameBuffer .Data , nameBuffer .Len ,
2288+ prim .ToPointer (buf ), bufLen ,
2289+ cursor ,
2290+ prim .ToPointer (endingCursorOut ),
2291+ prim .ToPointer (nwrittenOut ),
2292+ )
2293+ }
2294+
2295+ return newValues (adapter , DefaultLargeBufLen ) // Large enough to get most header values in a single call.
2296+ }
2297+
21312298// witx:
21322299//
21332300// (module $fastly_http_resp
0 commit comments