use crate::{BinaryReader, FromReader, OperatorsReader, Result};
use core::fmt;
#[derive(Clone)]
pub struct ConstExpr<'a> {
reader: BinaryReader<'a>,
}
impl PartialEq for ConstExpr<'_> {
fn eq(&self, other: &Self) -> bool {
self.reader.remaining_buffer() == other.reader.remaining_buffer()
}
}
impl Eq for ConstExpr<'_> {}
impl<'a> ConstExpr<'a> {
pub fn new(reader: BinaryReader<'a>) -> ConstExpr<'a> {
ConstExpr { reader }
}
pub fn get_binary_reader(&self) -> BinaryReader<'a> {
self.reader.clone()
}
pub fn get_operators_reader(&self) -> OperatorsReader<'a> {
OperatorsReader::new(self.get_binary_reader())
}
}
impl<'a> FromReader<'a> for ConstExpr<'a> {
fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> {
let reader = reader.skip(|reader| {
let mut ops = OperatorsReader::new(reader.clone());
ops.skip_const_expr()?;
*reader = ops.get_binary_reader();
Ok(())
})?;
Ok(ConstExpr { reader })
}
}
impl fmt::Debug for ConstExpr<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("ConstExpr")
.field("offset", &self.reader.original_position())
.field("data", &self.reader.remaining_buffer())
.finish()
}
}