mod ctx;
mod registry;
pub mod backend;
pub use ctx::{preload, WasiNnCtx};
pub use registry::{GraphRegistry, InMemoryRegistry};
pub mod testing;
pub mod wit;
pub mod witx;
use std::sync::Arc;
pub struct Backend(Box<dyn backend::BackendInner>);
impl std::ops::Deref for Backend {
type Target = dyn backend::BackendInner;
fn deref(&self) -> &Self::Target {
self.0.as_ref()
}
}
impl std::ops::DerefMut for Backend {
fn deref_mut(&mut self) -> &mut Self::Target {
self.0.as_mut()
}
}
impl<T: backend::BackendInner + 'static> From<T> for Backend {
fn from(value: T) -> Self {
Self(Box::new(value))
}
}
#[derive(Clone)]
pub struct Graph(Arc<dyn backend::BackendGraph>);
impl From<Box<dyn backend::BackendGraph>> for Graph {
fn from(value: Box<dyn backend::BackendGraph>) -> Self {
Self(value.into())
}
}
impl std::ops::Deref for Graph {
type Target = dyn backend::BackendGraph;
fn deref(&self) -> &Self::Target {
self.0.as_ref()
}
}
pub struct ExecutionContext(Box<dyn backend::BackendExecutionContext>);
impl From<Box<dyn backend::BackendExecutionContext>> for ExecutionContext {
fn from(value: Box<dyn backend::BackendExecutionContext>) -> Self {
Self(value)
}
}
impl std::ops::Deref for ExecutionContext {
type Target = dyn backend::BackendExecutionContext;
fn deref(&self) -> &Self::Target {
self.0.as_ref()
}
}
impl std::ops::DerefMut for ExecutionContext {
fn deref_mut(&mut self) -> &mut Self::Target {
self.0.as_mut()
}
}
pub struct Registry(Box<dyn GraphRegistry>);
impl std::ops::Deref for Registry {
type Target = dyn GraphRegistry;
fn deref(&self) -> &Self::Target {
self.0.as_ref()
}
}
impl std::ops::DerefMut for Registry {
fn deref_mut(&mut self) -> &mut Self::Target {
self.0.as_mut()
}
}
impl<T> From<T> for Registry
where
T: GraphRegistry + 'static,
{
fn from(value: T) -> Self {
Self(Box::new(value))
}
}