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 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 fn get_stream_key(&self) -> impl Future<Output = Result<Response<StreamKey>, Error>> + Send;
28
29 fn get_stream_settings(
31 &self,
32 ) -> impl Future<Output = Result<Response<StreamSetting>, Error>> + Send;
33
34 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}