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
#![feature(result_map_or_else)] pub mod client; pub mod server; /// SerializableEvent denotes structs that are able to serialize to some String. /// This is used as mainly a marker trait, underneath serialize you most likely would want to use /// serde. pub trait SerializableEvent: Sync + Send + 'static { /// Returns a String of the serialized object fn serialize(&self) -> String; } /// Base Event struct which can be sent across a channel provided by /// [`Server::get_tx`](server::Server::get_tx). /// This struct encapsulates a inner trait object and res which is the resource we want to target. pub struct Event { res: String, inner: Box<dyn SerializableEvent>, } impl Event { /// Returns a Event instance. /// # Arguments /// /// * `res` - A string slice that holds the resource we want to target /// * `inner` - A boxed trait object that can serialize to a string. /// /// # Example /// ``` /// use pushevent::{Event, SerializableEvent}; /// struct Message; /// /// impl SerializableEvent for Message { /// fn serialize(&self) -> String { /// String::from("Hello world") /// } /// } /// /// let message = Box::new(Message); /// let new_event = Event::new("/events/message", message); /// /// assert_eq!(new_event.get_res(), String::from("/events/message")); /// assert_eq!(new_event.build(), String::from("Hello world")); /// ``` pub fn new(res: String, inner: Box<dyn SerializableEvent>) -> Self { Self { res, inner } } /// Returns the resource path that this event targets. Usually used internally and rarely /// useful. /// # Example /// ``` /// use pushevent::{Event, SerializableEvent}; /// struct Message; /// /// impl SerializableEvent for Message { /// fn serialize(&self) -> String { /// String::from("Hello world") /// } /// } /// /// let message = Box::new(Message); /// let new_event = Event::new("/events/message", message); /// /// assert_eq!(new_event.get_res(), String::from("/events/message")); /// ``` pub fn get_res(&self) -> String { self.res.to_owned() } /// Serializes and returns the inner event/message. /// # Example /// ``` /// use pushevent::{Event, SerializableEvent}; /// struct Message; /// /// impl SerializableEvent for Message { /// fn serialize(&self) -> String { /// String::from("Hello world") /// } /// } /// /// let message = Box::new(Message); /// let new_event = Event::new("/events/message", message); /// assert_eq!(new_event.build(), String::from("Hello world")); /// ``` pub fn build(&self) -> String { self.inner.serialize() } }