Skip to main content

tatuin_core/
provider.rs

1// SPDX-License-Identifier: MIT
2
3use 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}