things3_core/mutations/
mod.rs1use async_trait::async_trait;
23
24use crate::error::Result as ThingsResult;
25use crate::models::{
26 BulkCompleteRequest, BulkCreateTasksRequest, BulkDeleteRequest, BulkMoveRequest,
27 BulkOperationResult, BulkUpdateDatesRequest, CreateAreaRequest, CreateProjectRequest,
28 CreateTagRequest, CreateTaskRequest, DeleteChildHandling, ProjectChildHandling,
29 TagAssignmentResult, TagCreationResult, TagMatch, ThingsId, UpdateAreaRequest,
30 UpdateProjectRequest, UpdateTagRequest, UpdateTaskRequest,
31};
32
33mod sqlx;
34pub use sqlx::SqlxBackend;
35
36#[cfg(target_os = "macos")]
37mod applescript;
38#[cfg(target_os = "macos")]
39pub use applescript::AppleScriptBackend;
40
41#[async_trait]
46pub trait MutationBackend: Send + Sync {
47 fn kind(&self) -> &'static str {
51 "unknown"
52 }
53
54 async fn create_task(&self, request: CreateTaskRequest) -> ThingsResult<ThingsId>;
57 async fn bulk_create_tasks(
60 &self,
61 request: BulkCreateTasksRequest,
62 ) -> ThingsResult<BulkOperationResult>;
63 async fn update_task(&self, request: UpdateTaskRequest) -> ThingsResult<()>;
64 async fn complete_task(&self, id: &ThingsId) -> ThingsResult<()>;
65 async fn uncomplete_task(&self, id: &ThingsId) -> ThingsResult<()>;
66 async fn delete_task(
67 &self,
68 id: &ThingsId,
69 child_handling: DeleteChildHandling,
70 ) -> ThingsResult<()>;
71 async fn bulk_delete(&self, request: BulkDeleteRequest) -> ThingsResult<BulkOperationResult>;
72 async fn bulk_move(&self, request: BulkMoveRequest) -> ThingsResult<BulkOperationResult>;
73 async fn bulk_update_dates(
74 &self,
75 request: BulkUpdateDatesRequest,
76 ) -> ThingsResult<BulkOperationResult>;
77 async fn bulk_complete(
78 &self,
79 request: BulkCompleteRequest,
80 ) -> ThingsResult<BulkOperationResult>;
81
82 async fn create_project(&self, request: CreateProjectRequest) -> ThingsResult<ThingsId>;
85 async fn update_project(&self, request: UpdateProjectRequest) -> ThingsResult<()>;
86 async fn complete_project(
87 &self,
88 id: &ThingsId,
89 child_handling: ProjectChildHandling,
90 ) -> ThingsResult<()>;
91 async fn delete_project(
92 &self,
93 id: &ThingsId,
94 child_handling: ProjectChildHandling,
95 ) -> ThingsResult<()>;
96
97 async fn create_area(&self, request: CreateAreaRequest) -> ThingsResult<ThingsId>;
100 async fn update_area(&self, request: UpdateAreaRequest) -> ThingsResult<()>;
101 async fn delete_area(&self, id: &ThingsId) -> ThingsResult<()>;
102
103 async fn create_tag(
109 &self,
110 request: CreateTagRequest,
111 force: bool,
112 ) -> ThingsResult<TagCreationResult>;
113 async fn update_tag(&self, request: UpdateTagRequest) -> ThingsResult<()>;
114 async fn delete_tag(&self, id: &ThingsId, remove_from_tasks: bool) -> ThingsResult<()>;
115 async fn merge_tags(&self, source_id: &ThingsId, target_id: &ThingsId) -> ThingsResult<()>;
116 async fn add_tag_to_task(
117 &self,
118 task_id: &ThingsId,
119 tag_title: &str,
120 ) -> ThingsResult<TagAssignmentResult>;
121 async fn remove_tag_from_task(&self, task_id: &ThingsId, tag_title: &str) -> ThingsResult<()>;
122 async fn set_task_tags(
123 &self,
124 task_id: &ThingsId,
125 tag_titles: Vec<String>,
126 ) -> ThingsResult<Vec<TagMatch>>;
127}