use std::fmt::{Debug, Display};
use crate::ConnectionStateId;
use paste::paste;
use accessorise::{impl_get, impl_get_ref, impl_get_mut};
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> {
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()
}
}