Crates.io | datastruct |
lib.rs | datastruct |
version | 0.1.1 |
source | src |
created_at | 2024-02-12 03:31:19.789973 |
updated_at | 2024-03-12 13:27:13.172884 |
description | A pure-data structure builder. |
homepage | |
repository | https://github.com/embers-of-the-fire/datastruct-rs.git |
max_upload_size | |
id | 1136438 |
size | 23,572 |
This is a procedural macro library to automatically generate duplicate code for pure data structures.
The library provides a derive macro to automatically implement "plain methods" for data structures.
Currently Available:
Default
, lib-specific DataStruct::data_default
and constant default ConstDataStruct::DEFAULT
.Debug
filter.Eq
, PartialEq
, Ord
, PartialOrd
.Add(Assign)
, Sub(Assign)
, Mul(Assign)
, Div(Assign)
.Unlike standard derive macros, the DataStruct
macro accepts user-defined behaviors without
writing implementation code.
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",
// }
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.