# field_comparable_derive
[](https://crates.io/crates/field_comparable_derive)
[](https://docs.rs/field_comparable_derive)
[](#license)
---
## English 🇬🇧
### Overview
`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.
### Features
- Derive macros for struct field comparisons.
- Simple integration with existing types.
- Helps reduce repetitive and error-prone code.
### Example
```rust
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);
}
````
---
## Français 🇫🇷
### Présentation
`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.
### Fonctionnalités
* Macros derive pour comparer les champs de structures.
* Intégration simple avec vos types existants.
* Réduit le code répétitif et sujet aux erreurs.
### Exemple
```rust
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);
}
```
---
## License
This project is licensed under either:
* MIT license ([LICENSE-MIT](LICENSE-MIT) or [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT))
* Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0))
at your option.
---
## Contribution
Contributions, issues and feature requests are welcome!
Feel free to open a PR or an issue in the [GitLab repository](https://gitlab.com/seb.sannac.pro/field-comparable).
---