| use crate::RepositoryClient; |
| use async_trait::async_trait; |
| use octocrab::Octocrab; |
| use std::error::Error; |
| use std::sync::Arc; |
| |
| pub struct Client { |
| client: Arc<Octocrab>, |
| } |
| |
| impl Client { |
| pub fn new() -> Self { |
| Client { |
| client: octocrab::instance(), |
| } |
| } |
| } |
| |
| #[async_trait] |
| impl RepositoryClient for Client { |
| async fn get_latest_commit( |
| &self, |
| repository: &crate::repository::Repository, |
| branch: &str, |
| ) -> Result<String, Box<dyn Error>> { |
| let commits = self |
| .client |
| .repos(repository.owner.clone(), repository.name.clone()) |
| .list_commits() |
| .branch(branch) |
| .send() |
| .await?; |
| |
| Ok(commits.items[0].sha.clone()) |
| } |
| } |