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
mod dial; pub mod error; mod gather; mod hangup; mod msg; mod play; mod redirect; mod response; mod say; pub use crate::{ dial::*, error::*, gather::*, hangup::*, msg::*, play::*, redirect::*, response::*, say::*, }; use std::io::Write; use xml::writer::EventWriter; pub trait Twiml { fn write<W: Write>(&self, w: &mut EventWriter<W>) -> TwimlResult<()>; fn build(&self) -> TwimlResult<String>; } #[derive(Debug)] pub enum Method { Get, Post, } impl Method { fn to_str(&self) -> &str { match *self { Method::Get => "GET", Method::Post => "POST", } } } #[cfg(test)] mod tests { use super::*; #[test] fn twiml_response() { let resp = Response::new() .say("Hello World") .play("https://api.twilio.com/Cowbell.mp3") .build(); let s = "<Response><Say voice=\"man\" language=\"en\" loop=\"1\">Hello World</Say><Play loop=\"1\">https://api.twilio.com/Cowbell.mp3</Play></Response>"; assert_eq!(resp.unwrap(), s.to_string()); } #[test] fn twiml_resp_build() { let resp = Response::new() .say(Say::new("Hello World").lang("de").voice(Voice::alice)) .play("https://api.twilio.com/Cowbell.mp3") .build(); let s = "<Response><Say voice=\"alice\" language=\"de\" loop=\"1\">Hello World</Say><Play loop=\"1\">https://api.twilio.com/Cowbell.mp3</Play></Response>"; assert_eq!(resp.unwrap(), s.to_string()); } #[test] fn twiml_say() { let say = Say::new("Hello World") .lang("de") .voice(Voice::alice) .build(); let s = "<Say voice=\"alice\" language=\"de\" loop=\"1\">Hello World</Say>"; assert_eq!(say.unwrap(), s.to_string()); } #[test] fn twiml_play() { let play = Play::new("https://api.twilio.com/Cowbell.mp3") .count(3) .build(); let s = "<Play loop=\"3\">https://api.twilio.com/Cowbell.mp3</Play>"; assert_eq!(play.unwrap(), s.to_string()); } #[test] fn twiml_response_dial() { let resp = Response::new().dial("415-123-4567").build(); let s = "<Response><Dial method=\"POST\" timeout=\"30\" record=\"do-not-record\">415-123-4567</Dial></Response>"; assert_eq!(resp.unwrap(), s.to_string()); } #[test] fn twiml_response_hangup() { let resp = Response::new().hangup().build(); let s = "<Response><Hangup /></Response>"; assert_eq!(resp.unwrap(), s.to_string()); } }