use crate::{CborDecoder, CborItem, Result};
pub struct CborItemReader<'a> {
decoder: CborDecoder<'a>,
}
impl<'a> CborItemReader<'a> {
pub fn new(input: &'a [u8]) -> Self {
Self {
decoder: CborDecoder::new(input),
}
}
pub fn position(&self) -> usize {
self.decoder.position()
}
pub fn remaining(&self) -> usize {
self.decoder.remaining()
}
pub fn is_finished(&self) -> bool {
self.decoder.is_finished()
}
pub fn decoder_mut(&mut self) -> &mut CborDecoder<'a> {
&mut self.decoder
}
pub fn next_head(&mut self) -> Result<Option<CborItem<'a>>> {
if self.decoder.is_finished() {
Ok(None)
} else {
self.decoder.decode_head().map(Some)
}
}
pub fn skip_next(&mut self) -> Result<bool> {
if self.decoder.is_finished() {
Ok(false)
} else {
self.decoder.skip()?;
Ok(true)
}
}
}