Crates.io | field_comparable_derive |
lib.rs | field_comparable_derive |
version | 0.1.1 |
created_at | 2025-08-22 14:28:54.299201+00 |
updated_at | 2025-08-22 19:24:49.459739+00 |
description | Procedural macro to generate struct field comparison methods / Macro procédurale pour générer des méthodes de comparaison de champs de structures |
homepage | https://gitlab.com/seb.sannac.pro/field-comparable |
repository | https://gitlab.com/seb.sannac.pro/field-comparable |
max_upload_size | |
id | 1806439 |
size | 26,464 |
field_comparable_derive
is a procedural macro crate that automatically generates field comparison methods for Rust structs.
It is particularly useful when you need fine-grained comparison logic without manually implementing boilerplate code.
use field_comparable_derive::Comparable;
#[derive(Comparable)]
struct User {
id: u32,
name: String,
email: String,
}
fn compare_user() {
let u1 = User { id: 1, name: "Alice".into(), email: "alice@mail.com".into() };
let u2 = User { id: 1, name: "Bob".into(), email: "alice@mail.com".into() };
// Example: check field differences
let diffs: bool = u1.differs_from(&u2);
println!("{:?}", diffs);
let name_diffs: bool = u1.name_differs_from(u2);
let name_diffs: bool = u1.name_differs_from_ref(&u2);
let email_diffs: bool = u1.email_differs_from(u2);
}
field_comparable_derive
est une macro procédurale qui génère automatiquement des méthodes de comparaison de champs pour vos structures Rust.
Elle est particulièrement utile lorsque vous avez besoin d’une logique de comparaison fine sans écrire du code répétitif.
use field_comparable_derive::Comparable;
#[derive(Comparable)]
struct Utilisateur {
id: u32,
nom: String,
email: String,
}
fn compare_user() {
let u1 = Utilisateur { id: 1, nom: "Alice".into(), email: "alice@mail.com".into() };
let u2 = Utilisateur { id: 1, nom: "Bob".into(), email: "alice@mail.com".into() };
// Exemple : vérifier les différences entre champs
let diffs = u1.compare_fields(&u2);
println!("{:?}", diffs);
let name_diffs: bool = u1.name_differs_from(u2);
let name_diffs: bool = u1.name_differs_from_ref(&u2);
let email_diffs: bool = u1.email_differs_from(u2);
}
This project is licensed under either:
at your option.
Contributions, issues and feature requests are welcome! Feel free to open a PR or an issue in the GitLab repository.