pub struct GitHubBackend { /* private fields */ }Implementations§
Trait Implementations§
Source§impl ExternalBackend for GitHubBackend
impl ExternalBackend for GitHubBackend
Source§fn sync_to_project<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
status: Status,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn sync_to_project<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
status: Status,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Sync a task to the GitHub Project board (if configured).
Called when a task is first ingested to ensure it appears on the
project board immediately, not just when status changes later.
Returns Some(node_id) if the item was added to the project board.
Source§fn update_status<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
status: Status,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_status<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
status: Status,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Override default update_status to add project board sync after label update.
Source§fn list_all_tasks<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_all_tasks<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List all tasks (open and closed) in a single API call.
This fetches all issues with state=all and filters by status labels locally.
More efficient than making 7 separate calls to list_by_status.
Source§fn list_routable<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_routable<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
List open issues that have no status:* label (unprocessed) or have status:new.
Source§fn list_active_open_issues<'life0, 'life1, 'async_trait>(
&'life0 self,
since: Option<&'life1 str>,
) -> Pin<Box<dyn Future<Output = Result<Vec<(ExternalTask, Option<Status>)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_active_open_issues<'life0, 'life1, 'async_trait>(
&'life0 self,
since: Option<&'life1 str>,
) -> Pin<Box<dyn Future<Output = Result<Vec<(ExternalTask, Option<Status>)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Single-call override: fetches all open issues once and partitions by status label locally,
replacing the 1 (list_routable) + 5 (list_by_status per active status) fan-out with a
single list_all_open_issues request.
When since is Some(ts), uses GitHub’s ?since filter for efficiency.
Source§fn set_labels<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
labels: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn set_labels<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
labels: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Additive: uses POST (gh.add_labels), so existing labels like bug, priority:high are preserved.
Source§fn create_task<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
title: &'life1 str,
body: &'life2 str,
labels: &'life3 [String],
) -> Pin<Box<dyn Future<Output = Result<ExternalId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn create_task<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
title: &'life1 str,
body: &'life2 str,
labels: &'life3 [String],
) -> Pin<Box<dyn Future<Output = Result<ExternalId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Source§fn get_task<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<ExternalTask>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_task<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<ExternalTask>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn ensure_status_label<'life0, 'life1, 'async_trait>(
&'life0 self,
label: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn ensure_status_label<'life0, 'life1, 'async_trait>(
&'life0 self,
label: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn reconcile_project_statuses<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn reconcile_project_statuses<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn sync_estimate_to_project<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
estimate: u8,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn sync_estimate_to_project<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
estimate: u8,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn get_project_item_estimates<'life0, 'life1, 'async_trait>(
&'life0 self,
issue_node_ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, u8>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_project_item_estimates<'life0, 'life1, 'async_trait>(
&'life0 self,
issue_node_ids: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, u8>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_by_status<'life0, 'async_trait>(
&'life0 self,
status: Status,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_by_status<'life0, 'async_trait>(
&'life0 self,
status: Status,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn list_reconciliation_candidates<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_reconciliation_candidates<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalTask>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn post_comment<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
body: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn post_comment<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
body: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn remove_label<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
label: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn remove_label<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
label: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn get_sub_issues<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalId>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_sub_issues<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<Vec<ExternalId>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn create_sub_task<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
parent_id: &'life1 ExternalId,
title: &'life2 str,
body: &'life3 str,
labels: &'life4 [String],
) -> Pin<Box<dyn Future<Output = Result<ExternalId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn create_sub_task<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
parent_id: &'life1 ExternalId,
title: &'life2 str,
body: &'life3 str,
labels: &'life4 [String],
) -> Pin<Box<dyn Future<Output = Result<ExternalId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Source§fn has_open_issue_with_title<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
title: &'life1 str,
label: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn has_open_issue_with_title<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
title: &'life1 str,
label: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn health_check<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn health_check<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn is_pr_merged<'life0, 'life1, 'async_trait>(
&'life0 self,
branch: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_pr_merged<'life0, 'life1, 'async_trait>(
&'life0 self,
branch: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn batch_is_pr_merged<'life0, 'life1, 'async_trait>(
&'life0 self,
branches: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, bool>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn batch_is_pr_merged<'life0, 'life1, 'async_trait>(
&'life0 self,
branches: &'life1 [String],
) -> Pin<Box<dyn Future<Output = Result<HashMap<String, bool>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn get_authenticated_user<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_authenticated_user<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Option<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn get_mentions<'life0, 'life1, 'async_trait>(
&'life0 self,
since: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<Mention>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_mentions<'life0, 'life1, 'async_trait>(
&'life0 self,
since: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<Mention>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn list_issue_comments<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Mention>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_issue_comments<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<Vec<Mention>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn acknowledge_issue<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn acknowledge_issue<'life0, 'life1, 'async_trait>(
&'life0 self,
id: &'life1 ExternalId,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn acknowledge_mention<'life0, 'life1, 'async_trait>(
&'life0 self,
comment_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn acknowledge_mention<'life0, 'life1, 'async_trait>(
&'life0 self,
comment_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl !Freeze for GitHubBackend
impl !RefUnwindSafe for GitHubBackend
impl !UnwindSafe for GitHubBackend
impl Send for GitHubBackend
impl Sync for GitHubBackend
impl Unpin for GitHubBackend
impl UnsafeUnpin for GitHubBackend
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more