mod default_impl;
use std::fmt::Debug;
pub use default_impl::ConfigDefault;
use omnia::{Host, Server, State};
use wasmtime::component::{HasData, Linker};
pub use wasmtime_wasi_config;
use wasmtime_wasi_config::WasiConfigVariables;
#[derive(Debug)]
pub struct WasiConfig;
impl HasData for WasiConfig {
type Data<'a> = wasmtime_wasi_config::WasiConfig<'a>;
}
impl<T> Host<T> for WasiConfig
where
T: WasiConfigView + 'static,
{
fn add_to_linker(linker: &mut Linker<T>) -> anyhow::Result<()> {
Ok(wasmtime_wasi_config::add_to_linker(linker, T::config)?)
}
}
impl<S> Server<S> for WasiConfig where S: State {}
pub trait WasiConfigView: Send {
fn config(&mut self) -> wasmtime_wasi_config::WasiConfig<'_>;
}
pub trait WasiConfigCtx: Debug + Send + Sync + 'static {
fn get_config(&self) -> &WasiConfigVariables;
}
#[macro_export]
macro_rules! omnia_wasi_view {
($store_ctx:ty, $field_name:ident) => {
impl omnia_wasi_config::WasiConfigView for $store_ctx {
fn config(&mut self) -> omnia_wasi_config::wasmtime_wasi_config::WasiConfig<'_> {
let vars = omnia_wasi_config::WasiConfigCtx::get_config(&self.$field_name);
omnia_wasi_config::wasmtime_wasi_config::WasiConfig::from(vars)
}
}
};
}