use async_trait::async_trait;
use parallax_core::{
ExecutionRequest, ExecutionResult, RestoreResult, RuntimeCapabilities, RuntimeKind,
RuntimeMetadata, RuntimeStatus,
};
use parallax_ir::PirDocument;
use parallax_security::SandboxPolicy;
use std::sync::Arc;
#[async_trait]
pub trait RuntimeAdapter: Send + Sync {
fn kind(&self) -> RuntimeKind;
fn metadata(&self) -> RuntimeMetadata;
fn capabilities(&self) -> RuntimeCapabilities;
async fn probe(&self) -> RuntimeStatus;
async fn execute(
&self,
request: ExecutionRequest,
policy: &SandboxPolicy,
) -> parallax_core::Result<ExecutionResult>;
async fn restore(
&self,
pir: &PirDocument,
policy: &SandboxPolicy,
) -> parallax_core::Result<RestoreResult>;
}
pub type BoxRuntimeAdapter = Arc<dyn RuntimeAdapter>;
pub type AdapterFactory = Arc<dyn Fn() -> BoxRuntimeAdapter + Send + Sync>;