diff --git a/src/lib.rs b/src/lib.rs index d61cc11..b85bccf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -143,7 +143,7 @@ impl MTTClient { ]; let msg = Message::default() .set_id(msg_id) - .set_session(self.session_id.clone().into()); + .set_session(self.session_id.clone()); for path in paths.iter() { let reg_msg = Register::new(self.sender_id.clone(), RegMsg::AddRoute(path.clone())); self.queue.send(msg.set_action(reg_msg)); @@ -181,7 +181,7 @@ impl MTTClient { ]; let msg = Message::default() .set_id(msg_id.clone()) - .set_session(self.session_id.clone().into()); + .set_session(self.session_id.clone()); for path in paths.iter() { let reg_msg = Register::new(self.sender_id.clone(), RegMsg::AddRoute(path.clone())); self.queue.send(msg.set_action(reg_msg)); diff --git a/src/message.rs b/src/message.rs index 3e59d38..a0ec2e0 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,5 +1,5 @@ use crate::{ - action::{Field, MsgAction}, + action::{Field, FieldType, MsgAction}, name::NameType, queue::data_director::{Include, Path, Route}, }; @@ -49,12 +49,7 @@ impl Message { where A: Into, { - Self { - msg_id: MessageID::new(), - action: action.into(), - route: Route::default(), - session: Field::None, - } + Self::default().set_action(action) } pub fn set_id(&self, msg_id: MessageID) -> Self { @@ -63,9 +58,20 @@ impl Message { output } - pub fn set_session(&self, session: Field) -> Self { + pub fn set_session(&self, session: F) -> Self + where + F: Into, + { + let sess_id = match session.into() { + Field::Uuid(data) => Field::Uuid(data.clone()), + Field::StaticString(data) => match Uuid::try_from(data) { + Ok(id) => Field::Uuid(id.clone()), + Err(_) => Field::None, + }, + _ => Field::None, + }; let mut output = self.clone(); - output.session = session; + output.session = sess_id; output } @@ -165,13 +171,49 @@ mod messages { #[test] fn can_session_be_set() { - let doc_name = Name::english("identification"); + let doc_name = Name::english("use field"); let qry = Query::new(doc_name.clone()); let sess_id: Field = Uuid::new_v4().into(); let msg = Message::new(qry).set_session(sess_id.clone()); assert_eq!(msg.session, sess_id); } + #[test] + fn can_session_be_set_by_string() { + let doc_name = Name::english("string"); + let qry = Query::new(doc_name.clone()); + let sess_id = Uuid::new_v4(); + let msg = Message::new(qry).set_session(sess_id.to_string()); + assert_eq!(msg.session, sess_id.into()); + } + + #[test] + fn does_garbage_return_none() { + let doc_name = Name::english("garbage"); + let qry = Query::new(doc_name.clone()); + let sess_id = "not a uuid"; + let msg = Message::new(qry).set_session(sess_id); + assert_eq!(msg.session, Field::None); + } + + #[test] + fn can_uuid_set_session_id() { + let doc_name = Name::english("uuid"); + let qry = Query::new(doc_name.clone()); + let sess_id = Uuid::new_v4(); + let msg = Message::new(qry).set_session(sess_id.clone()); + assert_eq!(msg.session, sess_id.into()); + } + + #[test] + fn does_wrong_field_type_return_none() { + let doc_name = Name::english("uuid"); + let qry = Query::new(doc_name.clone()); + let sess_id = FieldType::DateTime.get_default(); + let msg = Message::new(qry).set_session(sess_id.clone()); + assert_eq!(msg.session, Field::None); + } + #[test] fn can_action_be_set() { let doc_name = Name::english("action");