pub struct WasiHttpNamed<T>(/* private fields */);Expand description
A helper struct which implements HasData for the wasi:http APIs when
used in combination with named imports.
This structure is similar in purpose to WasiHttp and is used
when using the named_imports module for wasi:http. This structure
serves as the D type parameter for add_to_linker functions.
§Meaning of the T parameter
Here the T must be something that implements WasiHttpNamedView. The
corresponding Data for this type is WasiCtxNamedView which internally
will contain &mut T.
Effectively you’re going to implement WasiHttpNamedView for something in
your embedding, and that’s the T you’ll fill in here.
§Examples
use wasmtime::component::{Linker, Component, ResourceTable};
use wasmtime::{Engine, Result};
use wasmtime_wasi::{NamedId, WasiCtxNamedView};
use wasmtime_wasi_http::{WasiHttpCtx, WasiHttpCtxView, WasiHttpNamed, WasiHttpNamedView};
use wasmtime_wasi_http::p2::bindings::named_imports;
use std::collections::HashMap;
struct MyStoreState {
table: ResourceTable,
states: HashMap<NamedId, WasiHttpCtx>,
}
fn main() -> Result<()> {
let engine = Engine::default();
let mut linker = Linker::new(&engine);
let component = Component::new(&engine, "(component)")?;
let mut name_map = HashMap::new();
named_imports::wasi::http::outgoing_handler::add_to_linker::<MyStoreState, WasiHttpNamed<MyStoreState>>(
&mut linker,
&component,
|name| {
let len = name_map.len();
Ok(NamedId(*name_map.entry(name.to_string()).or_insert(len)))
},
|state| WasiCtxNamedView(state),
)?;
Ok(())
}
impl WasiHttpNamedView for MyStoreState {
fn http(&mut self, id: NamedId) -> WasiHttpCtxView<'_> {
let ctx = self.states.get_mut(&id).expect("state for id");
WasiHttpCtxView {
ctx,
table: &mut self.table,
hooks: Default::default(),
}
}
}Trait Implementations§
Source§impl<T> HasData for WasiHttpNamed<T>where
T: WasiHttpNamedView,
impl<T> HasData for WasiHttpNamed<T>where
T: WasiHttpNamedView,
Source§type Data<'a> = WasiCtxNamedView<'a, T>
type Data<'a> = WasiCtxNamedView<'a, T>
The data associated with this trait implementation, chiefly used as a
generic associated type to allow plumbing the
'a lifetime into the
definition here. Read moreSource§impl<T, U> HostRequestWithStore<U> for WasiHttpNamed<T>where
T: WasiHttpNamedView,
U: 'static,
Available on crate feature p3 only.
impl<T, U> HostRequestWithStore<U> for WasiHttpNamed<T>where
T: WasiHttpNamedView,
U: 'static,
Available on crate feature
p3 only.Source§fn new(
store: Access<'_, U, Self>,
id: NamedId,
headers: Resource<Headers>,
contents: Option<StreamReader<u8>>,
trailers: FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>,
options: Option<Resource<RequestOptions>>,
) -> Result<(Resource<Request>, FutureReader<Result<(), ErrorCode>>)>
fn new( store: Access<'_, U, Self>, id: NamedId, headers: Resource<Headers>, contents: Option<StreamReader<u8>>, trailers: FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>, options: Option<Resource<RequestOptions>>, ) -> Result<(Resource<Request>, FutureReader<Result<(), ErrorCode>>)>
Construct a new
request with a default method of GET, and
none values for path-with-query, scheme, and authority. Read moreSource§fn consume_body(
store: Access<'_, U, Self>,
id: NamedId,
req: Resource<Request>,
fut: FutureReader<Result<(), ErrorCode>>,
) -> Result<(StreamReader<u8>, FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>)>
fn consume_body( store: Access<'_, U, Self>, id: NamedId, req: Resource<Request>, fut: FutureReader<Result<(), ErrorCode>>, ) -> Result<(StreamReader<u8>, FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>)>
Get body of the Request. Read more
fn drop( store: Access<'_, U, Self>, id: NamedId, req: Resource<Request>, ) -> Result<()>
Source§impl<T, U> HostResponseWithStore<U> for WasiHttpNamed<T>where
T: WasiHttpNamedView,
U: 'static,
Available on crate feature p3 only.
impl<T, U> HostResponseWithStore<U> for WasiHttpNamed<T>where
T: WasiHttpNamedView,
U: 'static,
Available on crate feature
p3 only.Source§fn new(
store: Access<'_, U, Self>,
id: NamedId,
headers: Resource<Headers>,
contents: Option<StreamReader<u8>>,
trailers: FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>,
) -> Result<(Resource<Response>, FutureReader<Result<(), ErrorCode>>)>
fn new( store: Access<'_, U, Self>, id: NamedId, headers: Resource<Headers>, contents: Option<StreamReader<u8>>, trailers: FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>, ) -> Result<(Resource<Response>, FutureReader<Result<(), ErrorCode>>)>
Construct a new
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. Read moreSource§fn consume_body(
store: Access<'_, U, Self>,
id: NamedId,
res: Resource<Response>,
fut: FutureReader<Result<(), ErrorCode>>,
) -> Result<(StreamReader<u8>, FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>)>
fn consume_body( store: Access<'_, U, Self>, id: NamedId, res: Resource<Response>, fut: FutureReader<Result<(), ErrorCode>>, ) -> Result<(StreamReader<u8>, FutureReader<Result<Option<Resource<Trailers>>, ErrorCode>>)>
Get body of the Response. Read more
fn drop( store: Access<'_, U, Self>, id: NamedId, res: Resource<Response>, ) -> Result<()>
Source§impl<T, U> HostWithStore<U> for WasiHttpNamed<T>where
T: WasiHttpNamedView,
U: 'static,
Available on crate feature p3 only.
impl<T, U> HostWithStore<U> for WasiHttpNamed<T>where
T: WasiHttpNamedView,
U: 'static,
Available on crate feature
p3 only.Auto Trait Implementations§
impl<T> Freeze for WasiHttpNamed<T>
impl<T> RefUnwindSafe for WasiHttpNamed<T>
impl<T> Send for WasiHttpNamed<T>
impl<T> Sync for WasiHttpNamed<T>
impl<T> Unpin for WasiHttpNamed<T>
impl<T> UnsafeUnpin for WasiHttpNamed<T>
impl<T> UnwindSafe for WasiHttpNamed<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<H, T> HostDescriptorWithStore<T> for H
impl<H, T> HostDescriptorWithStore<T> for H
impl<H, T> HostDescriptorWithStore<T> for H
impl<H, T> HostDirectoryEntryStreamWithStore<T> for H
impl<H, T> HostDirectoryEntryStreamWithStore<T> for H
impl<H, T> HostDirectoryEntryStreamWithStore<T> for H
impl<H, T> HostErrorWithStore<T> for H
impl<H, T> HostFieldsWithStore<T> for H
impl<H, T> HostFieldsWithStore<T> for H
impl<H, T> HostFieldsWithStore<T> for H
impl<H, T> HostFieldsWithStore<T> for H
impl<H, T> HostFutureIncomingResponseWithStore<T> for H
impl<H, T> HostFutureIncomingResponseWithStore<T> for H
impl<H, T> HostFutureTrailersWithStore<T> for H
impl<H, T> HostFutureTrailersWithStore<T> for H
impl<H, T> HostIncomingBodyWithStore<T> for H
impl<H, T> HostIncomingBodyWithStore<T> for H
impl<H, T> HostIncomingDatagramStreamWithStore<T> for H
impl<H, T> HostIncomingDatagramStreamWithStore<T> for H
impl<H, T> HostIncomingDatagramStreamWithStore<T> for H
impl<H, T> HostIncomingRequestWithStore<T> for H
impl<H, T> HostIncomingRequestWithStore<T> for H
impl<H, T> HostIncomingResponseWithStore<T> for H
impl<H, T> HostIncomingResponseWithStore<T> for H
impl<H, T> HostInputStreamWithStore<T> for H
impl<H, T> HostInputStreamWithStore<T> for H
impl<H, T> HostNetworkWithStore<T> for H
impl<H, T> HostNetworkWithStore<T> for H
impl<H, T> HostOutgoingBodyWithStore<T> for H
impl<H, T> HostOutgoingBodyWithStore<T> for H
impl<H, T> HostOutgoingDatagramStreamWithStore<T> for H
impl<H, T> HostOutgoingDatagramStreamWithStore<T> for H
impl<H, T> HostOutgoingDatagramStreamWithStore<T> for H
impl<H, T> HostOutgoingRequestWithStore<T> for H
impl<H, T> HostOutgoingRequestWithStore<T> for H
impl<H, T> HostOutgoingResponseWithStore<T> for H
impl<H, T> HostOutgoingResponseWithStore<T> for H
impl<H, T> HostOutputStreamWithStore<T> for H
impl<H, T> HostOutputStreamWithStore<T> for H
impl<H, T> HostPollableWithStore<T> for H
impl<H, T> HostPollableWithStore<T> for H
impl<H, T> HostRequestOptionsWithStore<T> for H
impl<H, T> HostRequestOptionsWithStore<T> for H
impl<H, T> HostRequestOptionsWithStore<T> for H
impl<H, T> HostRequestOptionsWithStore<T> for H
impl<H, T> HostResolveAddressStreamWithStore<T> for H
impl<H, T> HostResolveAddressStreamWithStore<T> for H
impl<H, T> HostResolveAddressStreamWithStore<T> for H
impl<H, T> HostResponseOutparamWithStore<T> for H
impl<H, T> HostResponseOutparamWithStore<T> for H
impl<H, T> HostTcpSocketWithStore<T> for H
impl<H, T> HostTcpSocketWithStore<T> for H
impl<H, T> HostTcpSocketWithStore<T> for H
impl<H, T> HostTerminalInputWithStore<T> for H
impl<H, T> HostTerminalInputWithStore<T> for H
impl<H, T> HostTerminalInputWithStore<T> for H
impl<H, T> HostTerminalInputWithStore<T> for H
impl<H, T> HostTerminalOutputWithStore<T> for H
impl<H, T> HostTerminalOutputWithStore<T> for H
impl<H, T> HostTerminalOutputWithStore<T> for H
impl<H, T> HostTerminalOutputWithStore<T> for H
impl<H, T> HostUdpSocketWithStore<T> for H
impl<H, T> HostUdpSocketWithStore<T> for H
impl<H, T> HostUdpSocketWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostFieldsWithStore<T> + HostIncomingRequestWithStore<T> + HostOutgoingRequestWithStore<T> + HostRequestOptionsWithStore<T> + HostResponseOutparamWithStore<T> + HostIncomingResponseWithStore<T> + HostIncomingBodyWithStore<T> + HostFutureTrailersWithStore<T> + HostOutgoingResponseWithStore<T> + HostOutgoingBodyWithStore<T> + HostFutureIncomingResponseWithStore<T> + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostFieldsWithStore<T> + HostIncomingRequestWithStore<T> + HostOutgoingRequestWithStore<T> + HostRequestOptionsWithStore<T> + HostResponseOutparamWithStore<T> + HostIncomingResponseWithStore<T> + HostIncomingBodyWithStore<T> + HostFutureTrailersWithStore<T> + HostOutgoingResponseWithStore<T> + HostOutgoingBodyWithStore<T> + HostFutureIncomingResponseWithStore<T> + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostFieldsWithStore<T> + HostRequestWithStore<T> + HostRequestOptionsWithStore<T> + HostResponseWithStore<T> + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostUdpSocketWithStore<T> + HostIncomingDatagramStreamWithStore<T> + HostOutgoingDatagramStreamWithStore<T> + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostDescriptorWithStore<T> + HostDirectoryEntryStreamWithStore<T> + Send + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostUdpSocketWithStore<T> + HostIncomingDatagramStreamWithStore<T> + HostOutgoingDatagramStreamWithStore<T> + Send + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostDescriptorWithStore<T> + HostDirectoryEntryStreamWithStore<T> + Send + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for Hwhere
H: HasData + HostUdpSocketWithStore<T> + HostIncomingDatagramStreamWithStore<T> + HostOutgoingDatagramStreamWithStore<T> + Send + ?Sized,
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
impl<H, T> HostWithStore<T> for H
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more