mod client; mod clock; mod document; mod field; mod queue; mod session; mod utils; use client::{Client, ClientLink, Reply, Request}; use clock::Clock; use document::Document; use field::Field; use queue::{Message, MsgType, Queue}; use session::Session; use uuid::Uuid; #[derive(Clone)] pub struct MoreThanText { client_link: ClientLink, } impl MoreThanText { pub fn new() -> Self { let queue = Queue::new(); Clock::start(queue.clone()); Document::start(queue.clone()); Session::start(queue.clone()); Self { client_link: Client::start(queue.clone()), } } pub fn validate_session(&mut self, session: Option) -> Uuid where F: Into, { let mut msg = Message::new(MsgType::SessionValidate); match session { Some(id) => msg.add_data("sess_id", id.into()), None => {}, } let rx = self.client_link.send(msg); let reply = rx.recv().unwrap(); reply.get_data("sess_id").unwrap().to_uuid().unwrap() } pub fn request(&mut self, session: Option) -> Message where F: Into, { let sess = match session { Some(id) => Some(id.into()), None => None, }; let req = Request::new(sess); let rx = self.client_link.send(req.into()); rx.recv().unwrap() } }