Skip to main content

akribes_sdk/sub/
channels.rs

1use std::sync::Arc;
2
3use crate::client::{AkribesClient, Inner};
4use crate::error::Result;
5use crate::models::*;
6
7/// Sub-client for script channels. Obtained via [`AkribesClient::channels()`].
8#[derive(Clone, Debug)]
9pub struct ChannelsClient {
10    pub(crate) inner: Arc<Inner>,
11    pub(crate) project_id: i64,
12}
13
14impl ChannelsClient {
15    pub(crate) fn new(inner: Arc<Inner>, project_id: i64) -> Self {
16        Self { inner, project_id }
17    }
18
19    fn c(&self) -> AkribesClient {
20        AkribesClient {
21            inner: Arc::clone(&self.inner),
22        }
23    }
24
25    fn script_url(&self, name: &str) -> String {
26        format!(
27            "{}/projects/{}/scripts/{}",
28            self.inner.base_url,
29            self.project_id,
30            urlencoding::encode(name)
31        )
32    }
33
34    pub async fn list(&self, script_name: &str) -> Result<Vec<ScriptChannel>> {
35        let url = format!("{}/channels", self.script_url(script_name));
36        self.c().get_list(&url).await
37    }
38
39    pub async fn create(&self, script_name: &str, channel_name: &str) -> Result<ScriptChannel> {
40        let url = format!("{}/channels", self.script_url(script_name));
41        self.c()
42            .post(&url, &CreateChannelRequest { name: channel_name })
43            .await
44    }
45
46    pub async fn delete(&self, script_name: &str, channel_name: &str) -> Result<()> {
47        let url = format!(
48            "{}/channels/{}",
49            self.script_url(script_name),
50            urlencoding::encode(channel_name)
51        );
52        self.c().delete(&url).await?;
53        Ok(())
54    }
55
56    pub async fn move_to(
57        &self,
58        script_name: &str,
59        channel_name: &str,
60        version_id: i64,
61        force: bool,
62    ) -> Result<()> {
63        let url = format!(
64            "{}/channels/{}",
65            self.script_url(script_name),
66            urlencoding::encode(channel_name)
67        );
68        self.c()
69            .patch_empty(
70                &url,
71                &MoveChannelRequest {
72                    version_id,
73                    force: if force { Some(true) } else { None },
74                },
75            )
76            .await
77    }
78}