RecursionLimiter

Struct RecursionLimiter 

Source
pub struct RecursionLimiter {
    pub visited: bool,
    pub live: bool,
    /* private fields */
}
Expand description

Prevents infinite recursion during Debug::fmt, JSON.stringify, and other conversions. This uses a thread local, so is not safe to use where the object graph will be traversed by multiple threads!

Fields§

§visited: bool

If this JsObject has been visited before in the graph, but not in the current branch.

§live: bool

If this JsObject has been visited in the current branch of the graph.

Implementations§

Source§

impl RecursionLimiter

Source

pub fn new(o: &JsObject) -> Self

Determines if the specified JsObject has been visited, and returns a struct that will free it when dropped.

This is done by maintaining a thread-local hashset containing the pointers of JsObject values that have been visited. The first JsObject visited will clear the hashset, while any others will check if they are contained by the hashset.

Trait Implementations§

Source§

impl Debug for RecursionLimiter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for RecursionLimiter

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V