connection.rs

 1use transport::Transport;
 2use error::Error;
 3use ns;
 4
 5use xml::writer::XmlEvent as WriterEvent;
 6
 7pub trait Connection {
 8    type InitError;
 9    type CloseError;
10
11    fn namespace() -> &'static str;
12
13    fn init<T: Transport>(transport: &mut T, domain: &str, id: &str) -> Result<(), Self::InitError>;
14    fn close<T: Transport>(transport: &mut T) -> Result<(), Self::CloseError>;
15}
16
17pub struct C2S;
18
19impl Connection for C2S {
20    type InitError = Error;
21    type CloseError = Error;
22
23    fn namespace() -> &'static str { ns::CLIENT }
24
25    fn init<T: Transport>(transport: &mut T, domain: &str, id: &str) -> Result<(), Error> {
26        transport.write_event(WriterEvent::start_element("stream:stream")
27                                          .attr("to", domain)
28                                          .attr("id", id)
29                                          .default_ns(ns::CLIENT)
30                                          .ns("stream", ns::STREAM))?;
31        Ok(())
32    }
33
34    fn close<T: Transport>(transport: &mut T) -> Result<(), Error> {
35        transport.write_event(WriterEvent::end_element())?;
36        Ok(())
37    }
38}
39
40pub struct Component2S;
41
42impl Connection for Component2S {
43    type InitError = Error;
44    type CloseError = Error;
45
46    fn namespace() -> &'static str { ns::COMPONENT_ACCEPT }
47
48    fn init<T: Transport>(transport: &mut T, domain: &str, id: &str) -> Result<(), Error> {
49        transport.write_event(WriterEvent::start_element("stream:stream")
50                                          .attr("to", domain)
51                                          .attr("id", id)
52                                          .default_ns(ns::COMPONENT_ACCEPT)
53                                          .ns("stream", ns::STREAM))?;
54        Ok(())
55    }
56
57    fn close<T: Transport>(transport: &mut T) -> Result<(), Error> {
58        transport.write_event(WriterEvent::end_element())?;
59        Ok(())
60    }
61}