Skip to main content

tongbal_api/live/
mod.rs

1mod builder;
2mod response;
3mod types;
4
5pub use builder::SetStreamSetting;
6pub use response::{LiveListResponse, StreamKey, StreamSetting};
7pub use types::Live;
8
9use std::future::Future;
10
11use crate::{
12    AppClient, BaseClient, Error, Response, UserClient,
13    types::constants::{LIVES, SETTING, SIZE, STREAMS},
14};
15
16pub trait AppLiveAPI: BaseClient {
17    /// See <https://chzzk.gitbook.io/chzzk/chzzk-api/live#undefined>
18    fn get_live_list(
19        &self,
20        size: Option<u64>,
21        next: Option<String>,
22    ) -> impl Future<Output = Result<Response<LiveListResponse>, Error>> + Send;
23}
24
25pub trait UserLiveAPI: BaseClient {
26    /// See <https://chzzk.gitbook.io/chzzk/chzzk-api/live#undefined-1>
27    fn get_stream_key(&self) -> impl Future<Output = Result<Response<StreamKey>, Error>> + Send;
28
29    /// See <https://chzzk.gitbook.io/chzzk/chzzk-api/live#undefined-2>
30    fn get_stream_settings(
31        &self,
32    ) -> impl Future<Output = Result<Response<StreamSetting>, Error>> + Send;
33
34    /// See <https://chzzk.gitbook.io/chzzk/chzzk-api/live#undefined-3>
35    fn set_stream_settings<'a>(&'a self) -> SetStreamSetting<'a>;
36}
37
38impl AppLiveAPI for AppClient {
39    async fn get_live_list(
40        &self,
41        size: Option<u64>,
42        next: Option<String>,
43    ) -> Result<Response<LiveListResponse>, Error> {
44        let mut url = self.base_url();
45
46        url.path_segments_mut().unwrap().push(LIVES);
47
48        if let Some(size) = size {
49            url.query_pairs_mut().append_pair(SIZE, &size.to_string());
50        }
51        if let Some(next) = next {
52            url.query_pairs_mut().append_pair("next", &next);
53        }
54
55        crate::client::json(self.http_client().get(url)).await
56    }
57}
58
59impl UserLiveAPI for UserClient {
60    async fn get_stream_key(&self) -> Result<Response<StreamKey>, Error> {
61        let mut url = self.base_url();
62        url.path_segments_mut().unwrap().extend([STREAMS, "key"]);
63        crate::client::json(self.http_client().get(url)).await
64    }
65
66    async fn get_stream_settings(&self) -> Result<Response<StreamSetting>, Error> {
67        let mut url = self.base_url();
68        url.path_segments_mut().unwrap().extend([LIVES, SETTING]);
69        crate::client::json(self.http_client().get(url)).await
70    }
71
72    fn set_stream_settings<'a>(&'a self) -> SetStreamSetting<'a> {
73        SetStreamSetting::new(self)
74    }
75}