pub struct StackSafeContext {
pub depth: usize,
pub max_depth: usize,
pub active_stack: Vec<(u32, u16)>,
pub completed_refs: HashSet<(u32, u16)>,
pub start_time: Instant,
pub timeout: Duration,
}Expand description
Stack-safe parsing context
Fields§
§depth: usizeCurrent recursion depth
max_depth: usizeMaximum allowed depth
active_stack: Vec<(u32, u16)>Pila de referencias activas (para detectar ciclos reales)
completed_refs: HashSet<(u32, u16)>Referencias completamente procesadas (no son ciclos)
start_time: InstantStart time for timeout tracking
timeout: DurationTimeout duration
Implementations§
Source§impl StackSafeContext
impl StackSafeContext
Sourcepub fn with_limits(max_depth: usize, timeout_secs: u64) -> Self
pub fn with_limits(max_depth: usize, timeout_secs: u64) -> Self
Create a new context with custom limits
Sourcepub fn enter(&mut self) -> ParseResult<()>
pub fn enter(&mut self) -> ParseResult<()>
Enter a new recursion level
Sourcepub fn push_ref(&mut self, obj_num: u32, gen_num: u16) -> ParseResult<()>
pub fn push_ref(&mut self, obj_num: u32, gen_num: u16) -> ParseResult<()>
Push a reference onto the active stack (for cycle detection)
Sourcepub fn check_timeout(&self) -> ParseResult<()>
pub fn check_timeout(&self) -> ParseResult<()>
Check if parsing has timed out
Trait Implementations§
Source§impl Debug for StackSafeContext
impl Debug for StackSafeContext
Auto Trait Implementations§
impl Freeze for StackSafeContext
impl RefUnwindSafe for StackSafeContext
impl Send for StackSafeContext
impl Sync for StackSafeContext
impl Unpin for StackSafeContext
impl UnwindSafe for StackSafeContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().