gitea_sdk/api/user/
starred.rs1use build_it::Builder;
2use reqwest::StatusCode;
3use serde::Serialize;
4
5use crate::{error::Result, model::repos::Repository, Client};
6
7#[derive(Default, Debug, Clone, Serialize, Builder)]
8pub struct ListStarredBuilder {
9 page: Option<i64>,
11 limit: Option<i64>,
13}
14
15#[derive(Debug, Clone)]
16pub struct StarRepoBuilder {
17 owner: String,
18 repo: String,
19}
20
21#[derive(Debug, Clone)]
22pub struct UnstarRepoBuilder {
23 owner: String,
24 repo: String,
25}
26
27#[derive(Debug, Clone)]
28pub struct IsStarredBuilder {
29 owner: String,
30 repo: String,
31}
32
33impl ListStarredBuilder {
34 pub fn new() -> Self {
35 Self::default()
36 }
37
38 pub async fn send(&self, client: &Client) -> Result<Vec<Repository>> {
40 let req = client.get("/user/starred").query(self).build()?;
41 let res = client.make_request(req).await?;
42 client.parse_response(res).await
43 }
44}
45
46impl StarRepoBuilder {
47 pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
48 Self {
49 owner: owner.to_string(),
50 repo: repo.to_string(),
51 }
52 }
53
54 pub async fn send(&self, client: &Client) -> Result<()> {
56 let Self { owner, repo } = self;
57 let req = client
58 .put(format!("/user/starred/{owner}/{repo}"))
59 .build()?;
60 let _ = client.make_request(req).await?;
61 Ok(())
62 }
63}
64
65impl UnstarRepoBuilder {
66 pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
67 Self {
68 owner: owner.to_string(),
69 repo: repo.to_string(),
70 }
71 }
72
73 pub async fn send(&self, client: &Client) -> Result<()> {
75 let Self { owner, repo } = self;
76 let req = client
77 .delete(format!("/user/starred/{owner}/{repo}"))
78 .build()?;
79 let _ = client.make_request(req).await?;
80 Ok(())
81 }
82}
83
84impl IsStarredBuilder {
85 pub fn new(owner: impl ToString, repo: impl ToString) -> Self {
86 Self {
87 owner: owner.to_string(),
88 repo: repo.to_string(),
89 }
90 }
91
92 pub async fn send(&self, client: &Client) -> Result<bool> {
94 let Self { owner, repo } = self;
95 let req = client
96 .get(format!("/user/starred/{owner}/{repo}"))
97 .build()?;
98 match client.make_request(req).await {
99 Ok(_) => Ok(true),
100 Err(e) => {
101 if e.status_code == StatusCode::NOT_FOUND {
102 Ok(false)
103 } else {
104 Err(e)
105 }
106 }
107 }
108 }
109}