# 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-specific `DataStruct::data_default` and constant default `ConstDataStruct::DEFAULT`. - Debug: Manual `Debug` filter. - 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](./DOCUMENT.md). Let's start with this example structure: ```rust 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. ```rust 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. ```rust 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.