Skip to main content

XPath

Struct XPath 

Source
pub struct XPath { /* private fields */ }
Expand description

Cross Path allowing to recursively retrieve a FieldValue from a structure implementing FieldGetter.

§Example:

use ::gene_derive::FieldGetter;
use ::gene::{XPath, FieldGetter, FieldValue, FieldNameIterator};

#[derive(FieldGetter)]
struct LogData
{
    a: String,
    b: i32,
    c: f64,
}

#[derive(FieldGetter)]
struct LogEntry
{
    name: String,
    data: LogData,
}

let e = LogEntry{
    name: "SomeEntry".into(),
    data: LogData{
        a: "SomeData".into(),
        b: 42,
        c: 24.0,
    }
};

let p = XPath::parse(".name").unwrap();
assert_eq!(e.get_from_path(&p), Some("SomeEntry".into()));

let p = XPath::parse(".data.a").unwrap();
assert_eq!(e.get_from_path(&p), Some("SomeData".into()));

let p = XPath::parse(".data.b").unwrap();
assert_eq!(e.get_from_path(&p), Some(42.into()));

let p = XPath::parse(".data.c").unwrap();
assert_eq!(e.get_from_path(&p), Some(24.0.into()));

Implementations§

Source§

impl XPath

Source

pub fn parse<S: AsRef<str>>(s: S) -> Result<Self, PathError>

Parses a string into an XPath.

Creates an XPath from a string representation, validating the path structure and extracting segments. The path string should use dot notation (e.g., .field.subfield) to represent nested field access.

§Errors

Returns PathError if the path string is malformed or contains invalid characters.

§Examples
use gene::XPath;

let path = XPath::parse(".field.subfield").unwrap();
assert_eq!(path.to_string_lossy(), ".field.subfield");
Source

pub fn segments(&self) -> &[String]

Returns a reference to the segments of this path.

Path segments are the individual components extracted from the path string. For a path like .a.b.c, the segments will be ["a", "b", "c"]. The dot (.) character is used as the segment separator.

§Examples
use gene::XPath;

let path = XPath::parse(".field.subfield").unwrap();
let segments = path.segments();
assert_eq!(segments, &vec!["field".to_string(), "subfield".to_string()]);
Source

pub fn iter_segments(&self) -> Iter<'_, String>

Returns an iterator over the segments of this path.

This provides a more efficient way to access path segments when you need to iterate over them rather than access the full vector. The iterator yields string references to each segment.

§Examples
use gene::XPath;

let path = XPath::parse(".field.subfield").unwrap();
let mut iter = path.iter_segments();
assert_eq!(iter.next(), Some(&"field".to_string()));
assert_eq!(iter.next(), Some(&"subfield".to_string()));
assert_eq!(iter.next(), None);
Source

pub fn to_string_lossy(&self) -> Cow<'_, str>

Returns a borrowed string representation of this path.

This method provides efficient access to the original path string without allocation. The returned Cow will typically be a borrowed reference to the internal string data.

§Examples
use gene::XPath;

let path = XPath::parse(".field.subfield").unwrap();
assert_eq!(path.to_string_lossy(), ".field.subfield");

Trait Implementations§

Source§

impl Clone for XPath

Source§

fn clone(&self) -> XPath

Returns a duplicate 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 Debug for XPath

Source§

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

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

impl Display for XPath

Source§

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

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

impl<'f> From<&'f XPath> for FieldNameIterator<'f>

Source§

fn from(value: &'f XPath) -> Self

Converts to this type from the input type.
Source§

impl FromStr for XPath

Source§

type Err = PathError

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 Hash for XPath

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 PartialEq for XPath

Source§

fn eq(&self, other: &Self) -> 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 Eq for XPath

Auto Trait Implementations§

§

impl Freeze for XPath

§

impl RefUnwindSafe for XPath

§

impl Send for XPath

§

impl Sync for XPath

§

impl Unpin for XPath

§

impl UnsafeUnpin for XPath

§

impl UnwindSafe for XPath

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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.