mod client; mod clock; mod document; mod field; mod queue; mod session; use client::{Client, ClientChannel}; use clock::Clock; use document::Document; use field::Field; use queue::{Message, MsgType, Queue}; use session::Session; use uuid::Uuid; #[derive(Clone, Debug)] pub enum ErrorType { DocumentNotFound, } #[derive(Clone)] pub struct MoreThanText { client_channel: ClientChannel, } impl MoreThanText { pub fn new() -> Self { let queue = Queue::new(); Clock::start(queue.clone()); Document::start(queue.clone()); Session::start(queue.clone()); Self { client_channel: 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_channel.send(msg); let reply = rx.recv().unwrap(); reply.get_data("sess_id").unwrap().to_uuid().unwrap() } pub fn get_document(&self, sess_id: Uuid) -> String { let mut msg = Message::new(MsgType::DocumentRequest); msg.add_data("sess_id", sess_id); let rx = self.client_channel.send(msg); let reply = rx.recv().unwrap(); reply.get_data("doc").unwrap().to_string() } }