use meerkat_core::lifecycle::InputId;
use meerkat_core::types::SessionId;
use crate::accept::AcceptOutcome;
use crate::completion::CompletionHandle;
use crate::input::Input;
use crate::input_state::InputState;
use crate::runtime_state::RuntimeState;
use crate::traits::{ResetReport, RetireReport, RuntimeDriverError};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RuntimeMode {
V9Compliant,
}
#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
pub trait SessionServiceRuntimeExt: Send + Sync {
fn runtime_mode(&self) -> RuntimeMode;
async fn accept_input(
&self,
session_id: &SessionId,
input: Input,
) -> Result<AcceptOutcome, RuntimeDriverError>;
async fn accept_input_with_completion(
&self,
session_id: &SessionId,
input: Input,
) -> Result<(AcceptOutcome, Option<CompletionHandle>), RuntimeDriverError>;
async fn runtime_state(
&self,
session_id: &SessionId,
) -> Result<RuntimeState, RuntimeDriverError>;
async fn retire_runtime(
&self,
session_id: &SessionId,
) -> Result<RetireReport, RuntimeDriverError>;
async fn reset_runtime(
&self,
session_id: &SessionId,
) -> Result<ResetReport, RuntimeDriverError>;
async fn input_state(
&self,
session_id: &SessionId,
input_id: &InputId,
) -> Result<Option<InputState>, RuntimeDriverError>;
async fn list_active_inputs(
&self,
session_id: &SessionId,
) -> Result<Vec<InputId>, RuntimeDriverError>;
}
#[cfg(test)]
mod tests {
use super::*;
fn _assert_object_safe(_: &dyn SessionServiceRuntimeExt) {}
#[test]
fn runtime_mode_equality() {
assert_eq!(RuntimeMode::V9Compliant, RuntimeMode::V9Compliant);
}
}