use async_trait::async_trait;
use crate::ci::error::Result;
use crate::ci::model::{
Capabilities, CiRun, JobId, LogChunk, PullRequest, RunDetail, RunExtras, RunId,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ProviderKind {
GitHub,
GitLab,
}
#[async_trait]
pub trait CiProvider: Send {
fn kind(&self) -> ProviderKind;
fn capabilities(&self) -> Capabilities;
async fn list_runs(&self, limit: usize) -> Result<Vec<CiRun>>;
async fn run_detail(&self, run: &RunId) -> Result<RunDetail>;
async fn job_log(&self, run: &RunId, job: &JobId, offset: u64) -> Result<LogChunk>;
async fn run_extras(&self, run: &RunId) -> Result<RunExtras>;
async fn current_pr(&self) -> Result<Option<PullRequest>>;
}