twilio_async/
conference.rs

1use super::{encode_pairs, Execute, Twilio, TwilioErr, TwilioJson, TwilioRequest, TwilioResp};
2use async_trait::async_trait;
3use hyper::{self, Method};
4use serde::Deserialize;
5
6#[derive(Debug, Default)]
7pub struct Conference<'a> {
8    sid: &'a str,
9    status: Option<&'a str>,
10}
11
12const COMPLETED: &str = "completed";
13
14impl<'a> Conference<'a> {
15    pub fn new(sid: &'a str) -> Conference<'a> {
16        Conference { sid, status: None }
17    }
18}
19
20// GET ONE CONFERENCE
21#[derive(Debug)]
22pub struct GetConference<'a> {
23    pub conference: Conference<'a>,
24    pub client: &'a Twilio,
25}
26
27impl<'a> GetConference<'a> {
28    pub fn end(mut self) -> GetConference<'a> {
29        self.conference.status = Some(COMPLETED);
30        self
31    }
32}
33
34execute!(GetConference);
35
36#[async_trait]
37impl<'a> TwilioRequest for GetConference<'a> {
38    type Resp = ConferenceResp;
39
40    async fn run(&self) -> TwilioResp<TwilioJson<Self::Resp>> {
41        let url = format!("Conferences/{}.json", self.conference.sid);
42        match self.conference.status {
43            Some(status) => {
44                self.execute(
45                    Method::POST,
46                    url,
47                    Some(encode_pairs(&[("Status", status)]).unwrap()),
48                )
49                .await
50            }
51            None => self.execute(Method::GET, url, None).await,
52        }
53    }
54}
55
56// GET ALL CONFERENCES
57#[derive(Debug)]
58pub struct Conferences<'a> {
59    pub client: &'a Twilio,
60}
61
62execute!(Conferences);
63
64#[async_trait]
65impl<'a> TwilioRequest for Conferences<'a> {
66    type Resp = ListConferencesResp;
67
68    async fn run(&self) -> TwilioResp<TwilioJson<Self::Resp>> {
69        self.execute(Method::GET, "Conferences.json", None).await
70    }
71}
72
73#[derive(Deserialize, Debug)]
74pub struct ListConferencesResp {
75    pub conferences: Vec<ConferenceResp>,
76    pub end: usize,
77    pub next_page_uri: Option<String>,
78    pub previous_page_uri: Option<String>,
79    pub uri: String,
80    pub start: usize,
81    pub page: usize,
82    pub page_size: usize,
83}
84
85#[derive(Deserialize, Debug)]
86pub struct ConferenceResp {
87    pub account_sid: String,
88    pub date_created: Option<String>,
89    pub date_updated: String,
90    pub friendly_name: String,
91    pub region: String,
92    pub sid: String,
93    pub status: String,
94    pub uri: String,
95}