Struct Pointer

Source
pub struct Pointer<'a>(/* private fields */);
Expand description

JSON pointer representation based on RFC6901.

This type offers strong ordering over the underlying Unicode string:

  • JSON pointers are sorted by ascending depth.
  • JSON pointers with the same depth are alphanumerically sorted.

Implementations§

Source§

impl<'a> Pointer<'a>

Source

pub fn new(s: impl Into<Cow<'a, str>>) -> Result<Self, Error>

Creates a Pointer from a Unicode string as describe in RFC6901.

§Arguments
  • s: A Unicode string representing a JSON pointer.
§Examples

// Construct a `Pointer` from a string literal.
let pointer = Pointer::new("/a/b/c").unwrap();

// Construct a `Pointer` from a owned string.
let pointer = Pointer::new(String::from("/a/b/c")).unwrap();
Source

pub const fn root() -> Self

Creates a root JSON pointer.

Source

pub fn is_root(&self) -> bool

Indicates if the JSON pointer points to root value.

Source

pub fn as_str(&self) -> &str

Returns the Unicode string representation of the JSON pointer.

Source

pub fn key(&self) -> Option<String>

Returns the last reference token of the JSON pointer, also called JSON key.

Note that the root pointer does not contains any reference tokens and so no JSON key.

§Example

let pointer = Pointer::new("/key").unwrap();
assert_eq!(pointer.key(), Some("key".to_string()));

let pointer = Pointer::root();
assert!(pointer.key().is_none());
Source

pub fn parent(&self) -> Option<Pointer<'_>>

Returns the parent JSON pointer.

Note that the returned JSON pointer borrows a part of the underlying Unicode string then it can be clone without any extra allocation.

§Example

let pointer = Pointer::new("/nested/key").unwrap();
let parent_pointer = Pointer::new("/nested").unwrap();

assert_eq!(pointer.parent(), Some(parent_pointer));
Source

pub fn ancestors(&self) -> impl Iterator<Item = Pointer<'_>>

Produces an iterator over Pointer and its parent JSON pointers.

As Pointer::parent method, all the returned JSON pointers borrow parts of the underlying Unicode string then any of them can be clone without any extra allocation.

The iterator will yield the Pointer then its parents like self, self.parent().unwrap(), self.parent().unwrap().parent().unwrap() and so on until reaching the root JSON pointer.

§Examples

let pointer = Pointer::new("/foo/bar/zoo").unwrap();
let ancestors = pointer.ancestors().collect::<Vec<_>>();

assert_eq!(
    ancestors,
    vec![
        Pointer::new("/foo/bar/zoo").unwrap(),
        Pointer::new("/foo/bar").unwrap(),
        Pointer::new("/foo").unwrap(),
        Pointer::root()
    ]
);
Source

pub fn is_ancestor_of(&self, other: &Pointer<'_>) -> bool

Indicates if Pointer is an ancestor of the given JSON pointer.

Note that Pointer is an ancestor of itself.

Source

pub fn is_parent_of(&self, other: &Pointer<'_>) -> bool

Indicates if Pointer is a parent of the given JSON pointer.

Note that the root JSON pointer is the only one with no parent.

Source

pub fn is_sibling_of(&self, other: &Pointer<'_>) -> bool

Indicates if Pointer is a sibling of the given JSON pointer.

Source

pub fn depth(&self) -> usize

Indicates the number of reference tokens in the JSON pointer, in a zero-based indexed way.

Source

pub fn into_owned(self) -> Pointer<'static>

Creates an owned instance of Pointer.

Note that this function may call Clone::clone if the underlying Unicode string is borrowed.

Source

pub fn tokenize(&'a self) -> impl Iterator<Item = String> + 'a

Evaluates Pointer into tokens as define in RFC6901.

§Examples

let pointer = Pointer::new("/~1foo/~0bar/zoo").unwrap();
let tokens = pointer.tokenize().collect::<Vec<_>>();

assert_eq!(
    tokens,
    vec![
        "/foo".to_string(),
        "~bar".to_string(),
        "zoo".to_string(),
    ]
);

Trait Implementations§

Source§

impl AsRef<str> for Pointer<'_>

Source§

fn as_ref(&self) -> &str

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<'a> Clone for Pointer<'a>

Source§

fn clone(&self) -> Pointer<'a>

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for Pointer<'a>

Source§

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

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

impl<'a> Display for Pointer<'a>

Source§

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

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

impl FromStr for Pointer<'_>

Source§

type Err = Error

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl<'a> Hash for Pointer<'a>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Pointer<'_>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<'a> PartialEq for Pointer<'a>

Source§

fn eq(&self, other: &Pointer<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Pointer<'_>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<'a> TryFrom<&'a str> for Pointer<'a>

Source§

type Error = Error

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

fn try_from(s: &'a str) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<String> for Pointer<'_>

Source§

type Error = Error

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

fn try_from(s: String) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<'a> Eq for Pointer<'a>

Source§

impl<'a> StructuralPartialEq for Pointer<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for Pointer<'a>

§

impl<'a> RefUnwindSafe for Pointer<'a>

§

impl<'a> Send for Pointer<'a>

§

impl<'a> Sync for Pointer<'a>

§

impl<'a> Unpin for Pointer<'a>

§

impl<'a> UnwindSafe for Pointer<'a>

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, 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> 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.