Skip to main content

ephemeris_forge_github/api/http/
repository.rs

1use ephemeris_forge::{RepoRef, encode};
2use reqwest::Method;
3
4use crate::api::HttpApi;
5use crate::api::error::ForgeError;
6use crate::api::model::{ImmutableReleases, Repository};
7use crate::api::operations::RepositoryApi;
8use crate::api::request::{RepositoryPatch, TopicsBody};
9
10impl RepositoryApi for HttpApi {
11    async fn patch_repository(
12        &self,
13        repository: &RepoRef,
14        patch: &RepositoryPatch,
15    ) -> Result<(), ForgeError> {
16        self.empty(Method::PATCH, &repository.path(""), Some(encode(patch)))
17            .await
18    }
19
20    async fn replace_topics(
21        &self,
22        repository: &RepoRef,
23        topics: &[String],
24    ) -> Result<(), ForgeError> {
25        self.empty(
26            Method::PUT,
27            &repository.path("topics"),
28            Some(encode(&TopicsBody { names: topics })),
29        )
30        .await
31    }
32
33    async fn immutable_releases(
34        &self,
35        repository: &RepoRef,
36    ) -> Result<Option<ImmutableReleases>, ForgeError> {
37        self.optional(&repository.path("immutable-releases")).await
38    }
39
40    async fn set_immutable_releases(
41        &self,
42        repository: &RepoRef,
43        enabled: bool,
44    ) -> Result<(), ForgeError> {
45        self.put_switch(repository, "immutable-releases", enabled)
46            .await
47    }
48
49    async fn repository(&self, repository: &RepoRef) -> Result<Repository, ForgeError> {
50        self.send(Method::GET, &repository.path(""), None).await
51    }
52}