rusty_tracks/messages/
message.rs

1use 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}