Skip to main content

MutationBackend

Trait MutationBackend 

Source
pub trait MutationBackend: Send + Sync {
Show 25 methods // Required methods fn create_task<'life0, 'async_trait>( &'life0 self, request: CreateTaskRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<ThingsId>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn bulk_create_tasks<'life0, 'async_trait>( &'life0 self, request: BulkCreateTasksRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_task<'life0, 'async_trait>( &'life0 self, request: UpdateTaskRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn complete_task<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn uncomplete_task<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn delete_task<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, child_handling: DeleteChildHandling, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn bulk_delete<'life0, 'async_trait>( &'life0 self, request: BulkDeleteRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn bulk_move<'life0, 'async_trait>( &'life0 self, request: BulkMoveRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn bulk_update_dates<'life0, 'async_trait>( &'life0 self, request: BulkUpdateDatesRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn bulk_complete<'life0, 'async_trait>( &'life0 self, request: BulkCompleteRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn create_project<'life0, 'async_trait>( &'life0 self, request: CreateProjectRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<ThingsId>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_project<'life0, 'async_trait>( &'life0 self, request: UpdateProjectRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn complete_project<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, child_handling: ProjectChildHandling, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn delete_project<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, child_handling: ProjectChildHandling, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_area<'life0, 'async_trait>( &'life0 self, request: CreateAreaRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<ThingsId>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_area<'life0, 'async_trait>( &'life0 self, request: UpdateAreaRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn delete_area<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_tag<'life0, 'async_trait>( &'life0 self, request: CreateTagRequest, force: bool, ) -> Pin<Box<dyn Future<Output = ThingsResult<TagCreationResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn update_tag<'life0, 'async_trait>( &'life0 self, request: UpdateTagRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn delete_tag<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, remove_from_tasks: bool, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn merge_tags<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, source_id: &'life1 ThingsId, target_id: &'life2 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn add_tag_to_task<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, task_id: &'life1 ThingsId, tag_title: &'life2 str, ) -> Pin<Box<dyn Future<Output = ThingsResult<TagAssignmentResult>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn remove_tag_from_task<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, task_id: &'life1 ThingsId, tag_title: &'life2 str, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait; fn set_task_tags<'life0, 'life1, 'async_trait>( &'life0 self, task_id: &'life1 ThingsId, tag_titles: Vec<String>, ) -> Pin<Box<dyn Future<Output = ThingsResult<Vec<TagMatch>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; // Provided method fn kind(&self) -> &'static str { ... }
}
Expand description

Abstraction over every Things 3 mutation operation exposed as an MCP tool.

All implementations must be Send + Sync so the server can share them across async tasks via Arc<dyn MutationBackend>.

Required Methods§

Source

fn create_task<'life0, 'async_trait>( &'life0 self, request: CreateTaskRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<ThingsId>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn bulk_create_tasks<'life0, 'async_trait>( &'life0 self, request: BulkCreateTasksRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create multiple tasks in one call. Best-effort and non-atomic — per-item failures are reported via BulkOperationResult.

Source

fn update_task<'life0, 'async_trait>( &'life0 self, request: UpdateTaskRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn complete_task<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn uncomplete_task<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn delete_task<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, child_handling: DeleteChildHandling, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn bulk_delete<'life0, 'async_trait>( &'life0 self, request: BulkDeleteRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn bulk_move<'life0, 'async_trait>( &'life0 self, request: BulkMoveRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn bulk_update_dates<'life0, 'async_trait>( &'life0 self, request: BulkUpdateDatesRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn bulk_complete<'life0, 'async_trait>( &'life0 self, request: BulkCompleteRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<BulkOperationResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn create_project<'life0, 'async_trait>( &'life0 self, request: CreateProjectRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<ThingsId>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn update_project<'life0, 'async_trait>( &'life0 self, request: UpdateProjectRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn complete_project<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, child_handling: ProjectChildHandling, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn delete_project<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, child_handling: ProjectChildHandling, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn create_area<'life0, 'async_trait>( &'life0 self, request: CreateAreaRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<ThingsId>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn update_area<'life0, 'async_trait>( &'life0 self, request: UpdateAreaRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn delete_area<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn create_tag<'life0, 'async_trait>( &'life0 self, request: CreateTagRequest, force: bool, ) -> Pin<Box<dyn Future<Output = ThingsResult<TagCreationResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create a tag. When force is true, skip duplicate / similarity checks (mirrors the legacy create_tag_force path); otherwise run the smart flow that may return Existing or SimilarFound.

Source

fn update_tag<'life0, 'async_trait>( &'life0 self, request: UpdateTagRequest, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn delete_tag<'life0, 'life1, 'async_trait>( &'life0 self, id: &'life1 ThingsId, remove_from_tasks: bool, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn merge_tags<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, source_id: &'life1 ThingsId, target_id: &'life2 ThingsId, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn add_tag_to_task<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, task_id: &'life1 ThingsId, tag_title: &'life2 str, ) -> Pin<Box<dyn Future<Output = ThingsResult<TagAssignmentResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn remove_tag_from_task<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, task_id: &'life1 ThingsId, tag_title: &'life2 str, ) -> Pin<Box<dyn Future<Output = ThingsResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source

fn set_task_tags<'life0, 'life1, 'async_trait>( &'life0 self, task_id: &'life1 ThingsId, tag_titles: Vec<String>, ) -> Pin<Box<dyn Future<Output = ThingsResult<Vec<TagMatch>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Provided Methods§

Source

fn kind(&self) -> &'static str

Static identifier for the backend implementation. Used by the MCP server to expose which backend is in use ("sqlx" direct-DB vs. "applescript" CulturedCode-supported) without an Any downcast.

Implementors§