Skip to main content

ProcessingStack

Struct ProcessingStack 

Source
pub struct ProcessingStack<I> { /* private fields */ }
Expand description

The chain of remote context URLs currently being processed.

This is the specification’s remote contexts array. It serves two purposes: spotting a context that includes itself, and bounding the length of a remote context chain at MAX_REMOTE_CONTEXTS. Whether it is empty also tells the algorithm whether the context being processed came from a remote document, which is what decides if its @base entry applies.

Implemented as an immutable singly-linked list behind Arcs, so the copy each recursive call receives is a pointer bump rather than a clone of the chain.

Implementations§

Source§

impl<I> ProcessingStack<I>

Source

pub fn new() -> Self

Creates an empty stack, meaning no remote context is being processed.

Source

pub fn is_empty(&self) -> bool

Checks whether no remote context has been entered, i.e. the context being processed is not itself remote.

Source

pub fn len(&self) -> usize

Returns the number of remote contexts on the stack.

Walks the chain, so this is linear in the stack depth.

Source

pub fn cycle(&self, url: &I) -> bool
where I: PartialEq,

Checks whether url is already on the stack, meaning entering it would close a loop.

Source

pub fn push(&mut self, url: I) -> bool
where I: PartialEq,

Pushes url onto the stack, unless it is already there.

Returns true when the URL was added, and false when it was already on the stack and nothing changed. What false means is version-dependent: JSON-LD 1.0 treats it as a recursive context inclusion error, while 1.1 simply skips reprocessing the context.

Trait Implementations§

Source§

impl<I: Clone> Clone for ProcessingStack<I>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I> Default for ProcessingStack<I>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<I> Freeze for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: Freeze,

§

impl<I> RefUnwindSafe for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: RefUnwindSafe,

§

impl<I> Send for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: Send,

§

impl<I> Sync for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: Sync,

§

impl<I> Unpin for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: Unpin,

§

impl<I> UnsafeUnpin for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: UnsafeUnpin,

§

impl<I> UnwindSafe for ProcessingStack<I>
where Option<Arc<StackNode<I>>>: UnwindSafe,

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> BorrowUnordered for T

Source§

fn as_unordered(&self) -> &Unordered<T>

Views this value as an Unordered reference.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, C> FromWithContext<T, C> for T

Source§

fn from_with(value: T, _context: &C) -> T

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, C> IntoWithContext<U, C> for T
where U: FromWithContext<T, C>,

Source§

fn into_with(self, context: &C) -> U

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U, C> TryFromWithContext<U, C> for T
where U: IntoWithContext<T, C>,

Source§

type Error = !

Source§

fn try_from_with( value: U, context: &C, ) -> Result<T, <T as TryFromWithContext<U, C>>::Error>

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<T, U, C> TryIntoWithContext<U, C> for T
where U: TryFromWithContext<T, C>,

Source§

type Error = <U as TryFromWithContext<T, C>>::Error

Source§

fn try_into_with( self, context: &C, ) -> Result<U, <T as TryIntoWithContext<U, C>>::Error>

Source§

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

Source§

fn with<C>(&self, context: C) -> Contextual<&T, C>

Source§

fn into_with<C>(self, context: C) -> Contextual<T, C>
where T: Sized,