rusty-tracks 0.0.7

Rust client to connect to DataTracks.
Documentation
use track_rails::message_generated::protocol;
use track_rails::message_generated::protocol::Payload;
use crate::connection::Permission;

#[derive(Debug)]
pub struct Message{
    pub permissions: Vec<Permission>,
    pub id: Option<usize>
}

impl Message {
    pub fn new(permissions: Vec<Permission>, id: Option<usize>) -> Message {
        Message{permissions, id }
    }
}

impl<'a> TryFrom<protocol::Message<'a>> for Message {
    type Error = String;

    fn try_from(msg: protocol::Message<'a>) -> Result<Self, Self::Error> {
        let permissions = match msg.data_type() {
            Payload::RegisterResponse => {
                let permission = msg.data_as_register_response().unwrap().permissions().unwrap_or_default();
                permission.into_iter().map(|buffer: &str| {
                    Permission::try_from(buffer)
                }).filter_map(|s|s.ok()).collect()
            }
            _ => vec![]
        };

        let id = match msg.data_type() {
            Payload::RegisterResponse => {
                msg.data_as_register_response().unwrap().id().map(|id| id as usize)
            }
            _ => None
        };

        Ok(Message::new(permissions, id))
    }
}