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
use crate::core::payload::Identifiable; /// Interface for working with dispatchable messages pub trait Dispatchable: Identifiable { /// Body type of dispatchable message type Body: ?Sized; /// Check if current message is obtainable /// /// ``` /// use spartan_lib::core::message::builder::MessageBuilder; /// use spartan_lib::core::payload::Dispatchable; /// use spartan_lib::chrono::{Utc, Duration}; /// /// let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); /// let delayed_message = MessageBuilder::default() /// .body("Hello, world") /// .delay(600) /// .compose() /// .unwrap(); /// /// assert!(message.obtainable()); /// assert!(!delayed_message.obtainable()); /// ``` fn obtainable(&self) -> bool; /// Get message body /// /// ``` /// use spartan_lib::core::message::builder::MessageBuilder; /// use spartan_lib::core::payload::Dispatchable; /// /// let message = MessageBuilder::default().body("Hello, world").compose().unwrap(); /// /// assert_eq!(message.body(), "Hello, world"); /// ``` fn body(&self) -> &Self::Body; /// Check if current message is garbage /// /// ``` /// use spartan_lib::core::message::builder::MessageBuilder; /// use spartan_lib::core::payload::{Dispatchable, Status}; /// use std::thread::sleep; /// use std::time::Duration; /// /// let mut message = MessageBuilder::default() /// .body("Hello, world") /// .timeout(0) /// .compose() /// .unwrap(); /// /// message.reserve(); /// /// sleep(Duration::from_secs(2)); /// /// assert!(message.gc()); /// ``` fn gc(&self) -> bool; }