1 unstable release
| 0.1.1 | Mar 12, 2024 |
|---|---|
| 0.1.0 |
|
#2135 in Data structures
51 downloads per month
31KB
164 lines
DataStruct.rs
This is a procedural macro library to automatically generate duplicate code for pure data structures.
What can this lib do?
The library provides a derive macro to automatically implement "plain methods" for data structures.
Currently Available:
- Default: Standard
Default, lib-specificDataStruct::data_defaultand constant defaultConstDataStruct::DEFAULT. - Debug: Manual
Debugfilter. - Comparison: Standard
Eq,PartialEq,Ord,PartialOrd. - Operations: Standard
Add(Assign),Sub(Assign),Mul(Assign),Div(Assign).
Unlike standard derive macros, the DataStruct macro accepts user-defined behaviors without
writing implementation code.
Quick Start
For full documentation, read it here.
Let's start with this example structure:
struct Person {
age: u8,
name: String,
private_key: u32,
}
First, add datastruct to your dependencies. The core entry point of the library is DataStruct macro.
use datastruct::DataStruct;
#[derive(DataStruct)]
#[dstruct(debug)]
struct Person {
age: u8,
name: String,
#[dfield(no_debug)]
private_key: u32,
}
The #[dstruct(xxx)] is used to configure the basic options of the code-generator. In this example,
debug means that the Debug trait will be implemented.
The #[dfield(xxx)] is used to configure field-specific options of the code-generator. In this example,
no_debug means that this field will not be included in the debug output.
use datastruct::DataStruct;
#[derive(DataStruct)]
#[dstruct(debug)]
struct Person {
age: u8,
name: String,
#[dfield(no_debug)]
private_key: u32,
}
let person = Person { age: 22, name: "James".to_string(), private_key: 42 };
println!("{:#?}", person);
// Output:
// Person {
// age: 22,
// name: "James",
// }
Limitations
Currently, the library can only generate code for typical structure, and tuple structure is not supported.
Besides, most IDE-support cannot offer full completion for macro-generated code, compared with manual implementation.
Dependencies
~2MB
~49K SLoC