Skip to main content

Document

Struct Document 

Source
pub struct Document<'buf> { /* private fields */ }
Expand description

The output of parse_object: the element tree with path resolution embedded in each element.

Implementations§

Source§

impl<'buf> Document<'buf>

Source

pub fn source(&self) -> &'buf str

Returns the source JSON string this document was parsed from.

Source

pub fn root(&self) -> &Element<'buf>

Returns the root element of this document.

Source

pub fn element(&self, id: ElemId) -> Option<&Element<'buf>>

Returns the element with id, or None if this document has no such element.

Walks the parent chain up from id and then descends back down the tree, so the cost is O(depth) plus a scan of each ancestor’s children. Meant for looking up the occasional edit site, not for bulk traversal.

NOTE: an ElemId produced by a different parse of the same source &str cannot be told apart from one of this document’s own ids.

Source

pub fn removal_spans( &self, ids: &BTreeSet<ElemId>, ) -> Result<Vec<Span>, RemovalError>

Resolves the source spans to erase in order to remove every element in ids.

The returned spans are sorted by start offset and never overlap, so erasing them from Document::source leaves JSON that still parses.

Siblings are resolved as a group, because which span removes a child depends on which of its siblings survive:

CaseSpan erased
Run of children followed by a surviving siblingthe run’s first key or value, up to the start of that sibling
Run of children reaching the closing delimiterthe end of the last surviving sibling’s value, up to the end of the run
Every child of an object or arrayeverything between the {} or [] delimiters

A run that reaches the closing delimiter carries no trailing comma of its own, so it has to swallow the comma of the sibling before it. Resolving each id on its own and merging the spans afterwards gets that case wrong: it leaves the earlier sibling’s comma dangling.

An id nested inside another id in the same set needs nothing beyond being dropped, since the ancestor’s span already covers it.

Trait Implementations§

Source§

impl<'buf> Clone for Document<'buf>

Source§

fn clone(&self) -> Document<'buf>

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<'buf> Debug for Document<'buf>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'buf> !Send for Document<'buf>

§

impl<'buf> !Sync for Document<'buf>

§

impl<'buf> Freeze for Document<'buf>

§

impl<'buf> RefUnwindSafe for Document<'buf>

§

impl<'buf> Unpin for Document<'buf>

§

impl<'buf> UnsafeUnpin for Document<'buf>

§

impl<'buf> UnwindSafe for Document<'buf>

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

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoCaveat for T

Source§

fn into_caveat<W>(self, warnings: Set<W>) -> Caveat<T, W>
where W: Warning,

Any type can be converted to Caveat<T> by supplying a list of Warnings.
Source§

fn into_infallible_caveat(self) -> Caveat<Self, Infallible>

If a FromSchema is infallible a Caveat can be created using this method.
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 = 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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more