freenet_stdlib/
parameters.rsuse std::borrow::Cow;
use serde::{Deserialize, Serialize};
use serde_with::serde_as;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde_as]
#[cfg_attr(feature = "testing", derive(arbitrary::Arbitrary))]
pub struct Parameters<'a>(
#[serde_as(as = "serde_with::Bytes")]
#[serde(borrow)]
Cow<'a, [u8]>,
);
impl<'a> Parameters<'a> {
pub fn size(&self) -> usize {
self.0.len()
}
pub fn into_bytes(self) -> Vec<u8> {
self.0.into_owned()
}
pub fn into_owned(self) -> Parameters<'static> {
let data: Cow<'static, _> = Cow::from(self.0.into_owned());
Parameters(data)
}
}
impl<'a> From<Vec<u8>> for Parameters<'a> {
fn from(data: Vec<u8>) -> Self {
Parameters(Cow::from(data))
}
}
impl<'a> From<&'a [u8]> for Parameters<'a> {
fn from(s: &'a [u8]) -> Self {
Parameters(Cow::from(s))
}
}
impl<'a> AsRef<[u8]> for Parameters<'a> {
fn as_ref(&self) -> &[u8] {
match &self.0 {
Cow::Borrowed(arr) => arr,
Cow::Owned(arr) => arr.as_ref(),
}
}
}