akribes_sdk/sub/
channels.rs1use std::sync::Arc;
2
3use crate::client::{AkribesClient, Inner};
4use crate::error::Result;
5use crate::models::*;
6
7#[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}