use std::str::{self, Utf8Error};
use serde::{Serialize,Deserialize};
use zeroize::{Zeroize,ZeroizeOnDrop};
use std::fmt;
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq,Zeroize,ZeroizeOnDrop)]
pub struct Message {
message: Vec<u8>,
}
impl Message {
pub fn new<T: AsRef<[u8]>>(msg: T) -> Self {
Self {
message: msg.as_ref().to_vec(),
}
}
pub fn message(&self) -> Result<&str,Utf8Error> {
str::from_utf8(&self.message)
}
pub fn as_bytes(&self) -> &[u8] {
&self.message
}
pub fn to_bytes(&self) -> Vec<u8> {
self.message.clone()
}
}
impl fmt::Display for Message {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.message().expect("[ERROR] Invalid UTF-8"))
}
}