1use super::{
4 StringError, filter,
5 project::Project as ProjectTrait,
6 task::{Priority, Task as TaskTrait},
7 task_patch::{PatchError, TaskPatch},
8};
9use async_trait::async_trait;
10use std::fmt::Debug;
11
12#[derive(Debug, Copy, Clone)]
13pub struct Capabilities {
14 pub create_task: bool,
15}
16
17#[async_trait]
18pub trait TaskProviderTrait {
19 async fn list(
20 &mut self,
21 project: Option<Box<dyn ProjectTrait>>,
22 f: &filter::Filter,
23 ) -> Result<Vec<Box<dyn TaskTrait>>, StringError>;
24 async fn create(&mut self, project_id: &str, tp: &TaskPatch) -> Result<(), StringError>;
25 async fn update(&mut self, patches: &[TaskPatch]) -> Vec<PatchError>;
26 async fn delete(&mut self, _t: &dyn TaskTrait) -> Result<(), StringError> {
27 unimplemented!()
28 }
29}
30
31#[async_trait]
32pub trait ProjectProviderTrait {
33 async fn list(&mut self) -> Result<Vec<Box<dyn ProjectTrait>>, StringError>;
34}
35
36#[async_trait]
37pub trait ProviderTrait: TaskProviderTrait + ProjectProviderTrait + Send + Sync + Debug {
38 fn name(&self) -> String;
39 fn type_name(&self) -> String;
40 async fn reload(&mut self);
41 fn capabilities(&self) -> Capabilities;
42 fn supported_priorities(&self) -> Vec<Priority> {
43 Priority::values()
44 }
45}