use rustecal_core::types::DataTypeInfo;
use rustecal_pubsub::typed_publisher::PublisherMessage;
use rustecal_pubsub::typed_subscriber::SubscriberMessage;
use std::str;
use std::sync::Arc;
pub struct StringMessage {
pub data: Arc<str>,
}
impl SubscriberMessage<'_> for StringMessage {
fn datatype() -> DataTypeInfo {
DataTypeInfo {
encoding: "utf-8".to_string(),
type_name: "string".to_string(),
descriptor: vec![],
}
}
fn from_bytes(bytes: &[u8], _data_type_info: &DataTypeInfo) -> Option<Self> {
str::from_utf8(bytes).ok().map(|s| StringMessage {
data: Arc::<str>::from(s),
})
}
}
impl PublisherMessage for StringMessage {
fn datatype() -> DataTypeInfo {
<StringMessage as SubscriberMessage>::datatype()
}
fn to_bytes(&self) -> Arc<[u8]> {
Arc::from(self.data.as_bytes())
}
}