fws_actors 0.1.0

fastwebsockets clients and servers in actors.
Documentation
use std::fmt::{Debug, Display};

use crate::ConnectionStateId;

use paste::paste;

use accessorise::{impl_get, impl_get_ref, impl_get_mut};

///
/// A message type that contains a ConnectionStateId and an inner message.
/// 
pub struct ConnectionStateMessage<T>
{

    id: ConnectionStateId,
    message: T

}

impl<T> ConnectionStateMessage<T>
{

    pub fn new(id: ConnectionStateId, message: T) -> Self
    {

        Self
        {
            
            id,
            message
        
        }

    }

    pub fn same_id<N>(&self, message: N) -> ConnectionStateMessage::<N> //Self
    {

        ConnectionStateMessage::<N>::new(self.id, message)

    }

    impl_get!(id, ConnectionStateId);

    impl_get_ref!(message, T);

    impl_get_mut!(message, T);

    pub fn take_message(self) -> T
    {

        self.message

    }

    pub fn take_id_and_message(self) -> (ConnectionStateId, T)
    {

        (self.id, self.message)

    }

    pub fn set_id_take_message(self, connection_state_id: &mut ConnectionStateId) -> T
    {

        *connection_state_id = self.id; 

        self.message

    }

}

impl<T> Display for ConnectionStateMessage<T>
    where T: Display
{

    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result
    {

        write!(f, "{{id: {0}, message: {1}}}", self.id, self.message)
        
    }

}

impl<T> Debug for ConnectionStateMessage<T>
    where T: Debug
{

    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.debug_struct("ConnectionStateMessage").field("id", &self.id).field("message", &self.message).finish()
    }

}