#path #struct #json-path #json #struct-fields #compile-time

macro struct-path

A helper macros to build a string that represents struct fields path at compile time (such as <field-name>.<field-name>)

7 releases

0.2.3 Jul 17, 2023
0.2.2 Oct 23, 2022
0.1.4 Oct 22, 2022

#2988 in Rust patterns

Download history 586/week @ 2023-12-13 545/week @ 2023-12-20 448/week @ 2023-12-27 604/week @ 2024-01-03 823/week @ 2024-01-10 1012/week @ 2024-01-17 907/week @ 2024-01-24 984/week @ 2024-01-31 1022/week @ 2024-02-07 1202/week @ 2024-02-14 779/week @ 2024-02-21 1090/week @ 2024-02-28 1307/week @ 2024-03-06 1560/week @ 2024-03-13 1876/week @ 2024-03-20 1249/week @ 2024-03-27

6,323 downloads per month
Used in 2 crates (via firestore)

Apache-2.0

23KB
406 lines

Cargo tests and formatting security audit

struct-path for Rust

Library provides a tiny macro implementation to reference Rust struct fields at compile time to represent its string format. This is needed to work with JSON paths, and some others protocols when we still want to rely on the compiler to avoid inconsistent changes.

Features:

  • Fast parsing without huge deps;
  • Macro produces the code to verify if the specified path really exists;
  • Multiple fields/arrays support
  • Optional camelCase and PascalCase conversion support;
  • Optional delimiter parameter;
  • Support for Iter-based (Option, Vec, etc) paths using ~ delimiter;

Quick start

Cargo.toml:

[dependencies]
struct-path = "0.2"

Example code:


use struct_path::*;

pub struct TestStructParent {
    pub value_str: String,
    pub value_num: u64,
    pub value_child: TestStructChild,
    pub opt_value_str: Option<TestStructChild>,
}

pub struct TestStructChild {
    pub child_value_str: String,
    pub child_value_num: u64,
}

// returns "value_str"
let s1: &str = path!(TestStructParent::value_str);

// returns "value_child.child_value_str"
let s2: &str = path!(TestStructParent::value_child.child_value_str) ;

// returns also "value_child.child_value_str"
let s3: &str = path!(TestStructParent::value_child,TestStructChild::child_value_str);

// returns also "value_child.child_value_str" using trait `Iter`
let s3: &str = path!(TestStructParent::opt_value_child~child_value_str);

// options, returns "valueChild/childValueStr"
let s4: &str = path!(TestStructParent::value_child.child_value_str; delim="/", case="camel") ;

// returns ["value_str", "value_num"]
let arr: [&str; 2] = paths!(TestStructParent::{ value_str, value_num });


Licence

Apache Software License (ASL)

Author

Abdulla Abdurakhmanov

Dependencies

~630KB