Expand description
§Field Path
Field Path provides a lightweight and type-safe abstraction for referencing and accessing nested fields within structs.
The crate is designed to make it easier to generically inspect or mutate fields without relying on heavy reflection systems or unsafe code. It does this through a combination of field identifiers and accessors that preserve type information.
§Core Concepts
Field: Represents a unique, type-safe identifier for a field path within a struct.Accessor: A generic wrapper providing read and write access to a field.FieldAccessor: A container pairing aFieldwith itsAccessor, ensuring both always refer to the same field path.
Together, these components allow building flexible systems that can access or manipulate struct data without tightly coupling to specific types.
§Example
use field_path::field_accessor;
use field_path::field_accessor::FieldAccessor;
#[derive(Default)]
struct Vec2<T> {
pub x: T,
pub y: T,
}
const FIELD_ACC: FieldAccessor<Vec2<f32>, f32> = field_accessor!(<Vec2<f32>>::x);
assert_eq!(FIELD_ACC.field.field_path(), "::x");
let mut v = Vec2::default();
*FIELD_ACC.accessor.get_mut(&mut v) = 42.0;
assert_eq!(FIELD_ACC.accessor.get_ref(&v), &42.0);§Join the community!
You can join us on the Voxell discord server.
§License
field_path is dual-licensed under either:
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
This means you can select the license you prefer! This dual-licensing approach is the de-facto standard in the Rust ecosystem and there are very good reasons to include both.
Modules§
- accessor
- Accessors for mapping source structures to target fields.
- field
- Provides abstractions for working with typed fields in a type-erased, yet type-safe manner.
- field_
accessor - This module defines the
FieldAccessortype, which pairs aField(representing the static path name) with anAccessor(providing functional pointers for data access).
Macros§
- accessor
- Creates an
Accessorthat ensures the fields being accessed are correct for both immutable and mutable reference. - field
- Creates a
Fieldwith path and type safety. - field_
accessor - Creates a
FieldAccessorthat ensures bothFieldandAccessorare pointing to the same field path. - stringify_
field - Stringify a field path into its canonical string form.