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 Access
es 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 OffsetAccess
es.
Implementations§
Source§impl ParsedPath
impl ParsedPath
Sourcepub 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);
Sourcepub 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§
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]) -> ParsedPath
fn from(value: [OffsetAccess; N]) -> ParsedPath
Source§impl From<Vec<OffsetAccess>> for ParsedPath
impl From<Vec<OffsetAccess>> for ParsedPath
Source§fn from(value: Vec<OffsetAccess>) -> ParsedPath
fn from(value: Vec<OffsetAccess>) -> ParsedPath
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<'a> ReflectPath<'a> for &'a ParsedPath
impl<'a> ReflectPath<'a> for &'a ParsedPath
Source§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>>
Source§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>>
Source§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,
Source§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,
Source§impl<'a> TryFrom<&'a str> for ParsedPath
impl<'a> TryFrom<&'a str> for ParsedPath
Source§type Error = ReflectPathError<'a>
type Error = ReflectPathError<'a>
Source§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 UnwindSafe for ParsedPath
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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> 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>
. Box<dyn Any>
can
then be further downcast
into Box<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>
. Rc<Any>
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<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<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.