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