Skip to main content

rusty_tracks/messages/
register.rs

1use crate::connection::Permission;
2use track_rails::message_generated::protocol::{Message, Payload};
3
4#[derive(Debug)]
5pub struct RegisterResponse {
6    pub(crate) permissions: Vec<Permission>,
7    id: usize
8}
9
10impl TryFrom<Message<'_>> for RegisterResponse {
11    type Error = String;
12
13    fn try_from(msg: Message<'_>) -> Result<Self, Self::Error> {
14        match msg.data_type() {
15            Payload::RegisterResponse => {
16                let permissions = msg.data_as_register_response().unwrap().permissions().unwrap_or_default();
17                let permissions = permissions.into_iter().map(|buffer: &str| {
18                    Permission::try_from(buffer)
19                }).filter_map(|s|s.ok()).collect();
20                let id = msg.data_as_register_response().unwrap().id().map(|id| id as usize).ok_or("Could not get id")?;
21                Ok(RegisterResponse{permissions, id })
22            }
23            _ => Err(String::from("Could not transform"))
24        }
25
26    }
27}