Skip to main content

mesa_dev/client/
sync.rs

1use crate::low_level::apis::{repos_api, Error};
2use crate::models;
3
4use super::RepoClient;
5
6/// Client for sync operations (`/{org}/{repo}/sync`).
7#[derive(Clone, Debug)]
8pub struct SyncClient<'a> {
9    pub(super) repo: &'a RepoClient<'a>,
10}
11
12impl SyncClient<'_> {
13    /// Get sync status with upstream.
14    ///
15    /// # Errors
16    ///
17    /// Returns an error if the API request fails.
18    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
19    pub async fn status(
20        &self,
21    ) -> Result<models::GetByOrgByRepoSync200Response, Error<repos_api::GetByOrgByRepoSyncError>>
22    {
23        repos_api::get_by_org_by_repo_sync(self.repo.org.config, self.repo.org.org, self.repo.repo)
24            .await
25    }
26
27    /// Trigger a sync from the upstream repository (waits for completion).
28    ///
29    /// # Errors
30    ///
31    /// Returns an error if the API request fails.
32    #[tracing::instrument(skip(self), fields(org = self.repo.org.org, repo = self.repo.repo), err(Debug))]
33    pub async fn trigger(
34        &self,
35    ) -> Result<models::DeleteByOrgApiKeysById200Response, Error<repos_api::PostByOrgByRepoSyncError>>
36    {
37        repos_api::post_by_org_by_repo_sync(self.repo.org.config, self.repo.org.org, self.repo.repo)
38            .await
39    }
40}