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§
Source§impl ParsedPath
impl ParsedPath
Sourcepub fn parse(string: &str) -> Result<Self, ReflectPathError<'_>>
pub fn parse(string: &str) -> Result<Self, 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);Sourcepub fn parse_static(
string: &'static str,
) -> Result<Self, ReflectPathError<'static>>
pub fn parse_static( string: &'static str, ) -> Result<Self, ReflectPathError<'static>>
Similar to Self::parse but only works on &'static str
and does not allocate per named field.
Trait Implementations§
Source§impl Clone for ParsedPath
impl Clone for ParsedPath
Source§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 moreSource§impl Debug for ParsedPath
impl Debug for ParsedPath
Source§impl Display for ParsedPath
impl Display for ParsedPath
Source§impl<const N: usize> From<[OffsetAccess; N]> for ParsedPath
impl<const N: usize> From<[OffsetAccess; N]> for ParsedPath
Source§fn from(value: [OffsetAccess; N]) -> Self
fn from(value: [OffsetAccess; N]) -> Self
Source§impl From<Vec<OffsetAccess>> for ParsedPath
impl From<Vec<OffsetAccess>> for ParsedPath
Source§fn from(value: Vec<OffsetAccess>) -> Self
fn from(value: Vec<OffsetAccess>) -> Self
Source§impl FromReflect for ParsedPath
impl FromReflect for ParsedPath
Source§fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
fn from_reflect(reflect: &dyn PartialReflect) -> Option<Self>
Self from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl GetTypeRegistration for ParsedPath
impl GetTypeRegistration for ParsedPath
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl Hash for ParsedPath
impl Hash for ParsedPath
Source§impl Index<usize> for ParsedPath
impl Index<usize> for ParsedPath
Source§impl IndexMut<usize> for ParsedPath
impl IndexMut<usize> for ParsedPath
Source§impl Ord for ParsedPath
impl Ord for ParsedPath
Source§fn cmp(&self, other: &ParsedPath) -> Ordering
fn cmp(&self, other: &ParsedPath) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for ParsedPath
impl PartialEq for ParsedPath
Source§impl PartialOrd for ParsedPath
impl PartialOrd for ParsedPath
Source§impl PartialReflect for ParsedPath
impl PartialReflect for ParsedPath
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
fn try_apply(&mut self, value: &dyn PartialReflect) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Self>) -> ReflectOwned
fn reflect_owned(self: Box<Self>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Self>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Self>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&dyn Reflect>
fn try_as_reflect(&self) -> Option<&dyn Reflect>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
fn try_as_reflect_mut(&mut self) -> Option<&mut dyn Reflect>
Source§fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Self>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &dyn PartialReflect
fn as_partial_reflect(&self) -> &dyn PartialReflect
Source§fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
fn as_partial_reflect_mut(&mut self) -> &mut dyn PartialReflect
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
fn reflect_partial_eq(&self, value: &dyn PartialReflect) -> Option<bool>
Source§fn reflect_partial_cmp(&self, value: &dyn PartialReflect) -> Option<Ordering>
fn reflect_partial_cmp(&self, value: &dyn PartialReflect) -> Option<Ordering>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self using reflection. Read moreSource§fn apply(&mut self, value: &dyn PartialReflect)
fn apply(&mut self, value: &dyn PartialReflect)
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T: 'static>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T: 'static>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails.Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for ParsedPath
impl Reflect for ParsedPath
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Self>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &dyn Reflect
fn as_reflect(&self) -> &dyn Reflect
Source§fn as_reflect_mut(&mut self) -> &mut dyn Reflect
fn as_reflect_mut(&mut self) -> &mut dyn Reflect
Source§impl<'a> ReflectPath<'a> for &'a ParsedPath
impl<'a> ReflectPath<'a> for &'a ParsedPath
Source§fn reflect_element(
self,
root: &dyn PartialReflect,
) -> Result<&dyn PartialReflect, ReflectPathError<'a>>
fn reflect_element( self, root: &dyn PartialReflect, ) -> Result<&dyn PartialReflect, ReflectPathError<'a>>
Source§fn reflect_element_mut(
self,
root: &mut dyn PartialReflect,
) -> Result<&mut dyn PartialReflect, ReflectPathError<'a>>
fn reflect_element_mut( self, root: &mut dyn PartialReflect, ) -> Result<&mut dyn PartialReflect, ReflectPathError<'a>>
Source§fn element<T: Reflect>(
self,
root: &dyn PartialReflect,
) -> Result<&T, ReflectPathError<'a>>
fn element<T: Reflect>( self, root: &dyn PartialReflect, ) -> Result<&T, ReflectPathError<'a>>
Source§fn element_mut<T: Reflect>(
self,
root: &mut dyn PartialReflect,
) -> Result<&mut T, ReflectPathError<'a>>
fn element_mut<T: Reflect>( self, root: &mut dyn PartialReflect, ) -> Result<&mut T, ReflectPathError<'a>>
Source§impl<'a> TryFrom<&'a str> for ParsedPath
impl<'a> TryFrom<&'a str> for ParsedPath
Source§impl TupleStruct for ParsedPath
impl TupleStruct for ParsedPath
Source§fn field(&self, index: usize) -> Option<&dyn PartialReflect>
fn field(&self, index: usize) -> Option<&dyn PartialReflect>
index as a
&dyn Reflect.Source§fn field_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
fn field_mut(&mut self, index: usize) -> Option<&mut dyn PartialReflect>
index
as a &mut dyn Reflect.Source§fn iter_fields(&self) -> TupleStructFieldIter<'_> ⓘ
fn iter_fields(&self) -> TupleStructFieldIter<'_> ⓘ
Source§fn to_dynamic_tuple_struct(&self) -> DynamicTupleStruct
fn to_dynamic_tuple_struct(&self) -> DynamicTupleStruct
DynamicTupleStruct from this tuple struct.Source§fn get_represented_tuple_struct_info(&self) -> Option<&'static TupleStructInfo>
fn get_represented_tuple_struct_info(&self) -> Option<&'static TupleStructInfo>
None if TypeInfo is not available.Source§impl TypePath for ParsedPath
impl TypePath for ParsedPath
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Source§impl Typed for ParsedPath
impl Typed for ParsedPath
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,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&dyn PartialReflect, ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&dyn PartialReflect, ReflectPathError<'p>>
path. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut dyn PartialReflect, ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut dyn PartialReflect, ReflectPathError<'p>>
path. Read moreSource§fn path<'p, T: Reflect>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>
fn path<'p, T: Reflect>( &self, path: impl ReflectPath<'p>, ) -> Result<&T, ReflectPathError<'p>>
path. Read moreSource§fn path_mut<'p, T: Reflect>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>
fn path_mut<'p, T: Reflect>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut T, ReflectPathError<'p>>
path. Read more