ephemeris_forge_forgejo/api/http/
repository.rs1use ephemeris_forge::{RepoRef, encode};
2use facet::Facet;
3use reqwest::Method;
4
5use crate::api::HttpApi;
6use crate::api::error::ForgeError;
7use crate::api::model::Repository;
8use crate::api::operations::RepositoryApi;
9use crate::api::request::EditRepoOption;
10
11#[derive(Facet)]
12struct TopicNames {
13 topics: Vec<String>,
14}
15
16impl RepositoryApi for HttpApi {
17 async fn repository(&self, repo: &RepoRef) -> Result<Repository, ForgeError> {
18 let path = repo.path("");
19 Ok(self.http.json(Method::GET, &path, None).await?)
20 }
21
22 async fn patch_repository(
23 &self,
24 repo: &RepoRef,
25 body: &EditRepoOption,
26 ) -> Result<(), ForgeError> {
27 let path = repo.path("");
28 let body = encode(body);
29 self.send_write(Method::PATCH, &path, Some(&body)).await
30 }
31
32 async fn topics(&self, repo: &RepoRef) -> Result<Vec<String>, ForgeError> {
33 let path = repo.path("topics");
34 let names: TopicNames = self.http.json(Method::GET, &path, None).await?;
35 Ok(names.topics)
36 }
37
38 async fn replace_topics(&self, repo: &RepoRef, topics: &[String]) -> Result<(), ForgeError> {
39 let path = repo.path("topics");
40 let body = encode(&TopicNames {
41 topics: topics.to_vec(),
42 });
43 self.send_write(Method::PUT, &path, Some(&body)).await
44 }
45}