use crate::payload::{Decode, Encode, SeStringChunkKind}; use std::io::{Read, Seek}; use crate::Payload; #[derive(Debug, PartialEq)] pub struct EmphasisPayload(pub bool); impl EmphasisPayload { pub fn enable() -> Self { Self(true) } pub fn disable() -> Self { Self(false) } pub fn enabled(&self) -> bool { self.0 } } impl From for EmphasisPayload { fn from(enabled: bool) -> Self { Self(enabled) } } impl Decode for EmphasisPayload { fn decode(reader: R, _chunk_len: usize) -> Result { let enabled = Self::read_integer(reader)?; Ok(Self(enabled == 1)) } } impl Encode for EmphasisPayload { fn encode(&self) -> Vec { use std::iter::once; let enabled = Self::make_integer(if self.0 { 1 } else { 0 }); let chunk_len = enabled.len() + 1; once(Payload::START_BYTE) .chain(once(SeStringChunkKind::Emphasis.as_u8())) .chain(once(chunk_len as u8)) .chain(enabled.into_iter()) .chain(once(Payload::END_BYTE)) .collect() } }