rusty_tracks/messages/
message.rs1use track_rails::message_generated::protocol;
2use track_rails::message_generated::protocol::Payload;
3use crate::connection::Permission;
4
5#[derive(Debug)]
6pub struct Message{
7 pub permissions: Vec<Permission>,
8 pub id: Option<usize>
9}
10
11impl Message {
12 pub fn new(permissions: Vec<Permission>, id: Option<usize>) -> Message {
13 Message{permissions, id }
14 }
15}
16
17impl<'a> TryFrom<protocol::Message<'a>> for Message {
18 type Error = String;
19
20 fn try_from(msg: protocol::Message<'a>) -> Result<Self, Self::Error> {
21 let permissions = match msg.data_type() {
22 Payload::RegisterResponse => {
23 let permission = msg.data_as_register_response().unwrap().permissions().unwrap_or_default();
24 permission.into_iter().map(|buffer: &str| {
25 Permission::try_from(buffer)
26 }).filter_map(|s|s.ok()).collect()
27 }
28 _ => vec![]
29 };
30
31 let id = match msg.data_type() {
32 Payload::RegisterResponse => {
33 msg.data_as_register_response().unwrap().id().map(|id| id as usize)
34 }
35 _ => None
36 };
37
38 Ok(Message::new(permissions, id))
39 }
40}