From 5e5c02669b75e1cd51f26d60e7c5a6ea61ce9ce9 Mon Sep 17 00:00:00 2001
From: Yosh The A poll API intended to let users wait for I/O events on multiple handles
at once. Return the readiness of a pollable. This function never blocks. Returns This function is equivalent to calling Poll for completion on a set of pollables. This function takes a list of pollables, which identify I/O sources of
interest, and waits until one or more of the events is ready for I/O.World proxy
+World proxy
wasi:http/proxy
world captures a widely-implementable intersection of
hosts that includes HTTP forward and reverse proxies. Components targeting
this world may concurrently stream in and out any number of incoming and
@@ -25,35 +25,35 @@ outgoing HTTP requests.Import interface wasi:io/poll@0.2.1
+Import interface wasi:io/poll@0.2.1
Types
-
+resource pollable
resource pollable
pollable
represents a single I/O event which may be ready, or not.Functions
-
+[method]pollable.ready: func
[method]pollable.ready: func
true
when the pollable is ready, and false
otherwise.Params
Return values
-
+[method]pollable.block: func
[method]pollable.block: func
block
returns immediately if the pollable is ready, and otherwise
blocks until ready.poll.poll
on a list
containing only this pollable.Params
-
+poll: func
poll: func
WASI Monotonic Clock is a clock API intended to let users measure elapsed time.
It is intended to be portable at least between Unix-family platforms and @@ -87,60 +87,60 @@ Windows.
successive reads of the clock will produce non-decreasing values.type pollable
type pollable
-#### `type instant` +#### `type instant` `u64`
An instant in time, in nanoseconds. An instant is relative to an unspecified initial value, and can only be compared to instances from the same monotonic-clock. -
type duration
type duration
u64
A duration of time, in nanoseconds.
now: func
now: func
Read the current value of the clock.
The clock is monotonic, therefore calling this function repeatedly will produce a sequence of non-decreasing values.
resolution: func
resolution: func
Query the resolution of the clock. Returns the duration of time corresponding to a clock tick.
subscribe-instant: func
subscribe-instant: func
Create a pollable
which will resolve once the specified instant
has occurred.
subscribe-duration: func
subscribe-duration: func
Create a pollable
that will resolve after the specified duration has
elapsed from the time this function is invoked.
resource error
resource error
A resource which represents some error information.
The only method provided by this resource is to-debug-string
,
which provides some human-readable information about the error.
option<wasi:filesystem/types/error-code>The set of functions which can "downcast" an error
into a more
concrete type is open.
Functions
-[method]error.to-debug-string: func
+[method]error.to-debug-string: func
Returns a string that is suitable to assist humans in debugging
this error.
WARNING: The returned string should not be consumed mechanically!
@@ -164,42 +164,42 @@ details. Parsing this string is a major platform-compatibility
hazard.
Params
Return values
-Import interface wasi:io/streams@0.2.1
+Import interface wasi:io/streams@0.2.1
WASI I/O is an I/O abstraction API which is currently focused on providing
stream types.
In the future, the component model is expected to add built-in stream types;
when it does, they are expected to subsume this API.
Types
-type error
+type error
-#### `type pollable`
+#### `type pollable`
[`pollable`](#pollable)
-#### `variant stream-error`
+#### `variant stream-error`
An error for input-stream and output-stream operations.
Variant Cases
-
-
last-operation-failed
: own<error
>
+last-operation-failed
: own<error
>
The last operation (a write or flush) failed before completion.
More information is available in the error
payload.
-
-
+
The stream is closed: no more input will be accepted by the
stream. A closed output-stream will return this error on all
future operations.
-resource input-stream
+resource input-stream
An input bytestream.
input-stream
s are non-blocking to the extent practical on underlying
platforms. I/O operations always return promptly; if fewer bytes are
@@ -207,7 +207,7 @@ promptly available than requested, they return the number of bytes promptly
available, which could even be zero. To wait for data to be available,
use the subscribe
function to obtain a pollable
which can be polled
for using wasi:io/poll
.
-resource output-stream
+resource output-stream
An output bytestream.
output-stream
s are non-blocking to the extent practical on
underlying platforms. Except where specified otherwise, I/O operations also
@@ -219,7 +219,7 @@ polled for using wasi:io/poll
.
progress may result in the data being lost. Before dropping the stream,
be sure to fully flush your writes.
Functions
-[method]input-stream.read: func
+[method]input-stream.read: func
Perform a non-blocking read from the stream.
When the source of a read
is binary data, the bytes from the source
are returned verbatim. When the source of a read
is known to the
@@ -243,51 +243,51 @@ as a return value by the callee. The callee may return a list of bytes
less than len
in size while more bytes are available for reading.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<list<
u8
>, stream-error
>
+- result<list<
u8
>, stream-error
>
-[method]input-stream.blocking-read: func
+[method]input-stream.blocking-read: func
Read bytes from a stream, after blocking until at least one byte can
be read. Except for blocking, behavior is identical to read
.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<list<
u8
>, stream-error
>
+- result<list<
u8
>, stream-error
>
-[method]input-stream.skip: func
+[method]input-stream.skip: func
Skip bytes from a stream. Returns number of bytes skipped.
Behaves identical to read
, except instead of returning a list
of bytes, returns the number of bytes consumed from the stream.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<
u64
, stream-error
>
+- result<
u64
, stream-error
>
-[method]input-stream.blocking-skip: func
+[method]input-stream.blocking-skip: func
Skip bytes from a stream, after blocking until at least one byte
can be skipped. Except for blocking behavior, identical to skip
.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<
u64
, stream-error
>
+- result<
u64
, stream-error
>
-[method]input-stream.subscribe: func
+[method]input-stream.subscribe: func
Create a pollable
which will resolve once either the specified stream
has bytes available to read or the other end of the stream has been
closed.
@@ -296,13 +296,13 @@ Implementations may trap if the input-stream
pollable
s created with this function are dropped.
Params
-self
: borrow<input-stream
>
+self
: borrow<input-stream
>
Return values
-[method]output-stream.check-write: func
+[method]output-stream.check-write: func
Check readiness for writing. This function never blocks.
Returns the number of bytes permitted for the next call to write
,
or an error. Calling write
with more bytes than this function has
@@ -312,13 +312,13 @@ become ready when this function will report at least 1 byte, or an
error.
Params
-self
: borrow<output-stream
>
+self
: borrow<output-stream
>
Return values
-- result<
u64
, stream-error
>
+- result<
u64
, stream-error
>
-[method]output-stream.write: func
+[method]output-stream.write: func
Perform a write. This function never blocks.
When the destination of a write
is binary data, the bytes from
contents
are written verbatim. When the destination of a write
is
@@ -331,14 +331,14 @@ length of less than or equal to n. Otherwise, this function will trap.
the last call to check-write provided a permit.
Params
-self
: borrow<output-stream
>
-contents
: list<u8
>
+self
: borrow<output-stream
>
+contents
: list<u8
>
Return values
-- result<_,
stream-error
>
+- result<_,
stream-error
>
-[method]output-stream.blocking-write-and-flush: func
+[method]output-stream.blocking-write-and-flush: func
Perform a write of up to 4096 bytes, and then flush the stream. Block
until all of these operations are complete, or an error occurs.
This is a convenience wrapper around the use of check-write
,
@@ -362,14 +362,14 @@ let _ = this.check-write(); // eliding error handling
self
: borrow<output-stream
>contents
: list<u8
>self
: borrow<output-stream
>contents
: list<u8
>stream-error
>stream-error
>[method]output-stream.flush: func
[method]output-stream.flush: func
Request to flush buffered output. This function never blocks.
This tells the output-stream that the caller intends any buffered
output to be flushed. the output which is expected to be flushed
@@ -380,24 +380,24 @@ completed. The subscribe
pollable will become ready when the
flush has completed and the stream can accept more writes.
self
: borrow<output-stream
>self
: borrow<output-stream
>stream-error
>stream-error
>[method]output-stream.blocking-flush: func
[method]output-stream.blocking-flush: func
Request to flush buffered output, and block until flush completes and stream is ready for writing again.
self
: borrow<output-stream
>self
: borrow<output-stream
>stream-error
>stream-error
>[method]output-stream.subscribe: func
[method]output-stream.subscribe: func
Create a pollable
which will resolve once the output-stream
is ready for more writing, or an error has occurred. When this
pollable is ready, check-write
will return ok(n)
with n>0, or an
@@ -408,13 +408,13 @@ Implementations may trap if the output-stream
s created with this function are dropped.pollable
self
: borrow<output-stream
>self
: borrow<output-stream
>[method]output-stream.write-zeroes: func
[method]output-stream.write-zeroes: func
Write zeroes to a stream.
This should be used precisely like write
with the exact same
preconditions (must use check-write first), but instead of
@@ -422,14 +422,14 @@ passing a list of bytes, you simply pass the number of zero-bytes
that should be written.
self
: borrow<output-stream
>len
: u64
self
: borrow<output-stream
>len
: u64
stream-error
>stream-error
>[method]output-stream.blocking-write-zeroes-and-flush: func
[method]output-stream.blocking-write-zeroes-and-flush: func
Perform a write of up to 4096 zeroes, and then flush the stream. Block until all of these operations are complete, or an error occurs.
@@ -453,14 +453,14 @@ let _ = this.check-write(); // eliding error handlingself
: borrow<output-stream
>len
: u64
self
: borrow<output-stream
>len
: u64
stream-error
>stream-error
>[method]output-stream.splice: func
[method]output-stream.splice: func
Read from one stream and write to another.
The behavior of splice is equivalent to:
len
.
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
u64
, stream-error
>u64
, stream-error
>[method]output-stream.blocking-splice: func
[method]output-stream.blocking-splice: func
Read from one stream and write to another, with blocking.
This is similar to splice
, except that it blocks until the
output-stream
is ready for writing, and the input-stream
is ready for reading, before performing the splice
.
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
u64
, stream-error
>u64
, stream-error
>This interface defines all of the types and methods for implementing HTTP Requests and Responses, both incoming and outgoing, as well as their headers, trailers, and bodies.
type duration
type duration
-#### `type input-stream` +#### `type input-stream` [`input-stream`](#input_stream)
-#### `type output-stream` +#### `type output-stream` [`output-stream`](#output_stream)
-#### `type io-error` +#### `type io-error` [`error`](#error)
-#### `type pollable` +#### `type pollable` [`pollable`](#pollable)
-#### `variant method` +#### `variant method`
This type corresponds to HTTP standard Methods.
variant scheme
get
head
post
put
delete
connect
options
trace
patch
other
: string
variant scheme
This type corresponds to HTTP standard Related Schemes.
record DNS-error-payload
record DNS-error-payload
Defines the case payload type for DNS-error
above:
record TLS-alert-received-payload
record TLS-alert-received-payload
Defines the case payload type for TLS-alert-received
above:
alert-id
: option<u8
>alert-message
: option<string
>alert-id
: option<u8
>alert-message
: option<string
>record field-size-payload
record field-size-payload
Defines the case payload type for HTTP-response-{header,trailer}-size
above:
field-name
: option<string
>field-size
: option<u32
>field-name
: option<string
>field-size
: option<u32
>variant error-code
variant error-code
These cases are inspired by the IANA HTTP Proxy Error Types: https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types
DNS-timeout
DNS-error
: DNS-error-payload
destination-not-found
destination-unavailable
destination-IP-prohibited
destination-IP-unroutable
connection-refused
connection-terminated
connection-timeout
connection-read-timeout
connection-write-timeout
connection-limit-reached
TLS-protocol-error
TLS-certificate-error
TLS-alert-received
: TLS-alert-received-payload
HTTP-request-denied
HTTP-request-length-required
HTTP-request-body-size
: option<u64
>HTTP-request-method-invalid
HTTP-request-URI-invalid
HTTP-request-URI-too-long
HTTP-request-header-section-size
: option<u32
>HTTP-request-header-size
: option<field-size-payload
>HTTP-request-trailer-section-size
: option<u32
>HTTP-request-trailer-size
: field-size-payload
HTTP-response-incomplete
HTTP-response-header-section-size
: option<u32
>HTTP-response-header-size
: field-size-payload
HTTP-response-body-size
: option<u64
>HTTP-response-trailer-section-size
: option<u32
>HTTP-response-trailer-size
: field-size-payload
HTTP-response-transfer-coding
: option<string
>HTTP-response-content-coding
: option<string
>HTTP-response-timeout
HTTP-upgrade-failed
HTTP-protocol-error
loop-detected
configuration-error
internal-error
: option<string
>This is a catch-all error for anything that doesn't fit cleanly into a +
DNS-timeout
DNS-error
: DNS-error-payload
destination-not-found
destination-unavailable
destination-IP-prohibited
destination-IP-unroutable
connection-refused
connection-terminated
connection-timeout
connection-read-timeout
connection-write-timeout
connection-limit-reached
TLS-protocol-error
TLS-certificate-error
TLS-alert-received
: TLS-alert-received-payload
HTTP-request-denied
HTTP-request-length-required
HTTP-request-body-size
: option<u64
>HTTP-request-method-invalid
HTTP-request-URI-invalid
HTTP-request-URI-too-long
HTTP-request-header-section-size
: option<u32
>HTTP-request-header-size
: option<field-size-payload
>HTTP-request-trailer-section-size
: option<u32
>HTTP-request-trailer-size
: field-size-payload
HTTP-response-incomplete
HTTP-response-header-section-size
: option<u32
>HTTP-response-header-size
: field-size-payload
HTTP-response-body-size
: option<u64
>HTTP-response-trailer-section-size
: option<u32
>HTTP-response-trailer-size
: field-size-payload
HTTP-response-transfer-coding
: option<string
>HTTP-response-content-coding
: option<string
>HTTP-response-timeout
HTTP-upgrade-failed
HTTP-protocol-error
loop-detected
configuration-error
internal-error
: option<string
>This is a catch-all error for anything that doesn't fit cleanly into a more specific case. It also includes an optional string for an unstructured description of the error. Users should not depend on the string for diagnosing errors, as it's not required to be consistent between implementations.
variant header-error
variant header-error
This type enumerates the different kinds of errors that may occur when
setting or appending to a fields
resource.
This error indicates that a `field-key` or `field-value` was +
+This error indicates that a `field-name` or `field-value` was syntactically invalid when used with an operation that sets headers in a `fields`.
This error indicates that a forbidden `field-key` was used when trying +
+This error indicates that a forbidden `field-name` was used when trying to set a header in a `fields`.
This error indicates that the operation on the `fields` was not permitted because the fields are immutable.
type field-key
type field-key
string
Field keys are always strings. -
type field-value
Field keys should always be treated as case insensitive by the fields
+resource for the purposes of equality checking.
This type has been deprecated in favor of the field-name
type.
type field-name
Field names are always strings. +
Field keys should always be treated as case insensitive by the fields
+resource for the purposes of equality checking.
type field-value
Field values should always be ASCII strings. However, in reality, HTTP implementations often have to interpret malformed values, so they are provided as a list of bytes. -
resource fields
resource fields
This following block defines the fields
resource which corresponds to
HTTP standard Fields. Fields are a common representation used for both
Headers and Trailers.
incoming-request.headers
, outgoing-request.headers
) might be be
immutable. In an immutable fields, the set
, append
, and delete
operations will fail with header-error.immutable
.
-type headers
type headers
Headers is an alias for Fields. -
type trailers
type trailers
Trailers is an alias for Fields. -
resource incoming-request
resource incoming-request
Represents an incoming HTTP Request.
-resource outgoing-request
resource outgoing-request
Represents an outgoing HTTP Request.
-resource request-options
resource request-options
Parameters for making an HTTP Request. Each of these parameters is currently an optional timeout applicable to the transport layer of the HTTP protocol.
These timeouts are separate from any the user may use to bound a
blocking call to wasi:io/poll.poll
.
resource response-outparam
resource response-outparam
Represents the ability to send an HTTP Response.
This resource is used by the wasi:http/incoming-handler
interface to
allow a Response to be sent corresponding to the Request provided as the
other argument to incoming-handler.handle
.
type status-code
type status-code
u16
This type corresponds to the HTTP standard Status Code. -
resource incoming-response
resource incoming-response
Represents an incoming HTTP Response.
-resource incoming-body
resource incoming-body
Represents an incoming HTTP Request or Response's Body.
A body has both its contents - a stream of bytes - and a (possibly
empty) set of trailers, indicating that the full contents of the
@@ -687,14 +696,14 @@ body have been received. This resource represents the contents as
an input-stream
and the delivery of trailers as a future-trailers
,
and ensures that the user of this interface may only be consuming either
the body contents or waiting on trailers at any given time.
resource future-trailers
resource future-trailers
Represents a future which may eventually return trailers, or an error.
In the case that the incoming HTTP Request or Response did not have any trailers, this future will resolve to the empty set of trailers once the complete Request or Response body has been received.
-resource outgoing-response
resource outgoing-response
Represents an outgoing HTTP Response.
-resource outgoing-body
resource outgoing-body
Represents an outgoing HTTP Request or Response's Body.
A body has both its contents - a stream of bytes - and a (possibly empty) set of trailers, inducating the full contents of the body @@ -709,13 +718,13 @@ and that an error has occurred. The implementation should propagate this error to the HTTP protocol by whatever means it has available, including: corrupting the body on the wire, aborting the associated Request, or sending a late status code for the Response.
-resource future-incoming-response
resource future-incoming-response
Represents a future which may eventually return an incoming HTTP Response, or an error.
wasi:http/outgoing-handler
interface to
provide the HTTP Response corresponding to the sent Request.http-error-code: func
http-error-code: func
Attempts to extract a http-related error
from the wasi:io error
provided.
Stream operations which return @@ -727,20 +736,20 @@ if there's http-related information about the error to return.
http-related errors.error-code
>error-code
>[constructor]fields: func
[constructor]fields: func
Construct an empty HTTP Fields.
The resulting fields
is mutable.
[static]fields.from-list: func
[static]fields.from-list: func
Construct an HTTP Fields.
The resulting fields
is mutable.
The list represents each key-value pair in the Fields. Keys @@ -748,156 +757,158 @@ which have multiple values are represented by multiple entries in this list with the same key.
The tuple is a pair of the field key, represented as a string, and Value, represented as a list of bytes.
-An error result will be returned if any field-key
or field-value
is
+
An error result will be returned if any field-name
or field-value
is
syntactically invalid, or if a field is forbidden.
entries
: list<(field-key
, field-value
)>entries
: list<(field-name
, field-value
)>fields
>, header-error
>fields
>, header-error
>[method]fields.get: func
[method]fields.get: func
Get all of the values corresponding to a key. If the key is not present
in this fields
or is syntactically invalid, an empty list is returned.
However, if the key is present but empty, this is represented by a list
with one or more empty field-values present.
self
: borrow<fields
>name
: field-key
self
: borrow<fields
>name
: field-name
field-value
>field-value
>[method]fields.has: func
[method]fields.has: func
Returns true
when the key is present in this fields
. If the key is
syntactically invalid, false
is returned.
self
: borrow<fields
>name
: field-key
self
: borrow<fields
>name
: field-name
[method]fields.set: func
[method]fields.set: func
Set all of the values for a key. Clears any existing values for that key, if they have been set.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-key
or any of
+
Fails with header-error.invalid-syntax
if the field-name
or any of
the field-value
s are syntactically invalid.
self
: borrow<fields
>name
: field-key
value
: list<field-value
>self
: borrow<fields
>name
: field-name
value
: list<field-value
>header-error
>header-error
>[method]fields.delete: func
[method]fields.delete: func
Delete all values for a key. Does nothing if no values for the key exist.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-key
is
+
Fails with header-error.invalid-syntax
if the field-name
is
syntactically invalid.
self
: borrow<fields
>name
: field-key
self
: borrow<fields
>name
: field-name
header-error
>header-error
>[method]fields.append: func
[method]fields.append: func
Append a value for a key. Does not change or delete any existing values for that key.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-key
or
+
Fails with header-error.invalid-syntax
if the field-name
or
field-value
are syntactically invalid.
self
: borrow<fields
>name
: field-key
value
: field-value
self
: borrow<fields
>name
: field-name
value
: field-value
header-error
>header-error
>[method]fields.entries: func
[method]fields.entries: func
Retrieve the full set of keys and values in the Fields. Like the constructor, the list represents each key-value pair.
The outer list represents each key-value pair in the Fields. Keys which have multiple values are represented by multiple entries in this list with the same key.
+The keys and values are always returned in the original casing and in +the order in which they will be serialized for transport.
field-key
, field-value
)>field-name
, field-value
)>[method]fields.clone: func
[method]fields.clone: func
Make a deep copy of the Fields. Equivalent in behavior to calling the
fields
constructor on the return value of entries
. The resulting
fields
is mutable.
[method]incoming-request.method: func
[method]incoming-request.method: func
Returns the method of the incoming request.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.path-with-query: func
[method]incoming-request.path-with-query: func
Returns the path with query parameters from the request, as a string.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.scheme: func
[method]incoming-request.scheme: func
Returns the protocol scheme from the request.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.authority: func
[method]incoming-request.authority: func
Returns the authority of the Request's target URI, if present.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.headers: func
[method]incoming-request.headers: func
Get the headers
associated with the request.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
incoming-request
is drop
incoming-request
before all children are dropped will trap.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.consume: func
[method]incoming-request.consume: func
Gives the incoming-body
associated with this request. Will only
return success at most once, and subsequent calls will return error.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>incoming-body
>>incoming-body
>>[constructor]outgoing-request: func
[constructor]outgoing-request: func
Construct a new outgoing-request
with a default method
of GET
, and
none
values for path-with-query
, scheme
, and authority
.
outgoing-handler.handle
implementation
to reject invalid constructions of outgoing-request
.
outgoing-request
>outgoing-request
>[method]outgoing-request.body: func
[method]outgoing-request.body: func
Returns the resource corresponding to the outgoing Body for this Request.
Returns success on the first call: the outgoing-body
resource for
@@ -950,109 +961,109 @@ this outgoing-request
can be retrie
calls will return error.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>outgoing-body
>>outgoing-body
>>[method]outgoing-request.method: func
[method]outgoing-request.method: func
Get the Method for the Request.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-method: func
[method]outgoing-request.set-method: func
Set the Method for the Request. Fails if the string present in a
method.other
argument is not a syntactically valid method.
self
: borrow<outgoing-request
>method
: method
self
: borrow<outgoing-request
>method
: method
[method]outgoing-request.path-with-query: func
[method]outgoing-request.path-with-query: func
Get the combination of the HTTP Path and Query for the Request.
When none
, this represents an empty Path and empty Query.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-path-with-query: func
[method]outgoing-request.set-path-with-query: func
Set the combination of the HTTP Path and Query for the Request.
When none
, this represents an empty Path and empty Query. Fails is the
string given is not a syntactically valid path and query uri component.
self
: borrow<outgoing-request
>path-with-query
: option<string
>self
: borrow<outgoing-request
>path-with-query
: option<string
>[method]outgoing-request.scheme: func
[method]outgoing-request.scheme: func
Get the HTTP Related Scheme for the Request. When none
, the
implementation may choose an appropriate default scheme.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-scheme: func
[method]outgoing-request.set-scheme: func
Set the HTTP Related Scheme for the Request. When none
, the
implementation may choose an appropriate default scheme. Fails if the
string given is not a syntactically valid uri scheme.
self
: borrow<outgoing-request
>scheme
: option<scheme
>self
: borrow<outgoing-request
>scheme
: option<scheme
>[method]outgoing-request.authority: func
[method]outgoing-request.authority: func
Get the authority of the Request's target URI. A value of none
may be used
with Related Schemes which do not require an authority. The HTTP and
HTTPS schemes always require an authority.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-authority: func
[method]outgoing-request.set-authority: func
Set the authority of the Request's target URI. A value of none
may be used
with Related Schemes which do not require an authority. The HTTP and
HTTPS schemes always require an authority. Fails if the string given is
not a syntactically valid URI authority.
self
: borrow<outgoing-request
>authority
: option<string
>self
: borrow<outgoing-request
>authority
: option<string
>[method]outgoing-request.headers: func
[method]outgoing-request.headers: func
Get the headers associated with the Request.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
outgoing-handler.handle
.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[constructor]request-options: func
[constructor]request-options: func
Construct a default request-options
value.
request-options
>request-options
>[method]request-options.connect-timeout: func
[method]request-options.connect-timeout: func
The timeout for the initial connect to the HTTP Server.
self
: borrow<request-options
>self
: borrow<request-options
>[method]request-options.set-connect-timeout: func
[method]request-options.set-connect-timeout: func
Set the timeout for the initial connect to the HTTP Server. An error return value indicates that this timeout is not supported.
self
: borrow<request-options
>duration
: option<duration
>self
: borrow<request-options
>duration
: option<duration
>[method]request-options.first-byte-timeout: func
[method]request-options.first-byte-timeout: func
The timeout for receiving the first byte of the Response body.
self
: borrow<request-options
>self
: borrow<request-options
>[method]request-options.set-first-byte-timeout: func
[method]request-options.set-first-byte-timeout: func
Set the timeout for receiving the first byte of the Response body. An error return value indicates that this timeout is not supported.
self
: borrow<request-options
>duration
: option<duration
>self
: borrow<request-options
>duration
: option<duration
>[method]request-options.between-bytes-timeout: func
[method]request-options.between-bytes-timeout: func
The timeout for receiving subsequent chunks of bytes in the Response body stream.
self
: borrow<request-options
>self
: borrow<request-options
>[method]request-options.set-between-bytes-timeout: func
[method]request-options.set-between-bytes-timeout: func
Set the timeout for receiving subsequent chunks of bytes in the Response body stream. An error return value indicates that this timeout is not supported.
self
: borrow<request-options
>duration
: option<duration
>self
: borrow<request-options
>duration
: option<duration
>[static]response-outparam.set: func
[static]response-outparam.set: func
Set the value of the response-outparam
to either send a response,
or indicate an error.
This method consumes the response-outparam
to ensure that it is
@@ -1151,20 +1162,20 @@ will respond with an error.
param
: own<response-outparam
>response
: result<own<outgoing-response
>, error-code
>param
: own<response-outparam
>response
: result<own<outgoing-response
>, error-code
>[method]incoming-response.status: func
[method]incoming-response.status: func
Returns the status code from the incoming response.
self
: borrow<incoming-response
>self
: borrow<incoming-response
>[method]incoming-response.headers: func
[method]incoming-response.headers: func
Returns the headers from the incoming response.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
incoming-response
is dropped.
self
: borrow<incoming-response
>self
: borrow<incoming-response
>[method]incoming-response.consume: func
[method]incoming-response.consume: func
Returns the incoming body. May be called at most once. Returns error if called additional times.
self
: borrow<incoming-response
>self
: borrow<incoming-response
>incoming-body
>>incoming-body
>>[method]incoming-body.stream: func
[method]incoming-body.stream: func
Returns the contents of the body, as a stream of bytes.
Returns success on first call: the stream representing the contents can be retrieved at most once. Subsequent calls will return error.
@@ -1204,36 +1215,36 @@ and for that backpressure to not inhibit delivery of the trailers if the user does not read the entire body.self
: borrow<incoming-body
>self
: borrow<incoming-body
>input-stream
>>input-stream
>>[static]incoming-body.finish: func
[static]incoming-body.finish: func
Takes ownership of incoming-body
, and returns a future-trailers
.
This function will trap if the input-stream
child is still alive.
this
: own<incoming-body
>this
: own<incoming-body
>future-trailers
>future-trailers
>[method]future-trailers.subscribe: func
[method]future-trailers.subscribe: func
Returns a pollable which becomes ready when either the trailers have
been received, or an error has occurred. When this pollable is ready,
the get
method will return some
.
self
: borrow<future-trailers
>self
: borrow<future-trailers
>[method]future-trailers.get: func
[method]future-trailers.get: func
Returns the contents of the trailers, or an error which occurred, once the future is ready.
The outer option
represents future readiness. Users can wait on this
@@ -1251,13 +1262,13 @@ resource is immutable, and a child. Use of the set
, append
future-trailers
is dropped.
self
: borrow<future-trailers
>self
: borrow<future-trailers
>trailers
>>, error-code
>>>trailers
>>, error-code
>>>[constructor]outgoing-response: func
[constructor]outgoing-response: func
Construct an outgoing-response
, with a default status-code
of 200
.
If a different status-code
is needed, it must be set via the
set-status-code
method.
status-code
is needed, it
outgoing-response
>outgoing-response
>[method]outgoing-response.status-code: func
[method]outgoing-response.status-code: func
Get the HTTP Status Code for the Response.
self
: borrow<outgoing-response
>self
: borrow<outgoing-response
>[method]outgoing-response.set-status-code: func
[method]outgoing-response.set-status-code: func
Set the HTTP Status Code for the Response. Fails if the status-code given is not a valid http status code.
self
: borrow<outgoing-response
>status-code
: status-code
self
: borrow<outgoing-response
>status-code
: status-code
[method]outgoing-response.headers: func
[method]outgoing-response.headers: func
Get the headers associated with the Request.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
outgoing-handler.handle
.
self
: borrow<outgoing-response
>self
: borrow<outgoing-response
>[method]outgoing-response.body: func
[method]outgoing-response.body: func
Returns the resource corresponding to the outgoing Body for this Response.
Returns success on the first call: the outgoing-body
resource for
this outgoing-response
can be retrieved at most once. Subsequent
calls will return error.
self
: borrow<outgoing-response
>self
: borrow<outgoing-response
>outgoing-body
>>outgoing-body
>>[method]outgoing-body.write: func
[method]outgoing-body.write: func
Returns a stream for writing the body contents.
The returned output-stream
is a child resource: it must be dropped
before the parent outgoing-body
resource is dropped (or finished),
@@ -1332,13 +1343,13 @@ this outgoing-body
may be retrieved at
will return error.
self
: borrow<outgoing-body
>self
: borrow<outgoing-body
>output-stream
>>output-stream
>>[static]outgoing-body.finish: func
[static]outgoing-body.finish: func
Finalize an outgoing body, optionally providing trailers. This must be
called to signal that the response is complete. If the outgoing-body
is dropped without calling outgoing-body.finalize
, the implementation
@@ -1349,26 +1360,26 @@ to the body (via write
) does not match the value given in the
Content-Length.
this
: own<outgoing-body
>trailers
: option<own<trailers
>>this
: own<outgoing-body
>trailers
: option<own<trailers
>>error-code
>error-code
>[method]future-incoming-response.subscribe: func
[method]future-incoming-response.subscribe: func
Returns a pollable which becomes ready when either the Response has
been received, or an error has occurred. When this pollable is ready,
the get
method will return some
.
self
: borrow<future-incoming-response
>self
: borrow<future-incoming-response
>[method]future-incoming-response.get: func
[method]future-incoming-response.get: func
Returns the incoming HTTP Response, or an error, once one is ready.
The outer option
represents future readiness. Users can wait on this
option
to become some
using the subscribe
method.
incoming-body
output-stream
child.
Params
-self
: borrow<future-incoming-response
>
+self
: borrow<future-incoming-response
>incoming-response
>, error-code
>>>incoming-response
>, error-code
>>>WASI Wall Clock is a clock API intended to let users query the current time. The name "wall" makes an analogy to a "clock on the wall", which is not necessarily monotonic as it may be reset.
@@ -1401,16 +1412,16 @@ monotonic, making it unsuitable for measuring elapsed time.It is intended for reporting the current date and time for humans.
record datetime
record datetime
A time and date in seconds plus nanoseconds.
now: func
now: func
Read the current value of the clock.
This clock is not monotonic, therefore calling this function repeatedly will not necessarily produce a sequence of non-decreasing values.
@@ -1420,22 +1431,22 @@ also known as Unix Time.The nanoseconds field of the output is always less than 1000000000.
resolution: func
resolution: func
Query the resolution of the clock.
The nanoseconds field of the output is always less than 1000000000.
WASI Random is a random data API.
It is intended to be portable at least between Unix-family platforms and Windows.
get-random-bytes: func
get-random-bytes: func
Return len
cryptographically-secure random or pseudo-random bytes.
This function must produce data at least as cryptographically secure and fast as an adequately seeded cryptographically-secure pseudo-random @@ -1448,79 +1459,79 @@ must omit this function, rather than implementing it with deterministic data.
get-random-u64: func
get-random-u64: func
Return a cryptographically-secure random or pseudo-random u64
value.
This function returns the same type of data as get-random-bytes
,
represented as a u64
.
type output-stream
type output-stream
----
get-stdout: func
get-stdout: func
output-stream
>output-stream
>type output-stream
type output-stream
----
get-stderr: func
get-stderr: func
output-stream
>output-stream
>type input-stream
type input-stream
----
get-stdin: func
get-stdin: func
input-stream
>input-stream
>This interface defines a handler of outgoing HTTP Requests. It should be imported by components which wish to make HTTP Requests.
type outgoing-request
type outgoing-request
-#### `type request-options` +#### `type request-options` [`request-options`](#request_options)
-#### `type future-incoming-response` +#### `type future-incoming-response` [`future-incoming-response`](#future_incoming_response)
-#### `type error-code` +#### `type error-code` [`error-code`](#error_code)
----
handle: func
handle: func
This function is invoked with an outgoing HTTP Request, and it returns
a resource future-incoming-response
which represents an HTTP Response
which may arrive in the future.
future-incoming-response
.
request
: own<outgoing-request
>options
: option<own<request-options
>>request
: own<outgoing-request
>options
: option<own<request-options
>>future-incoming-response
>, error-code
>future-incoming-response
>, error-code
>type incoming-request
type incoming-request
-#### `type response-outparam` +#### `type response-outparam` [`response-outparam`](#response_outparam)
----
handle: func
handle: func
This function is invoked with an incoming HTTP Request, and a resource
response-outparam
which provides the capability to reply with an HTTP
Response. The response is sent by calling the response-outparam.set
@@ -1561,6 +1572,6 @@ work.
request
: own<incoming-request
>response-out
: own<response-outparam
>request
: own<incoming-request
>response-out
: own<response-outparam
>The wasi:http/imports
world imports all the APIs for HTTP proxies.
It is intended to be include
d in other worlds.
include
d in other worlds.
A poll API intended to let users wait for I/O events on multiple handles at once.
resource pollable
resource pollable
pollable
represents a single I/O event which may be ready, or not.[method]pollable.ready: func
[method]pollable.ready: func
Return the readiness of a pollable. This function never blocks.
Returns true
when the pollable is ready, and false
otherwise.
[method]pollable.block: func
[method]pollable.block: func
block
returns immediately if the pollable is ready, and otherwise
blocks until ready.
This function is equivalent to calling poll.poll
on a list
containing only this pollable.
poll: func
poll: func
Poll for completion on a set of pollables.
This function takes a list of pollables, which identify I/O sources of interest, and waits until one or more of the events is ready for I/O.
@@ -65,13 +65,13 @@ the pollables has an error, it is indicated by marking the source as being ready for I/O.WASI Monotonic Clock is a clock API intended to let users measure elapsed time.
It is intended to be portable at least between Unix-family platforms and @@ -80,57 +80,57 @@ Windows.
successive reads of the clock will produce non-decreasing values.type pollable
type pollable
-#### `type instant` +#### `type instant` `u64`
An instant in time, in nanoseconds. An instant is relative to an unspecified initial value, and can only be compared to instances from the same monotonic-clock. -
type duration
type duration
u64
A duration of time, in nanoseconds.
now: func
now: func
Read the current value of the clock.
The clock is monotonic, therefore calling this function repeatedly will produce a sequence of non-decreasing values.
resolution: func
resolution: func
Query the resolution of the clock. Returns the duration of time corresponding to a clock tick.
subscribe-instant: func
subscribe-instant: func
Create a pollable
which will resolve once the specified instant
has occurred.
subscribe-duration: func
subscribe-duration: func
Create a pollable
that will resolve after the specified duration has
elapsed from the time this function is invoked.
WASI Wall Clock is a clock API intended to let users query the current time. The name "wall" makes an analogy to a "clock on the wall", which is not necessarily monotonic as it may be reset.
@@ -143,16 +143,16 @@ monotonic, making it unsuitable for measuring elapsed time.It is intended for reporting the current date and time for humans.
record datetime
record datetime
A time and date in seconds plus nanoseconds.
now: func
now: func
Read the current value of the clock.
This clock is not monotonic, therefore calling this function repeatedly will not necessarily produce a sequence of non-decreasing values.
@@ -162,22 +162,22 @@ also known as Unix Time.The nanoseconds field of the output is always less than 1000000000.
resolution: func
resolution: func
Query the resolution of the clock.
The nanoseconds field of the output is always less than 1000000000.
WASI Random is a random data API.
It is intended to be portable at least between Unix-family platforms and Windows.
get-random-bytes: func
get-random-bytes: func
Return len
cryptographically-secure random or pseudo-random bytes.
This function must produce data at least as cryptographically secure and fast as an adequately seeded cryptographically-secure pseudo-random @@ -190,24 +190,24 @@ must omit this function, rather than implementing it with deterministic data.
get-random-u64: func
get-random-u64: func
Return a cryptographically-secure random or pseudo-random u64
value.
This function returns the same type of data as get-random-bytes
,
represented as a u64
.
resource error
resource error
A resource which represents some error information.
The only method provided by this resource is to-debug-string
,
which provides some human-readable information about the error.
option<wasi:filesystem/types/error-code>The set of functions which can "downcast" an error
into a more
concrete type is open.
Functions
-[method]error.to-debug-string: func
+[method]error.to-debug-string: func
Returns a string that is suitable to assist humans in debugging
this error.
WARNING: The returned string should not be consumed mechanically!
@@ -231,42 +231,42 @@ details. Parsing this string is a major platform-compatibility
hazard.
Params
Return values
-Import interface wasi:io/streams@0.2.1
+Import interface wasi:io/streams@0.2.1
WASI I/O is an I/O abstraction API which is currently focused on providing
stream types.
In the future, the component model is expected to add built-in stream types;
when it does, they are expected to subsume this API.
Types
-type error
+type error
-#### `type pollable`
+#### `type pollable`
[`pollable`](#pollable)
-#### `variant stream-error`
+#### `variant stream-error`
An error for input-stream and output-stream operations.
Variant Cases
-
-
last-operation-failed
: own<error
>
+last-operation-failed
: own<error
>
The last operation (a write or flush) failed before completion.
More information is available in the error
payload.
-
-
+
The stream is closed: no more input will be accepted by the
stream. A closed output-stream will return this error on all
future operations.
-resource input-stream
+resource input-stream
An input bytestream.
input-stream
s are non-blocking to the extent practical on underlying
platforms. I/O operations always return promptly; if fewer bytes are
@@ -274,7 +274,7 @@ promptly available than requested, they return the number of bytes promptly
available, which could even be zero. To wait for data to be available,
use the subscribe
function to obtain a pollable
which can be polled
for using wasi:io/poll
.
-resource output-stream
+resource output-stream
An output bytestream.
output-stream
s are non-blocking to the extent practical on
underlying platforms. Except where specified otherwise, I/O operations also
@@ -286,7 +286,7 @@ polled for using wasi:io/poll
.
progress may result in the data being lost. Before dropping the stream,
be sure to fully flush your writes.
Functions
-[method]input-stream.read: func
+[method]input-stream.read: func
Perform a non-blocking read from the stream.
When the source of a read
is binary data, the bytes from the source
are returned verbatim. When the source of a read
is known to the
@@ -310,51 +310,51 @@ as a return value by the callee. The callee may return a list of bytes
less than len
in size while more bytes are available for reading.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<list<
u8
>, stream-error
>
+- result<list<
u8
>, stream-error
>
-[method]input-stream.blocking-read: func
+[method]input-stream.blocking-read: func
Read bytes from a stream, after blocking until at least one byte can
be read. Except for blocking, behavior is identical to read
.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<list<
u8
>, stream-error
>
+- result<list<
u8
>, stream-error
>
-[method]input-stream.skip: func
+[method]input-stream.skip: func
Skip bytes from a stream. Returns number of bytes skipped.
Behaves identical to read
, except instead of returning a list
of bytes, returns the number of bytes consumed from the stream.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<
u64
, stream-error
>
+- result<
u64
, stream-error
>
-[method]input-stream.blocking-skip: func
+[method]input-stream.blocking-skip: func
Skip bytes from a stream, after blocking until at least one byte
can be skipped. Except for blocking behavior, identical to skip
.
Params
-self
: borrow<input-stream
>
-len
: u64
+self
: borrow<input-stream
>
+len
: u64
Return values
-- result<
u64
, stream-error
>
+- result<
u64
, stream-error
>
-[method]input-stream.subscribe: func
+[method]input-stream.subscribe: func
Create a pollable
which will resolve once either the specified stream
has bytes available to read or the other end of the stream has been
closed.
@@ -363,13 +363,13 @@ Implementations may trap if the input-stream
pollable
s created with this function are dropped.
Params
-self
: borrow<input-stream
>
+self
: borrow<input-stream
>
Return values
-[method]output-stream.check-write: func
+[method]output-stream.check-write: func
Check readiness for writing. This function never blocks.
Returns the number of bytes permitted for the next call to write
,
or an error. Calling write
with more bytes than this function has
@@ -379,13 +379,13 @@ become ready when this function will report at least 1 byte, or an
error.
Params
-self
: borrow<output-stream
>
+self
: borrow<output-stream
>
Return values
-- result<
u64
, stream-error
>
+- result<
u64
, stream-error
>
-[method]output-stream.write: func
+[method]output-stream.write: func
Perform a write. This function never blocks.
When the destination of a write
is binary data, the bytes from
contents
are written verbatim. When the destination of a write
is
@@ -398,14 +398,14 @@ length of less than or equal to n. Otherwise, this function will trap.
the last call to check-write provided a permit.
Params
-self
: borrow<output-stream
>
-contents
: list<u8
>
+self
: borrow<output-stream
>
+contents
: list<u8
>
Return values
-- result<_,
stream-error
>
+- result<_,
stream-error
>
-[method]output-stream.blocking-write-and-flush: func
+[method]output-stream.blocking-write-and-flush: func
Perform a write of up to 4096 bytes, and then flush the stream. Block
until all of these operations are complete, or an error occurs.
This is a convenience wrapper around the use of check-write
,
@@ -429,14 +429,14 @@ let _ = this.check-write(); // eliding error handling
self
: borrow<output-stream
>contents
: list<u8
>self
: borrow<output-stream
>contents
: list<u8
>stream-error
>stream-error
>[method]output-stream.flush: func
[method]output-stream.flush: func
Request to flush buffered output. This function never blocks.
This tells the output-stream that the caller intends any buffered
output to be flushed. the output which is expected to be flushed
@@ -447,24 +447,24 @@ completed. The subscribe
pollable will become ready when the
flush has completed and the stream can accept more writes.
self
: borrow<output-stream
>self
: borrow<output-stream
>stream-error
>stream-error
>[method]output-stream.blocking-flush: func
[method]output-stream.blocking-flush: func
Request to flush buffered output, and block until flush completes and stream is ready for writing again.
self
: borrow<output-stream
>self
: borrow<output-stream
>stream-error
>stream-error
>[method]output-stream.subscribe: func
[method]output-stream.subscribe: func
Create a pollable
which will resolve once the output-stream
is ready for more writing, or an error has occurred. When this
pollable is ready, check-write
will return ok(n)
with n>0, or an
@@ -475,13 +475,13 @@ Implementations may trap if the output-stream
s created with this function are dropped.pollable
self
: borrow<output-stream
>self
: borrow<output-stream
>[method]output-stream.write-zeroes: func
[method]output-stream.write-zeroes: func
Write zeroes to a stream.
This should be used precisely like write
with the exact same
preconditions (must use check-write first), but instead of
@@ -489,14 +489,14 @@ passing a list of bytes, you simply pass the number of zero-bytes
that should be written.
self
: borrow<output-stream
>len
: u64
self
: borrow<output-stream
>len
: u64
stream-error
>stream-error
>[method]output-stream.blocking-write-zeroes-and-flush: func
[method]output-stream.blocking-write-zeroes-and-flush: func
Perform a write of up to 4096 zeroes, and then flush the stream. Block until all of these operations are complete, or an error occurs.
@@ -520,14 +520,14 @@ let _ = this.check-write(); // eliding error handlingself
: borrow<output-stream
>len
: u64
self
: borrow<output-stream
>len
: u64
stream-error
>stream-error
>[method]output-stream.splice: func
[method]output-stream.splice: func
Read from one stream and write to another.
The behavior of splice is equivalent to:
len
.
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
u64
, stream-error
>u64
, stream-error
>[method]output-stream.blocking-splice: func
[method]output-stream.blocking-splice: func
Read from one stream and write to another, with blocking.
This is similar to splice
, except that it blocks until the
output-stream
is ready for writing, and the input-stream
is ready for reading, before performing the splice
.
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
self
: borrow<output-stream
>src
: borrow<input-stream
>len
: u64
u64
, stream-error
>u64
, stream-error
>type output-stream
type output-stream
----
get-stdout: func
get-stdout: func
output-stream
>output-stream
>type output-stream
type output-stream
----
get-stderr: func
get-stderr: func
output-stream
>output-stream
>type input-stream
type input-stream
----
get-stdin: func
get-stdin: func
input-stream
>input-stream
>This interface defines all of the types and methods for implementing HTTP Requests and Responses, both incoming and outgoing, as well as their headers, trailers, and bodies.
type duration
type duration
-#### `type input-stream` +#### `type input-stream` [`input-stream`](#input_stream)
-#### `type output-stream` +#### `type output-stream` [`output-stream`](#output_stream)
-#### `type io-error` +#### `type io-error` [`error`](#error)
-#### `type pollable` +#### `type pollable` [`pollable`](#pollable)
-#### `variant method` +#### `variant method`
This type corresponds to HTTP standard Methods.
variant scheme
get
head
post
put
delete
connect
options
trace
patch
other
: string
variant scheme
This type corresponds to HTTP standard Related Schemes.
record DNS-error-payload
record DNS-error-payload
Defines the case payload type for DNS-error
above:
record TLS-alert-received-payload
record TLS-alert-received-payload
Defines the case payload type for TLS-alert-received
above:
alert-id
: option<u8
>alert-message
: option<string
>alert-id
: option<u8
>alert-message
: option<string
>record field-size-payload
record field-size-payload
Defines the case payload type for HTTP-response-{header,trailer}-size
above:
field-name
: option<string
>field-size
: option<u32
>field-name
: option<string
>field-size
: option<u32
>variant error-code
variant error-code
These cases are inspired by the IANA HTTP Proxy Error Types: https://www.iana.org/assignments/http-proxy-status/http-proxy-status.xhtml#table-http-proxy-error-types
DNS-timeout
DNS-error
: DNS-error-payload
destination-not-found
destination-unavailable
destination-IP-prohibited
destination-IP-unroutable
connection-refused
connection-terminated
connection-timeout
connection-read-timeout
connection-write-timeout
connection-limit-reached
TLS-protocol-error
TLS-certificate-error
TLS-alert-received
: TLS-alert-received-payload
HTTP-request-denied
HTTP-request-length-required
HTTP-request-body-size
: option<u64
>HTTP-request-method-invalid
HTTP-request-URI-invalid
HTTP-request-URI-too-long
HTTP-request-header-section-size
: option<u32
>HTTP-request-header-size
: option<field-size-payload
>HTTP-request-trailer-section-size
: option<u32
>HTTP-request-trailer-size
: field-size-payload
HTTP-response-incomplete
HTTP-response-header-section-size
: option<u32
>HTTP-response-header-size
: field-size-payload
HTTP-response-body-size
: option<u64
>HTTP-response-trailer-section-size
: option<u32
>HTTP-response-trailer-size
: field-size-payload
HTTP-response-transfer-coding
: option<string
>HTTP-response-content-coding
: option<string
>HTTP-response-timeout
HTTP-upgrade-failed
HTTP-protocol-error
loop-detected
configuration-error
internal-error
: option<string
>This is a catch-all error for anything that doesn't fit cleanly into a +
DNS-timeout
DNS-error
: DNS-error-payload
destination-not-found
destination-unavailable
destination-IP-prohibited
destination-IP-unroutable
connection-refused
connection-terminated
connection-timeout
connection-read-timeout
connection-write-timeout
connection-limit-reached
TLS-protocol-error
TLS-certificate-error
TLS-alert-received
: TLS-alert-received-payload
HTTP-request-denied
HTTP-request-length-required
HTTP-request-body-size
: option<u64
>HTTP-request-method-invalid
HTTP-request-URI-invalid
HTTP-request-URI-too-long
HTTP-request-header-section-size
: option<u32
>HTTP-request-header-size
: option<field-size-payload
>HTTP-request-trailer-section-size
: option<u32
>HTTP-request-trailer-size
: field-size-payload
HTTP-response-incomplete
HTTP-response-header-section-size
: option<u32
>HTTP-response-header-size
: field-size-payload
HTTP-response-body-size
: option<u64
>HTTP-response-trailer-section-size
: option<u32
>HTTP-response-trailer-size
: field-size-payload
HTTP-response-transfer-coding
: option<string
>HTTP-response-content-coding
: option<string
>HTTP-response-timeout
HTTP-upgrade-failed
HTTP-protocol-error
loop-detected
configuration-error
internal-error
: option<string
>This is a catch-all error for anything that doesn't fit cleanly into a more specific case. It also includes an optional string for an unstructured description of the error. Users should not depend on the string for diagnosing errors, as it's not required to be consistent between implementations.
variant header-error
variant header-error
This type enumerates the different kinds of errors that may occur when
setting or appending to a fields
resource.
This error indicates that a `field-key` or `field-value` was +
+This error indicates that a `field-name` or `field-value` was syntactically invalid when used with an operation that sets headers in a `fields`.
This error indicates that a forbidden `field-key` was used when trying +
+This error indicates that a forbidden `field-name` was used when trying to set a header in a `fields`.
This error indicates that the operation on the `fields` was not permitted because the fields are immutable.
type field-key
type field-key
string
Field keys are always strings. -
type field-value
Field keys should always be treated as case insensitive by the fields
+resource for the purposes of equality checking.
This type has been deprecated in favor of the field-name
type.
type field-name
Field names are always strings. +
Field keys should always be treated as case insensitive by the fields
+resource for the purposes of equality checking.
type field-value
Field values should always be ASCII strings. However, in reality, HTTP implementations often have to interpret malformed values, so they are provided as a list of bytes. -
resource fields
resource fields
This following block defines the fields
resource which corresponds to
HTTP standard Fields. Fields are a common representation used for both
Headers and Trailers.
incoming-request.headers
, outgoing-request.headers
) might be be
immutable. In an immutable fields, the set
, append
, and delete
operations will fail with header-error.immutable
.
-type headers
type headers
Headers is an alias for Fields. -
type trailers
type trailers
Trailers is an alias for Fields. -
resource incoming-request
resource incoming-request
Represents an incoming HTTP Request.
-resource outgoing-request
resource outgoing-request
Represents an outgoing HTTP Request.
-resource request-options
resource request-options
Parameters for making an HTTP Request. Each of these parameters is currently an optional timeout applicable to the transport layer of the HTTP protocol.
These timeouts are separate from any the user may use to bound a
blocking call to wasi:io/poll.poll
.
resource response-outparam
resource response-outparam
Represents the ability to send an HTTP Response.
This resource is used by the wasi:http/incoming-handler
interface to
allow a Response to be sent corresponding to the Request provided as the
other argument to incoming-handler.handle
.
type status-code
type status-code
u16
This type corresponds to the HTTP standard Status Code. -
resource incoming-response
resource incoming-response
Represents an incoming HTTP Response.
-resource incoming-body
resource incoming-body
Represents an incoming HTTP Request or Response's Body.
A body has both its contents - a stream of bytes - and a (possibly
empty) set of trailers, indicating that the full contents of the
@@ -793,14 +802,14 @@ body have been received. This resource represents the contents as
an input-stream
and the delivery of trailers as a future-trailers
,
and ensures that the user of this interface may only be consuming either
the body contents or waiting on trailers at any given time.
resource future-trailers
resource future-trailers
Represents a future which may eventually return trailers, or an error.
In the case that the incoming HTTP Request or Response did not have any trailers, this future will resolve to the empty set of trailers once the complete Request or Response body has been received.
-resource outgoing-response
resource outgoing-response
Represents an outgoing HTTP Response.
-resource outgoing-body
resource outgoing-body
Represents an outgoing HTTP Request or Response's Body.
A body has both its contents - a stream of bytes - and a (possibly empty) set of trailers, inducating the full contents of the body @@ -815,13 +824,13 @@ and that an error has occurred. The implementation should propagate this error to the HTTP protocol by whatever means it has available, including: corrupting the body on the wire, aborting the associated Request, or sending a late status code for the Response.
-resource future-incoming-response
resource future-incoming-response
Represents a future which may eventually return an incoming HTTP Response, or an error.
wasi:http/outgoing-handler
interface to
provide the HTTP Response corresponding to the sent Request.http-error-code: func
http-error-code: func
Attempts to extract a http-related error
from the wasi:io error
provided.
Stream operations which return @@ -833,20 +842,20 @@ if there's http-related information about the error to return.
http-related errors.error-code
>error-code
>[constructor]fields: func
[constructor]fields: func
Construct an empty HTTP Fields.
The resulting fields
is mutable.
[static]fields.from-list: func
[static]fields.from-list: func
Construct an HTTP Fields.
The resulting fields
is mutable.
The list represents each key-value pair in the Fields. Keys @@ -854,156 +863,158 @@ which have multiple values are represented by multiple entries in this list with the same key.
The tuple is a pair of the field key, represented as a string, and Value, represented as a list of bytes.
-An error result will be returned if any field-key
or field-value
is
+
An error result will be returned if any field-name
or field-value
is
syntactically invalid, or if a field is forbidden.
entries
: list<(field-key
, field-value
)>entries
: list<(field-name
, field-value
)>fields
>, header-error
>fields
>, header-error
>[method]fields.get: func
[method]fields.get: func
Get all of the values corresponding to a key. If the key is not present
in this fields
or is syntactically invalid, an empty list is returned.
However, if the key is present but empty, this is represented by a list
with one or more empty field-values present.
self
: borrow<fields
>name
: field-key
self
: borrow<fields
>name
: field-name
field-value
>field-value
>[method]fields.has: func
[method]fields.has: func
Returns true
when the key is present in this fields
. If the key is
syntactically invalid, false
is returned.
self
: borrow<fields
>name
: field-key
self
: borrow<fields
>name
: field-name
[method]fields.set: func
[method]fields.set: func
Set all of the values for a key. Clears any existing values for that key, if they have been set.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-key
or any of
+
Fails with header-error.invalid-syntax
if the field-name
or any of
the field-value
s are syntactically invalid.
self
: borrow<fields
>name
: field-key
value
: list<field-value
>self
: borrow<fields
>name
: field-name
value
: list<field-value
>header-error
>header-error
>[method]fields.delete: func
[method]fields.delete: func
Delete all values for a key. Does nothing if no values for the key exist.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-key
is
+
Fails with header-error.invalid-syntax
if the field-name
is
syntactically invalid.
self
: borrow<fields
>name
: field-key
self
: borrow<fields
>name
: field-name
header-error
>header-error
>[method]fields.append: func
[method]fields.append: func
Append a value for a key. Does not change or delete any existing values for that key.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-key
or
+
Fails with header-error.invalid-syntax
if the field-name
or
field-value
are syntactically invalid.
self
: borrow<fields
>name
: field-key
value
: field-value
self
: borrow<fields
>name
: field-name
value
: field-value
header-error
>header-error
>[method]fields.entries: func
[method]fields.entries: func
Retrieve the full set of keys and values in the Fields. Like the constructor, the list represents each key-value pair.
The outer list represents each key-value pair in the Fields. Keys which have multiple values are represented by multiple entries in this list with the same key.
+The keys and values are always returned in the original casing and in +the order in which they will be serialized for transport.
field-key
, field-value
)>field-name
, field-value
)>[method]fields.clone: func
[method]fields.clone: func
Make a deep copy of the Fields. Equivalent in behavior to calling the
fields
constructor on the return value of entries
. The resulting
fields
is mutable.
[method]incoming-request.method: func
[method]incoming-request.method: func
Returns the method of the incoming request.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.path-with-query: func
[method]incoming-request.path-with-query: func
Returns the path with query parameters from the request, as a string.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.scheme: func
[method]incoming-request.scheme: func
Returns the protocol scheme from the request.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.authority: func
[method]incoming-request.authority: func
Returns the authority of the Request's target URI, if present.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.headers: func
[method]incoming-request.headers: func
Get the headers
associated with the request.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
incoming-request
is drop
incoming-request
before all children are dropped will trap.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>[method]incoming-request.consume: func
[method]incoming-request.consume: func
Gives the incoming-body
associated with this request. Will only
return success at most once, and subsequent calls will return error.
self
: borrow<incoming-request
>self
: borrow<incoming-request
>incoming-body
>>incoming-body
>>[constructor]outgoing-request: func
[constructor]outgoing-request: func
Construct a new outgoing-request
with a default method
of GET
, and
none
values for path-with-query
, scheme
, and authority
.
outgoing-handler.handle
implementation
to reject invalid constructions of outgoing-request
.
outgoing-request
>outgoing-request
>[method]outgoing-request.body: func
[method]outgoing-request.body: func
Returns the resource corresponding to the outgoing Body for this Request.
Returns success on the first call: the outgoing-body
resource for
@@ -1056,109 +1067,109 @@ this outgoing-request
can be retrie
calls will return error.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>outgoing-body
>>outgoing-body
>>[method]outgoing-request.method: func
[method]outgoing-request.method: func
Get the Method for the Request.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-method: func
[method]outgoing-request.set-method: func
Set the Method for the Request. Fails if the string present in a
method.other
argument is not a syntactically valid method.
self
: borrow<outgoing-request
>method
: method
self
: borrow<outgoing-request
>method
: method
[method]outgoing-request.path-with-query: func
[method]outgoing-request.path-with-query: func
Get the combination of the HTTP Path and Query for the Request.
When none
, this represents an empty Path and empty Query.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-path-with-query: func
[method]outgoing-request.set-path-with-query: func
Set the combination of the HTTP Path and Query for the Request.
When none
, this represents an empty Path and empty Query. Fails is the
string given is not a syntactically valid path and query uri component.
self
: borrow<outgoing-request
>path-with-query
: option<string
>self
: borrow<outgoing-request
>path-with-query
: option<string
>[method]outgoing-request.scheme: func
[method]outgoing-request.scheme: func
Get the HTTP Related Scheme for the Request. When none
, the
implementation may choose an appropriate default scheme.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-scheme: func
[method]outgoing-request.set-scheme: func
Set the HTTP Related Scheme for the Request. When none
, the
implementation may choose an appropriate default scheme. Fails if the
string given is not a syntactically valid uri scheme.
self
: borrow<outgoing-request
>scheme
: option<scheme
>self
: borrow<outgoing-request
>scheme
: option<scheme
>[method]outgoing-request.authority: func
[method]outgoing-request.authority: func
Get the authority of the Request's target URI. A value of none
may be used
with Related Schemes which do not require an authority. The HTTP and
HTTPS schemes always require an authority.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[method]outgoing-request.set-authority: func
[method]outgoing-request.set-authority: func
Set the authority of the Request's target URI. A value of none
may be used
with Related Schemes which do not require an authority. The HTTP and
HTTPS schemes always require an authority. Fails if the string given is
not a syntactically valid URI authority.
self
: borrow<outgoing-request
>authority
: option<string
>self
: borrow<outgoing-request
>authority
: option<string
>[method]outgoing-request.headers: func
[method]outgoing-request.headers: func
Get the headers associated with the Request.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
outgoing-handler.handle
.
self
: borrow<outgoing-request
>self
: borrow<outgoing-request
>[constructor]request-options: func
[constructor]request-options: func
Construct a default request-options
value.
request-options
>request-options
>[method]request-options.connect-timeout: func
[method]request-options.connect-timeout: func
The timeout for the initial connect to the HTTP Server.
self
: borrow<request-options
>self
: borrow<request-options
>[method]request-options.set-connect-timeout: func
[method]request-options.set-connect-timeout: func
Set the timeout for the initial connect to the HTTP Server. An error return value indicates that this timeout is not supported.
self
: borrow<request-options
>duration
: option<duration
>self
: borrow<request-options
>duration
: option<duration
>[method]request-options.first-byte-timeout: func
[method]request-options.first-byte-timeout: func
The timeout for receiving the first byte of the Response body.
self
: borrow<request-options
>self
: borrow<request-options
>[method]request-options.set-first-byte-timeout: func
[method]request-options.set-first-byte-timeout: func
Set the timeout for receiving the first byte of the Response body. An error return value indicates that this timeout is not supported.
self
: borrow<request-options
>duration
: option<duration
>self
: borrow<request-options
>duration
: option<duration
>[method]request-options.between-bytes-timeout: func
[method]request-options.between-bytes-timeout: func
The timeout for receiving subsequent chunks of bytes in the Response body stream.
self
: borrow<request-options
>self
: borrow<request-options
>[method]request-options.set-between-bytes-timeout: func
[method]request-options.set-between-bytes-timeout: func
Set the timeout for receiving subsequent chunks of bytes in the Response body stream. An error return value indicates that this timeout is not supported.
self
: borrow<request-options
>duration
: option<duration
>self
: borrow<request-options
>duration
: option<duration
>[static]response-outparam.set: func
[static]response-outparam.set: func
Set the value of the response-outparam
to either send a response,
or indicate an error.
This method consumes the response-outparam
to ensure that it is
@@ -1257,20 +1268,20 @@ will respond with an error.
param
: own<response-outparam
>response
: result<own<outgoing-response
>, error-code
>param
: own<response-outparam
>response
: result<own<outgoing-response
>, error-code
>[method]incoming-response.status: func
[method]incoming-response.status: func
Returns the status code from the incoming response.
self
: borrow<incoming-response
>self
: borrow<incoming-response
>[method]incoming-response.headers: func
[method]incoming-response.headers: func
Returns the headers from the incoming response.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
incoming-response
is dropped.
self
: borrow<incoming-response
>self
: borrow<incoming-response
>[method]incoming-response.consume: func
[method]incoming-response.consume: func
Returns the incoming body. May be called at most once. Returns error if called additional times.
self
: borrow<incoming-response
>self
: borrow<incoming-response
>incoming-body
>>incoming-body
>>[method]incoming-body.stream: func
[method]incoming-body.stream: func
Returns the contents of the body, as a stream of bytes.
Returns success on first call: the stream representing the contents can be retrieved at most once. Subsequent calls will return error.
@@ -1310,36 +1321,36 @@ and for that backpressure to not inhibit delivery of the trailers if the user does not read the entire body.self
: borrow<incoming-body
>self
: borrow<incoming-body
>input-stream
>>input-stream
>>[static]incoming-body.finish: func
[static]incoming-body.finish: func
Takes ownership of incoming-body
, and returns a future-trailers
.
This function will trap if the input-stream
child is still alive.
this
: own<incoming-body
>this
: own<incoming-body
>future-trailers
>future-trailers
>[method]future-trailers.subscribe: func
[method]future-trailers.subscribe: func
Returns a pollable which becomes ready when either the trailers have
been received, or an error has occurred. When this pollable is ready,
the get
method will return some
.
self
: borrow<future-trailers
>self
: borrow<future-trailers
>[method]future-trailers.get: func
[method]future-trailers.get: func
Returns the contents of the trailers, or an error which occurred, once the future is ready.
The outer option
represents future readiness. Users can wait on this
@@ -1357,13 +1368,13 @@ resource is immutable, and a child. Use of the set
, append
future-trailers
is dropped.
self
: borrow<future-trailers
>self
: borrow<future-trailers
>trailers
>>, error-code
>>>trailers
>>, error-code
>>>[constructor]outgoing-response: func
[constructor]outgoing-response: func
Construct an outgoing-response
, with a default status-code
of 200
.
If a different status-code
is needed, it must be set via the
set-status-code
method.
status-code
is needed, it
outgoing-response
>outgoing-response
>[method]outgoing-response.status-code: func
[method]outgoing-response.status-code: func
Get the HTTP Status Code for the Response.
self
: borrow<outgoing-response
>self
: borrow<outgoing-response
>[method]outgoing-response.set-status-code: func
[method]outgoing-response.set-status-code: func
Set the HTTP Status Code for the Response. Fails if the status-code given is not a valid http status code.
self
: borrow<outgoing-response
>status-code
: status-code
self
: borrow<outgoing-response
>status-code
: status-code
[method]outgoing-response.headers: func
[method]outgoing-response.headers: func
Get the headers associated with the Request.
The returned headers
resource is immutable: set
, append
, and
delete
operations will fail with header-error.immutable
.
outgoing-handler.handle
.
self
: borrow<outgoing-response
>self
: borrow<outgoing-response
>[method]outgoing-response.body: func
[method]outgoing-response.body: func
Returns the resource corresponding to the outgoing Body for this Response.
Returns success on the first call: the outgoing-body
resource for
this outgoing-response
can be retrieved at most once. Subsequent
calls will return error.
self
: borrow<outgoing-response
>self
: borrow<outgoing-response
>outgoing-body
>>outgoing-body
>>[method]outgoing-body.write: func
[method]outgoing-body.write: func
Returns a stream for writing the body contents.
The returned output-stream
is a child resource: it must be dropped
before the parent outgoing-body
resource is dropped (or finished),
@@ -1438,13 +1449,13 @@ this outgoing-body
may be retrieved at
will return error.
self
: borrow<outgoing-body
>self
: borrow<outgoing-body
>output-stream
>>output-stream
>>[static]outgoing-body.finish: func
[static]outgoing-body.finish: func
Finalize an outgoing body, optionally providing trailers. This must be
called to signal that the response is complete. If the outgoing-body
is dropped without calling outgoing-body.finalize
, the implementation
@@ -1455,26 +1466,26 @@ to the body (via write
) does not match the value given in the
Content-Length.
this
: own<outgoing-body
>trailers
: option<own<trailers
>>this
: own<outgoing-body
>trailers
: option<own<trailers
>>error-code
>error-code
>[method]future-incoming-response.subscribe: func
[method]future-incoming-response.subscribe: func
Returns a pollable which becomes ready when either the Response has
been received, or an error has occurred. When this pollable is ready,
the get
method will return some
.
self
: borrow<future-incoming-response
>self
: borrow<future-incoming-response
>[method]future-incoming-response.get: func
[method]future-incoming-response.get: func
Returns the incoming HTTP Response, or an error, once one is ready.
The outer option
represents future readiness. Users can wait on this
option
to become some
using the subscribe
method.
incoming-body
output-stream
child.
Params
-self
: borrow<future-incoming-response
>
+self
: borrow<future-incoming-response
>incoming-response
>, error-code
>>>incoming-response
>, error-code
>>>This interface defines a handler of outgoing HTTP Requests. It should be imported by components which wish to make HTTP Requests.
type outgoing-request
type outgoing-request
-#### `type request-options` +#### `type request-options` [`request-options`](#request_options)
-#### `type future-incoming-response` +#### `type future-incoming-response` [`future-incoming-response`](#future_incoming_response)
-#### `type error-code` +#### `type error-code` [`error-code`](#error_code)
----
handle: func
handle: func
This function is invoked with an outgoing HTTP Request, and it returns
a resource future-incoming-response
which represents an HTTP Response
which may arrive in the future.
future-incoming-response
.
request
: own<outgoing-request
>options
: option<own<request-options
>>request
: own<outgoing-request
>options
: option<own<request-options
>>future-incoming-response
>, error-code
>future-incoming-response
>, error-code
>type field-name
Field names are always strings. -
Field keys should always be treated as case insensitive by the fields
+
Field names should always be treated as case insensitive by the fields
resource for the purposes of equality checking.
type field-value
[static]fields.from-list: func
Construct an HTTP Fields.
The resulting fields
is mutable.
The list represents each key-value pair in the Fields. Keys +
The list represents each name-value pair in the Fields. Names which have multiple values are represented by multiple entries in this -list with the same key.
-The tuple is a pair of the field key, represented as a string, and +list with the same name.
+The tuple is a pair of the field name, represented as a string, and Value, represented as a list of bytes.
An error result will be returned if any field-name
or field-value
is
syntactically invalid, or if a field is forbidden.
fields
>, header-error
>[method]fields.get: func
Get all of the values corresponding to a key. If the key is not present +
Get all of the values corresponding to a name. If the name is not present
in this fields
or is syntactically invalid, an empty list is returned.
-However, if the key is present but empty, this is represented by a list
+However, if the name is present but empty, this is represented by a list
with one or more empty field-values present.
field-value
>[method]fields.has: func
Returns true
when the key is present in this fields
. If the key is
+
Returns true
when the name is present in this fields
. If the name is
syntactically invalid, false
is returned.
[method]fields.set: func
Set all of the values for a key. Clears any existing values for that -key, if they have been set.
+Set all of the values for a name. Clears any existing values for that +name, if they have been set.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-name
or any of
the field-value
s are syntactically invalid.
field-value
s are syntactically inval
header-error
>[method]fields.delete: func
Delete all values for a key. Does nothing if no values for the key +
Delete all values for a name. Does nothing if no values for the name exist.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-name
is
@@ -931,8 +931,8 @@ syntactically invalid.
header-error
>[method]fields.append: func
Append a value for a key. Does not change or delete any existing -values for that key.
+Append a value for a name. Does not change or delete any existing +values for that name.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-name
or
field-value
are syntactically invalid.
header-error
>[method]fields.entries: func
Retrieve the full set of keys and values in the Fields. Like the -constructor, the list represents each key-value pair.
-The outer list represents each key-value pair in the Fields. Keys +
Retrieve the full set of names and values in the Fields. Like the +constructor, the list represents each name-value pair.
+The outer list represents each name-value pair in the Fields. Names which have multiple values are represented by multiple entries in this -list with the same key.
-The keys and values are always returned in the original casing and in +list with the same name.
+The names and values are always returned in the original casing and in the order in which they will be serialized for transport.
type field-name
Field names are always strings. -
Field keys should always be treated as case insensitive by the fields
+
Field names should always be treated as case insensitive by the fields
resource for the purposes of equality checking.
type field-value
[static]fields.from-list: func
Construct an HTTP Fields.
The resulting fields
is mutable.
The list represents each key-value pair in the Fields. Keys +
The list represents each name-value pair in the Fields. Names which have multiple values are represented by multiple entries in this -list with the same key.
-The tuple is a pair of the field key, represented as a string, and +list with the same name.
+The tuple is a pair of the field name, represented as a string, and Value, represented as a list of bytes.
An error result will be returned if any field-name
or field-value
is
syntactically invalid, or if a field is forbidden.
fields
>, header-error
>[method]fields.get: func
Get all of the values corresponding to a key. If the key is not present +
Get all of the values corresponding to a name. If the name is not present
in this fields
or is syntactically invalid, an empty list is returned.
-However, if the key is present but empty, this is represented by a list
+However, if the name is present but empty, this is represented by a list
with one or more empty field-values present.
field-value
>[method]fields.has: func
Returns true
when the key is present in this fields
. If the key is
+
Returns true
when the name is present in this fields
. If the name is
syntactically invalid, false
is returned.
[method]fields.set: func
Set all of the values for a key. Clears any existing values for that -key, if they have been set.
+Set all of the values for a name. Clears any existing values for that +name, if they have been set.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-name
or any of
the field-value
s are syntactically invalid.
field-value
s are syntactically inval
header-error
>[method]fields.delete: func
Delete all values for a key. Does nothing if no values for the key +
Delete all values for a name. Does nothing if no values for the name exist.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-name
is
@@ -825,8 +825,8 @@ syntactically invalid.
header-error
>[method]fields.append: func
Append a value for a key. Does not change or delete any existing -values for that key.
+Append a value for a name. Does not change or delete any existing +values for that name.
Fails with header-error.immutable
if the fields
are immutable.
Fails with header-error.invalid-syntax
if the field-name
or
field-value
are syntactically invalid.
header-error
>[method]fields.entries: func
Retrieve the full set of keys and values in the Fields. Like the -constructor, the list represents each key-value pair.
-The outer list represents each key-value pair in the Fields. Keys +
Retrieve the full set of names and values in the Fields. Like the +constructor, the list represents each name-value pair.
+The outer list represents each name-value pair in the Fields. Names which have multiple values are represented by multiple entries in this -list with the same key.
-The keys and values are always returned in the original casing and in +list with the same name.
+The names and values are always returned in the original casing and in the order in which they will be serialized for transport.