field_path 0.2.0

Type-safe, no-std field access and reflection utilities.
Documentation
  • Coverage
  • 80%
    36 out of 45 items documented10 out of 39 items with examples
  • Size
  • Source code size: 22.99 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.62 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 20s Average build duration of successful builds.
  • all releases: 17s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • voxell-tech/field_path
    5 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • nixonyh

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.
  • FieldAccessorRegistry: A mapping between fields and their accessors for lookup and dynamic use.

Together, these components allow building flexible systems that can access or manipulate struct data without tightly coupling to specific types.

Example

use field_path::accessor::{FieldAccessorRegistry, accessor};
use field_path::field::field;

#[derive(Default)]
struct Vec2<T> {
    pub x: T,
    pub y: T,
}

let mut registry = FieldAccessorRegistry::default();
let field = field!(<Vec2<f32>>::x);

// Register accessors.
registry.register_typed(field, accessor!(<Vec2<f32>>::x));

// Access field generically.
let mut v = Vec2::default();
let accessor =
    registry.get::<Vec2<f32>, f32>(&field.untyped()).unwrap();

*accessor.get_mut(&mut v) = 42.0;
assert_eq!(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:

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.