use minicbor::data::Tag;
use minicbor::encode::{Encode, Encoder, Write};
const EXTERNAL_REFERENCE: Tag = Tag::Unassigned(32769);
pub struct Bytes<'a>(&'a [u8]);
impl<'a> Bytes<'a> {
#[must_use = "This function is only useful for its return value"]
pub const unsafe fn new(data: &'a [u8]) -> Self {
Self(data)
}
}
impl<'a, C> Encode<C> for Bytes<'a> {
fn encode<W: Write>(
&self,
e: &mut Encoder<W>,
_: &mut C,
) -> Result<(), minicbor::encode::Error<W::Error>> {
const BYTE_STRING_MAJOR: u8 = 2;
#[allow(clippy::cast_possible_truncation)]
e.tag(EXTERNAL_REFERENCE)?
.array(3)?
.u8(BYTE_STRING_MAJOR)?
.u32(self.0.as_ptr() as u32)?
.u32(self.0.len() as u32)?;
Ok(())
}
}
pub struct String<'a>(&'a str);
impl<'a> String<'a> {
#[must_use = "This function is only useful for its return value"]
pub const unsafe fn new(data: &'a str) -> Self {
Self(data)
}
}
impl<'a, C> Encode<C> for String<'a> {
fn encode<W: Write>(
&self,
e: &mut Encoder<W>,
_: &mut C,
) -> Result<(), minicbor::encode::Error<W::Error>> {
const UNICODE_STRING_MAJOR: u8 = 3;
#[allow(clippy::cast_possible_truncation)]
e.tag(EXTERNAL_REFERENCE)?
.array(3)?
.u8(UNICODE_STRING_MAJOR)?
.u32(self.0.as_ptr() as u32)?
.u32(self.0.len() as u32)?;
Ok(())
}
}