messenger 0.1.0

two way messenger
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum MessageKind<T> {
    Close,
    RequestClose,
    Callback(Vec<T>),
    Data(String, T),
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Message<T> {
    id: u32,
    kind: MessageKind<T>,
}

impl<T> Message<T> {
    #[inline]
    pub fn new_close(id: u32) -> Self {
        Message {
            id: id,
            kind: MessageKind::Close,
        }
    }
    #[inline]
    pub fn new_request_close(id: u32) -> Self {
        Message {
            id: id,
            kind: MessageKind::RequestClose,
        }
    }
    #[inline]
    pub fn new_callback(id: u32, data: Vec<T>) -> Self {
        Message {
            id: id,
            kind: MessageKind::Callback(data),
        }
    }
    #[inline]
    pub fn new(id: u32, name: String, data: T) -> Self {
        Message {
            id: id,
            kind: MessageKind::Data(name, data),
        }
    }

    #[inline]
    pub fn id(&self) -> u32 {
        self.id
    }
    #[inline]
    pub fn kind(&self) -> &MessageKind<T> {
        &self.kind
    }
    #[inline]
    pub fn take_kind(self) -> MessageKind<T> {
        self.kind
    }
}