stateroom 0.4.4

A lightweight framework for building WebSocket services.
Documentation
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};

use crate::{ClientId, MessageRecipient};

#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug)]
pub enum MessagePayload {
    Bytes(Vec<u8>),
    Text(String),
}

impl MessagePayload {
    pub fn text(&self) -> Option<&str> {
        match self {
            MessagePayload::Text(s) => Some(s),
            _ => None,
        }
    }

    pub fn bytes(&self) -> Option<&[u8]> {
        match self {
            MessagePayload::Bytes(b) => Some(b),
            _ => None,
        }
    }
}

impl From<String> for MessagePayload {
    fn from(val: String) -> Self {
        MessagePayload::Text(val)
    }
}

impl From<&str> for MessagePayload {
    fn from(val: &str) -> Self {
        MessagePayload::Text(val.to_string())
    }
}

impl From<Vec<u8>> for MessagePayload {
    fn from(val: Vec<u8>) -> Self {
        MessagePayload::Bytes(val)
    }
}

impl From<&[u8]> for MessagePayload {
    fn from(val: &[u8]) -> Self {
        MessagePayload::Bytes(val.to_vec())
    }
}

#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug)]
pub enum MessageToProcess {
    Init,
    Connect {
        client: ClientId,
    },
    Disconnect {
        client: ClientId,
    },
    Message {
        sender: ClientId,
        message: MessagePayload,
    },
    Timer,
}

#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum MessageFromProcess {
    Message {
        recipient: MessageRecipient,
        message: MessagePayload,
    },
    SetTimer {
        ms_delay: u32,
    },
}