use async_trait::async_trait;
use crate::RunAgentTurnParams;
use crate::agent::agent_turn::RunAgentTurnError;
#[async_trait]
pub trait TurnRunner: Send + Sync {
async fn run(&self, params: RunAgentTurnParams<'_>) -> Result<(), RunAgentTurnError>;
}
#[derive(Debug, Default, Clone, Copy)]
pub struct DefaultTurnRunner;
#[async_trait]
impl TurnRunner for DefaultTurnRunner {
async fn run(&self, params: RunAgentTurnParams<'_>) -> Result<(), RunAgentTurnError> {
crate::run_agent_turn(params).await
}
}
#[must_use]
pub fn default_turn_runner() -> std::sync::Arc<dyn TurnRunner> {
std::sync::Arc::new(DefaultTurnRunner)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_turn_runner_is_object_safe_send_sync() {
let r = default_turn_runner();
fn assert_bounds(_: &(dyn TurnRunner + Send + Sync)) {}
assert_bounds(r.as_ref());
}
}