wasm-nats-producer-client/wit/deps/wasi-http-0.2.0/package.wit
2024-12-14 02:15:08 +01:00

199 lines
5.6 KiB
Plaintext

package wasi:http@0.2.0;
interface types {
use wasi:clocks/monotonic-clock@0.2.0.{duration};
use wasi:io/streams@0.2.0.{input-stream, output-stream};
use wasi:io/error@0.2.0.{error as io-error};
use wasi:io/poll@0.2.0.{pollable};
variant method {
get,
head,
post,
put,
delete,
connect,
options,
trace,
patch,
other(string),
}
variant scheme {
HTTP,
HTTPS,
other(string),
}
record DNS-error-payload {
rcode: option<string>,
info-code: option<u16>,
}
record TLS-alert-received-payload {
alert-id: option<u8>,
alert-message: option<string>,
}
record field-size-payload {
field-name: option<string>,
field-size: option<u32>,
}
variant error-code {
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>),
}
variant header-error {
invalid-syntax,
forbidden,
immutable,
}
type field-key = string;
type field-value = list<u8>;
resource fields {
constructor();
from-list: static func(entries: list<tuple<field-key, field-value>>) -> result<fields, header-error>;
get: func(name: field-key) -> list<field-value>;
has: func(name: field-key) -> bool;
set: func(name: field-key, value: list<field-value>) -> result<_, header-error>;
delete: func(name: field-key) -> result<_, header-error>;
append: func(name: field-key, value: field-value) -> result<_, header-error>;
entries: func() -> list<tuple<field-key, field-value>>;
clone: func() -> fields;
}
type headers = fields;
type trailers = fields;
resource incoming-request {
method: func() -> method;
path-with-query: func() -> option<string>;
scheme: func() -> option<scheme>;
authority: func() -> option<string>;
headers: func() -> headers;
consume: func() -> result<incoming-body>;
}
resource outgoing-request {
constructor(headers: headers);
body: func() -> result<outgoing-body>;
method: func() -> method;
set-method: func(method: method) -> result;
path-with-query: func() -> option<string>;
set-path-with-query: func(path-with-query: option<string>) -> result;
scheme: func() -> option<scheme>;
set-scheme: func(scheme: option<scheme>) -> result;
authority: func() -> option<string>;
set-authority: func(authority: option<string>) -> result;
headers: func() -> headers;
}
resource request-options {
constructor();
connect-timeout: func() -> option<duration>;
set-connect-timeout: func(duration: option<duration>) -> result;
first-byte-timeout: func() -> option<duration>;
set-first-byte-timeout: func(duration: option<duration>) -> result;
between-bytes-timeout: func() -> option<duration>;
set-between-bytes-timeout: func(duration: option<duration>) -> result;
}
resource response-outparam {
set: static func(param: response-outparam, response: result<outgoing-response, error-code>);
}
type status-code = u16;
resource incoming-response {
status: func() -> status-code;
headers: func() -> headers;
consume: func() -> result<incoming-body>;
}
resource incoming-body {
%stream: func() -> result<input-stream>;
finish: static func(this: incoming-body) -> future-trailers;
}
resource future-trailers {
subscribe: func() -> pollable;
get: func() -> option<result<result<option<trailers>, error-code>>>;
}
resource outgoing-response {
constructor(headers: headers);
status-code: func() -> status-code;
set-status-code: func(status-code: status-code) -> result;
headers: func() -> headers;
body: func() -> result<outgoing-body>;
}
resource outgoing-body {
write: func() -> result<output-stream>;
finish: static func(this: outgoing-body, trailers: option<trailers>) -> result<_, error-code>;
}
resource future-incoming-response {
subscribe: func() -> pollable;
get: func() -> option<result<result<incoming-response, error-code>>>;
}
http-error-code: func(err: borrow<io-error>) -> option<error-code>;
}
interface incoming-handler {
use types.{incoming-request, response-outparam};
handle: func(request: incoming-request, response-out: response-outparam);
}
interface outgoing-handler {
use types.{outgoing-request, request-options, future-incoming-response, error-code};
handle: func(request: outgoing-request, options: option<request-options>) -> result<future-incoming-response, error-code>;
}