Skip to main content

ephemeris_forge_github/reconcile/
repository.rs

1use ephemeris_forge::RepoRef;
2
3use super::Client;
4use crate::api::request::RepositoryPatch;
5use crate::api::{Api, ForgeError};
6use crate::operation::repository::Operation;
7use crate::{Live, Repository};
8
9impl<A: Api> Client<A> {
10    pub(super) async fn read_repository(
11        &self,
12        repository: &RepoRef,
13        config: &Repository,
14        live: &mut Live,
15    ) -> Result<(), ForgeError> {
16        live.repository = self.api.repository(repository).await?;
17        if config.immutable_releases.is_some() {
18            live.immutable_releases = self.api.immutable_releases(repository).await?;
19        }
20        Ok(())
21    }
22
23    pub(super) async fn apply_repository(
24        &self,
25        repository: &RepoRef,
26        operation: &Operation,
27    ) -> Result<(), ForgeError> {
28        match operation {
29            Operation::PatchRepository(patch) => self.api.patch_repository(repository, patch).await,
30            Operation::ReplaceTopics(topics) => self.api.replace_topics(repository, topics).await,
31            Operation::SetImmutableReleases(enabled) => {
32                self.api.set_immutable_releases(repository, *enabled).await
33            }
34            Operation::SetArchived(archived) => {
35                let patch = RepositoryPatch {
36                    archived: Some(*archived),
37                    ..RepositoryPatch::default()
38                };
39                self.api.patch_repository(repository, &patch).await
40            }
41        }
42    }
43}