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
use notify::{Notifiable, Notifies}; use std::rc::Rc; use BufferedTransport; #[cfg(feature = "encrypt")] use EncryptedTransport; pub enum MessageTransport { #[cfg(feature = "encrypt")] EncryptedTransport(EncryptedTransport), BufferedTransport(BufferedTransport), } impl MessageTransport { pub fn send(&self, message: &[u8]) { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.send(message), MessageTransport::BufferedTransport(bt) => bt.send_message(message), } } pub fn recv(&self) -> Option<Vec<u8>> { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.recv(), MessageTransport::BufferedTransport(bt) => bt.recv_message(), } } pub fn recv_all(&self) -> Vec<Vec<u8>> { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.recv_all(), MessageTransport::BufferedTransport(bt) => bt.recv_all_messages(), } } pub fn has_write_space(&self) -> bool { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.has_write_space(), MessageTransport::BufferedTransport(bt) => bt.has_write_space(), } } pub fn is_closed(&self) -> bool { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.is_closed(), MessageTransport::BufferedTransport(bt) => bt.is_closed(), } } } impl Notifiable for MessageTransport { fn notify(&self) { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.notify(), MessageTransport::BufferedTransport(bt) => bt.notify(), } } } impl Notifies for MessageTransport { fn set_notify(&self, callback: Rc<Notifiable>) { match self { #[cfg(feature = "encrypt")] MessageTransport::EncryptedTransport(et) => et.set_notify(callback), MessageTransport::BufferedTransport(bt) => bt.set_notify(callback), } } } #[cfg(feature = "encrypt")] impl From<EncryptedTransport> for MessageTransport { fn from(et: EncryptedTransport) -> MessageTransport { MessageTransport::EncryptedTransport(et) } } impl From<BufferedTransport> for MessageTransport { fn from(bt: BufferedTransport) -> MessageTransport { MessageTransport::BufferedTransport(bt) } }