use wasmtime::component::TypedFunc;
use super::exports::act::sessions::session_provider::Guest;
use super::act::core::types::{Error, Metadata};
pub use super::act::sessions::types::Session;
type GetOpenSessionArgsSchemaFn = TypedFunc<(Metadata,), (Result<String, Error>,)>;
type OpenSessionFn = TypedFunc<(Metadata, Metadata), (Result<Session, Error>,)>;
type CloseSessionFn = TypedFunc<(String,), ()>;
#[derive(Clone)]
pub struct SessionProvider {
pub get_open_session_args_schema: GetOpenSessionArgsSchemaFn,
pub open_session: OpenSessionFn,
pub close_session: CloseSessionFn,
}
impl SessionProvider {
pub fn from_guest(guest: &Guest) -> Self {
Self {
get_open_session_args_schema: guest.func_get_open_session_args_schema(),
open_session: guest.func_open_session(),
close_session: unsafe { TypedFunc::new_unchecked(*guest.func_close_session().func()) },
}
}
}