pub mod meta;
pub use meta::Meta;
pub struct Default<'a> {
pub data: &'a [u8],
pub meta: Meta,
}
impl<'a> Default<'a> {
pub fn from_bytes(buffer: &'a [u8]) -> Result<Self> {
let meta = Meta::from_bytes(buffer)?;
Ok(Self {
data: buffer.get(meta.to_bytes().len()..).unwrap_or(&[]),
meta,
})
}
pub fn into_bytes(self) -> Vec<u8> {
let mut bytes = Vec::new();
bytes.extend(self.meta.into_bytes());
bytes.extend(self.data);
bytes
}
}
#[test]
fn test() {
const BYTES: &[u8] = "20 text/gemini\r\nDATA".as_bytes();
let default = Default::from_bytes(BYTES).unwrap();
assert_eq!(default.meta.mime, "text/gemini".to_string());
assert_eq!(default.into_bytes(), BYTES);
}
use anyhow::Result;