Struct ParsedPath
pub struct ParsedPath(pub Vec<OffsetAccess>);Expand description
A pre-parsed path to an element within a type.
This struct can be constructed manually from its Accesses or with
the parse method.
This struct may be used like GetPath but removes the cost of parsing the path
string at each element access.
It’s recommended to use this in place of GetPath when the path string is
unlikely to be changed and will be accessed repeatedly.
§Examples
Parsing a &'static str:
let my_static_string: &'static str = "bar#0.1[2].0";
// Breakdown:
// "bar" - Access struct field named "bar"
// "#0" - Access struct field at index 0
// ".1" - Access tuple struct field at index 1
// "[2]" - Access list element at index 2
// ".0" - Access tuple variant field at index 0
let my_path = ParsedPath::parse_static(my_static_string);Parsing a non-static &str:
let my_string = String::from("bar#0.1[2].0");
// Breakdown:
// "bar" - Access struct field named "bar"
// "#0" - Access struct field at index 0
// ".1" - Access tuple struct field at index 1
// "[2]" - Access list element at index 2
// ".0" - Access tuple variant field at index 0
let my_path = ParsedPath::parse(&my_string);Manually constructing a ParsedPath:
let path_elements = [
Access::Field(Cow::Borrowed("bar")),
Access::FieldIndex(0),
Access::TupleIndex(1),
Access::ListIndex(2),
Access::TupleIndex(1),
];
let my_path = ParsedPath::from(path_elements);Tuple Fields§
§0: Vec<OffsetAccess>This is a vector of pre-parsed OffsetAccesses.
Implementations§
§impl ParsedPath
impl ParsedPath
pub fn parse(string: &str) -> Result<ParsedPath, ReflectPathError<'_>>
pub fn parse(string: &str) -> Result<ParsedPath, ReflectPathError<'_>>
Parses a ParsedPath from a string.
Returns an error if the string does not represent a valid path to an element.
The exact format for path strings can be found in the documentation for GetPath.
In short, though, a path consists of one or more chained accessor strings.
These are:
- Named field access (
.field) - Unnamed field access (
.1) - Field index access (
#0) - Sequence access (
[2])
§Example
#[derive(Reflect)]
struct Foo {
bar: Bar,
}
#[derive(Reflect)]
struct Bar {
baz: Baz,
}
#[derive(Reflect)]
struct Baz(f32, Vec<Option<u32>>);
let foo = Foo {
bar: Bar {
baz: Baz(3.14, vec![None, None, Some(123)])
},
};
let parsed_path = ParsedPath::parse("bar#0.1[2].0").unwrap();
// Breakdown:
// "bar" - Access struct field named "bar"
// "#0" - Access struct field at index 0
// ".1" - Access tuple struct field at index 1
// "[2]" - Access list element at index 2
// ".0" - Access tuple variant field at index 0
assert_eq!(parsed_path.element::<u32>(&foo).unwrap(), &123);pub fn parse_static(
string: &'static str,
) -> Result<ParsedPath, ReflectPathError<'static>>
pub fn parse_static( string: &'static str, ) -> Result<ParsedPath, ReflectPathError<'static>>
Similar to Self::parse but only works on &'static str
and does not allocate per named field.
Trait Implementations§
§impl Clone for ParsedPath
impl Clone for ParsedPath
§fn clone(&self) -> ParsedPath
fn clone(&self) -> ParsedPath
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for ParsedPath
impl Debug for ParsedPath
§impl Display for ParsedPath
impl Display for ParsedPath
§impl<const N: usize> From<[Access<'static>; N]> for ParsedPath
impl<const N: usize> From<[Access<'static>; N]> for ParsedPath
§fn from(value: [Access<'static>; N]) -> ParsedPath
fn from(value: [Access<'static>; N]) -> ParsedPath
§impl<const N: usize> From<[OffsetAccess; N]> for ParsedPath
impl<const N: usize> From<[OffsetAccess; N]> for ParsedPath
§fn from(value: [OffsetAccess; N]) -> ParsedPath
fn from(value: [OffsetAccess; N]) -> ParsedPath
§impl From<Vec<Access<'static>>> for ParsedPath
impl From<Vec<Access<'static>>> for ParsedPath
§fn from(value: Vec<Access<'static>>) -> ParsedPath
fn from(value: Vec<Access<'static>>) -> ParsedPath
§impl From<Vec<OffsetAccess>> for ParsedPath
impl From<Vec<OffsetAccess>> for ParsedPath
§fn from(value: Vec<OffsetAccess>) -> ParsedPath
fn from(value: Vec<OffsetAccess>) -> ParsedPath
§impl Hash for ParsedPath
impl Hash for ParsedPath
§impl Index<usize> for ParsedPath
impl Index<usize> for ParsedPath
§impl IndexMut<usize> for ParsedPath
impl IndexMut<usize> for ParsedPath
§impl Ord for ParsedPath
impl Ord for ParsedPath
§impl PartialEq for ParsedPath
impl PartialEq for ParsedPath
§impl PartialOrd for ParsedPath
impl PartialOrd for ParsedPath
§impl<'a> ReflectPath<'a> for &'a ParsedPath
impl<'a> ReflectPath<'a> for &'a ParsedPath
§fn reflect_element(
self,
root: &(dyn PartialReflect + 'static),
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'a>>
fn reflect_element( self, root: &(dyn PartialReflect + 'static), ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'a>>
§fn reflect_element_mut(
self,
root: &mut (dyn PartialReflect + 'static),
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'a>>
fn reflect_element_mut( self, root: &mut (dyn PartialReflect + 'static), ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'a>>
§fn element<T>(
self,
root: &(dyn PartialReflect + 'static),
) -> Result<&T, ReflectPathError<'a>>where
T: Reflect,
fn element<T>(
self,
root: &(dyn PartialReflect + 'static),
) -> Result<&T, ReflectPathError<'a>>where
T: Reflect,
§fn element_mut<T>(
self,
root: &mut (dyn PartialReflect + 'static),
) -> Result<&mut T, ReflectPathError<'a>>where
T: Reflect,
fn element_mut<T>(
self,
root: &mut (dyn PartialReflect + 'static),
) -> Result<&mut T, ReflectPathError<'a>>where
T: Reflect,
§impl<'a> TryFrom<&'a str> for ParsedPath
impl<'a> TryFrom<&'a str> for ParsedPath
§type Error = ReflectPathError<'a>
type Error = ReflectPathError<'a>
§fn try_from(
value: &'a str,
) -> Result<ParsedPath, <ParsedPath as TryFrom<&'a str>>::Error>
fn try_from( value: &'a str, ) -> Result<ParsedPath, <ParsedPath as TryFrom<&'a str>>::Error>
impl Eq for ParsedPath
impl StructuralPartialEq for ParsedPath
Auto Trait Implementations§
impl Freeze for ParsedPath
impl RefUnwindSafe for ParsedPath
impl Send for ParsedPath
impl Sync for ParsedPath
impl Unpin for ParsedPath
impl UnsafeUnpin for ParsedPath
impl UnwindSafe for ParsedPath
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string()] Read more§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString]. Read more