bangumi_api/module/revision/
service.rs1use anyhow::Result;
2use reqwest::Method;
3
4use crate::{common::model::BangumiClient, module::model::Paged};
5
6use super::model::{
7 RevisionCharacter, RevisionCommon, RevisionEpisode, RevisionPerson, RevisionSubject,
8};
9
10impl BangumiClient {
11 pub async fn get_revision_persons(
23 &self,
24 person_id: u32,
25 limit: Option<u32>,
26 offset: Option<u32>,
27 ) -> Result<Paged<RevisionCommon>> {
28 let url = format!("{}/v0/revisions/persons", self.base_path);
30
31 let mut request_builder = self.request_builder(Method::GET, &url);
33
34 request_builder = request_builder.query(&[("person_id", &person_id)]);
36 if let Some(ref param_value) = limit {
38 request_builder = request_builder.query(&[("limit", ¶m_value)]);
39 }
40 if let Some(ref param_value) = offset {
41 request_builder = request_builder.query(&[("offset", ¶m_value)]);
42 }
43
44 let res = self.request_send(request_builder).await?.json().await?;
46
47 Ok(res)
48 }
49
50 pub async fn get_revision_person(&self, revision_id: u32) -> Result<RevisionPerson> {
60 let url = format!("{}/v0/revisions/persons/{revision_id}", self.base_path);
62
63 let request_builder = self.request_builder(Method::GET, &url);
65
66 let res = self.request_send(request_builder).await?.json().await?;
68
69 Ok(res)
70 }
71
72 pub async fn get_revision_characters(
84 &self,
85 character_id: u32,
86 limit: Option<u32>,
87 offset: Option<u32>,
88 ) -> Result<Paged<RevisionCommon>> {
89 let url = format!("{}/v0/revisions/characters", self.base_path);
91
92 let mut request_builder = self.request_builder(Method::GET, &url);
94
95 request_builder = request_builder.query(&[("character_id", &character_id)]);
97 if let Some(ref param_value) = limit {
99 request_builder = request_builder.query(&[("limit", ¶m_value)]);
100 }
101 if let Some(ref param_value) = offset {
102 request_builder = request_builder.query(&[("offset", ¶m_value)]);
103 }
104
105 let res = self.request_send(request_builder).await?.json().await?;
107
108 Ok(res)
109 }
110
111 pub async fn get_revision_character(&self, revision_id: u32) -> Result<RevisionCharacter> {
121 let url = format!("{}/v0/revisions/characters/{revision_id}", self.base_path);
123
124 let request_builder = self.request_builder(Method::GET, &url);
126
127 let res = self.request_send(request_builder).await?.json().await?;
129
130 Ok(res)
131 }
132
133 pub async fn get_revision_subjects(
145 &self,
146 subject_id: u32,
147 limit: Option<u32>,
148 offset: Option<u32>,
149 ) -> Result<Paged<RevisionCommon>> {
150 let url = format!("{}/v0/revisions/subjects", self.base_path);
152
153 let mut request_builder = self.request_builder(Method::GET, &url);
155
156 request_builder = request_builder.query(&[("subject_id", &subject_id)]);
158 if let Some(ref param_value) = limit {
160 request_builder = request_builder.query(&[("limit", ¶m_value)]);
161 }
162 if let Some(ref param_value) = offset {
163 request_builder = request_builder.query(&[("offset", ¶m_value)]);
164 }
165 let res = self.request_send(request_builder).await?.json().await?;
167
168 Ok(res)
169 }
170
171 pub async fn get_revision_subject(&self, revision_id: u32) -> Result<RevisionSubject> {
181 let url = format!("{}/v0/revisions/subjects/{revision_id}", self.base_path);
183
184 let request_builder = self.request_builder(Method::GET, &url);
186
187 let res = self.request_send(request_builder).await?.json().await?;
189
190 Ok(res)
191 }
192
193 pub async fn get_revision_episodes(
205 &self,
206 episode_id: u32,
207 limit: Option<u32>,
208 offset: Option<u32>,
209 ) -> Result<Paged<RevisionCommon>> {
210 let url = format!("{}/v0/revisions/episodes", self.base_path);
212
213 let mut request_builder = self.request_builder(Method::GET, &url);
215
216 request_builder = request_builder.query(&[("episode_id", &episode_id)]);
218 if let Some(ref param_value) = limit {
220 request_builder = request_builder.query(&[("limit", ¶m_value)]);
221 }
222 if let Some(ref param_value) = offset {
223 request_builder = request_builder.query(&[("offset", ¶m_value)]);
224 }
225 let res = self.request_send(request_builder).await?.json().await?;
227
228 Ok(res)
229 }
230
231 pub async fn get_revision_episode(&self, revision_id: u32) -> Result<RevisionEpisode> {
241 let url = format!("{}/v0/revisions/episodes/{revision_id}", self.base_path);
243
244 let request_builder = self.request_builder(Method::GET, &url);
246
247 let res = self.request_send(request_builder).await?.json().await?;
249
250 Ok(res)
251 }
252}