1pub mod graphql_tool;
7pub mod linear;
8
9use async_trait::async_trait;
10use symphony_core::Issue;
11
12#[derive(Debug, thiserror::Error)]
14pub enum TrackerError {
15 #[error("unsupported_tracker_kind: {0}")]
16 UnsupportedKind(String),
17 #[error("missing_tracker_api_key")]
18 MissingApiKey,
19 #[error("missing_tracker_project_slug")]
20 MissingProjectSlug,
21 #[error("linear_api_request: {0}")]
22 ApiRequest(String),
23 #[error("linear_api_status: {status} {body}")]
24 ApiStatus { status: u16, body: String },
25 #[error("linear_graphql_errors: {0}")]
26 GraphqlErrors(String),
27 #[error("linear_unknown_payload: {0}")]
28 UnknownPayload(String),
29 #[error("linear_missing_end_cursor")]
30 MissingEndCursor,
31}
32
33#[async_trait]
35pub trait TrackerClient: Send + Sync {
36 async fn fetch_candidate_issues(&self) -> Result<Vec<Issue>, TrackerError>;
38
39 async fn fetch_issues_by_states(&self, states: &[String]) -> Result<Vec<Issue>, TrackerError>;
41
42 async fn fetch_issue_states_by_ids(
44 &self,
45 issue_ids: &[String],
46 ) -> Result<Vec<Issue>, TrackerError>;
47}