twilio_async/
conference.rs1use 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#[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#[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}