1use std::sync::Arc;
6
7use async_trait::async_trait;
8use solti_core::SupervisorApi;
9use solti_model::{Task, TaskId, TaskPage, TaskQuery, TaskRun, TaskSpec};
10
11use crate::error::ApiError;
12use crate::handler::ApiHandler;
13
14pub struct SupervisorApiAdapter {
23 supervisor: Arc<SupervisorApi>,
24}
25
26impl SupervisorApiAdapter {
27 pub fn new(supervisor: Arc<SupervisorApi>) -> Self {
29 Self { supervisor }
30 }
31}
32
33#[async_trait]
34impl ApiHandler for SupervisorApiAdapter {
35 async fn submit_task(&self, spec: TaskSpec) -> Result<TaskId, ApiError> {
36 self.supervisor.submit(&spec).await.map_err(ApiError::from)
37 }
38
39 async fn get_task_status(&self, id: &TaskId) -> Result<Option<Task>, ApiError> {
40 Ok(self.supervisor.get_task(id))
41 }
42
43 async fn query_tasks(&self, query: TaskQuery) -> Result<TaskPage<Task>, ApiError> {
44 Ok(self.supervisor.query_tasks(&query))
45 }
46
47 async fn list_task_runs(&self, id: &TaskId) -> Result<Vec<TaskRun>, ApiError> {
48 Ok(self.supervisor.list_task_runs(id))
49 }
50
51 async fn delete_task(&self, id: &TaskId) -> Result<(), ApiError> {
52 self.supervisor
53 .delete_task(id)
54 .await
55 .map_err(ApiError::from)
56 }
57}