interface types {
use io.streams.streams.{input-stream, output-stream}
use poll.poll.poll.{pollable}
type status-code = u16
variant scheme {
HTTP,
HTTPS,
other(string),
}
type response-outparam = u32
record request-options {
connect-timeout-ms: option<u32>,
first-byte-timeout-ms: option<u32>,
between-bytes-timeout-ms: option<u32>,
}
type outgoing-stream = output-stream
type outgoing-response = u32
type outgoing-request = u32
variant method {
get,
head,
post,
put,
delete,
connect,
options,
trace,
patch,
other(string),
}
type incoming-stream = input-stream
type incoming-response = u32
type incoming-request = u32
type future-incoming-response = u32
type fields = u32
type trailers = fields
type headers = fields
variant error {
invalid-url(string),
timeout-error(string),
protocol-error(string),
unexpected-error(string),
}
drop-fields: func(fields: fields)
new-fields: func(entries: list<tuple<string, string>>) -> fields
fields-get: func(fields: fields, name: string) -> list<string>
fields-set: func(fields: fields, name: string, value: list<string>)
fields-delete: func(fields: fields, name: string)
fields-append: func(fields: fields, name: string, value: string)
fields-entries: func(fields: fields) -> list<tuple<string, string>>
fields-clone: func(fields: fields) -> fields
finish-incoming-stream: func(s: incoming-stream) -> option<trailers>
finish-outgoing-stream: func(s: outgoing-stream, trailers: option<trailers>)
drop-incoming-request: func(request: incoming-request)
drop-outgoing-request: func(request: outgoing-request)
incoming-request-method: func(request: incoming-request) -> method
incoming-request-path: func(request: incoming-request) -> string
incoming-request-query: func(request: incoming-request) -> string
incoming-request-scheme: func(request: incoming-request) -> option<scheme>
incoming-request-authority: func(request: incoming-request) -> string
incoming-request-headers: func(request: incoming-request) -> headers
incoming-request-consume: func(request: incoming-request) -> result<incoming-stream>
new-outgoing-request: func(method: method, path: string, query: string, scheme: option<scheme>, authority: string, headers: headers) -> outgoing-request
outgoing-request-write: func(request: outgoing-request) -> result<outgoing-stream>
drop-response-outparam: func(response: response-outparam)
set-response-outparam: func(param: response-outparam, response: result<outgoing-response, error>) -> result
drop-incoming-response: func(response: incoming-response)
drop-outgoing-response: func(response: outgoing-response)
incoming-response-status: func(response: incoming-response) -> status-code
incoming-response-headers: func(response: incoming-response) -> headers
incoming-response-consume: func(response: incoming-response) -> result<incoming-stream>
new-outgoing-response: func(status-code: status-code, headers: headers) -> outgoing-response
outgoing-response-write: func(response: outgoing-response) -> result<outgoing-stream>
drop-future-incoming-response: func(f: future-incoming-response)
future-incoming-response-get: func(f: future-incoming-response) -> option<result<incoming-response, error>>
listen-to-future-incoming-response: func(f: future-incoming-response) -> pollable
}