use std::{borrow::Borrow, ops::Deref};
use bytes::Bytes;
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Data(pub Bytes);
impl<T: crate::utils::IntoBytes> From<T> for Data {
fn from(value: T) -> Self {
Data(value.into_bytes())
}
}
impl Deref for Data {
type Target = [u8];
fn deref(&self) -> &Self::Target {
self.as_ref()
}
}
impl AsRef<[u8]> for Data {
fn as_ref(&self) -> &[u8] {
self.0.as_ref()
}
}
impl Borrow<[u8]> for Data {
fn borrow(&self) -> &[u8] {
self.0.borrow()
}
}
#[cfg(test)]
mod test {
use crate::message::test_utils::{encode_decode, fail_decode, BYTES_INVALID, BYTES_VALID};
use super::Data;
use bytes::Bytes;
#[test]
fn encode_success() {
for (bytes, encoded) in BYTES_VALID {
encode_decode(Data(Bytes::from(bytes)), encoded);
}
}
#[test]
fn decode_failure() {
for (bytes, expected) in BYTES_INVALID {
assert_eq!(fail_decode::<Data>(bytes), expected);
}
}
}