field_comparable_derive

Crates.iofield_comparable_derive
lib.rsfield_comparable_derive
version0.1.1
created_at2025-08-22 14:28:54.299201+00
updated_at2025-08-22 19:24:49.459739+00
descriptionProcedural macro to generate struct field comparison methods / Macro procédurale pour générer des méthodes de comparaison de champs de structures
homepagehttps://gitlab.com/seb.sannac.pro/field-comparable
repositoryhttps://gitlab.com/seb.sannac.pro/field-comparable
max_upload_size
id1806439
size26,464
(sebsan89)

documentation

https://docs.rs/field_comparable_derive

README

field_comparable_derive

Crates.io Documentation 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

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

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:

at your option.


Contribution

Contributions, issues and feature requests are welcome! Feel free to open a PR or an issue in the GitLab repository.


Commit count: 4

cargo fmt