ephemeris_forge_github/reconcile/
repository.rs1use 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}