lombokrs
lombokrs(Lombok Rust) is a lightweight Rust macro library. It is the simple implementation of Lombok Java in Rust.
1. Acknowledgment
This project, lombokrs, was developed with significant inspiration from the open-source project lombok-rs. Special
thanks to the contributors of lombok-rs for their excellent work,
particularly in handling Lifetimes. While
building upon their foundation, I have made several modifications based on my understanding, especially in the areas of
Builder and Getter implementations.
v0.2.0 version, redesigned the functionality of macro Builder, mainly inspired by
the proc-macro-workshop project.
2. Implementation
-
@Getter-#[derive(Getter)] -
@Setter-#[derive(Setter)] -
@Builder-#[derive(Builder)] -
@Data-#[derive(Data)] - --
-
@EqualsAndHashCode-#[derive(EqualsAndHashCode)] -
@ToString-#[derive(ToString)] -
@Value-#[derive(Value)] -
@NoArgsConstructor-#[derive(NoArgsConstructor)] -
@AllArgsConstructor-#[derive(AllArgsConstructor)]
2.1. Explanation
Why the annotations below are not implemented:
EqualsAndHashCodeToStringValueNoArgsConstructorAllArgsConstructor
- In the actual development process,
Equals,ToString,HashCode,Valueetc. are not used very often; NoArgsConstructorcan be replaced byDefaultTrait;AllArgsConstructorcan be replaced by builder mode.
Based on the above reasons, it is not implemented. If necessary, please use lombok-rs crates instead.
3. Usage
Add this to your Cargo.toml:
[]
= "0.2"
4.APIs
4.0. Prepare
// ----------------------------------------------------------------
// ----------------------------------------------------------------
4.1. Setter
let mut user = new;
// ----------------------------------------------------------------
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
// ---------------------------------------------------------------- Setter
user.set_id;
user.set_age;
user.set_name;
user.set_email;
user.set_hobby;
// ----------------------------------------------------------------
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
4.2. Getter
let user = new;
// ---------------------------------------------------------------- Getter | get_x()
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
// ---------------------------------------------------------------- Getter/fluent | x()
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
4.3. Builder
// ---------------------------------------------------------------- Builder
// UserBuilder = User::builder()
let user = builder
.id
.age
.name
.email
.hobby
// @since 0.2.0
.activities
// #[builder(method = "activity")]
.activity
.build // Result<T,E>
.unwrap; // @since 0.2.0
// ----------------------------------------------------------------
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
4.4. Data
// ---------------------------------------------------------------- Builder
let mut user = builder
.id
.age
.name
.email
.hobby
.build // Result<T,E>
.unwrap; // @since 0.2.0
// ---------------------------------------------------------------- Setter
user.set_id;
user.set_age;
user.set_name;
user.set_email;
user.set_hobby;
// ---------------------------------------------------------------- Getter | get_x()
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
// ---------------------------------------------------------------- Getter/fluent | x()
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;