use std::convert::Infallible;
use super::*;
#[derive(Clone, Debug)]
pub struct Plain {
data: Vec<u8>,
}
impl Serializable for Plain {
fn serialize(&self, serializer: &mut dyn Serializer) {
serializer.write(&self.data)
}
}
impl AtomicBase for Plain {
type AParseError = Infallible;
}
impl ImplMode for Plain {
type Mode = RegularMode;
}
impl CRegularAtomic for Plain {
fn cra_deserialize(stream: impl Stream) -> AParseResult<Self> {
Ok(stream.iread_all(Plain::from_slice))
}
fn cra_extend(mut self, tail: &[u8]) -> AParseResult<Self> {
self.data.extend_from_slice(tail);
Ok(self)
}
}
impl Plain {
pub fn from_slice(slice: &[u8]) -> Self {
Plain { data: slice.into() }
}
pub fn raw(&self) -> Vec<u8> {
self.data.clone()
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::rstd::*;
#[test]
fn can_parse_plain_slice() {
let plain = Plain::parse_slice(b"slice").unwrap();
assert_eq!(plain.bytes().as_slice(), b"slice");
}
}