format-attr 0.2.1

a custom derive to implement Debug/Display easy
Documentation
use format_attr::{DebugAttr, DisplayAttr};

#[derive(DisplayAttr, DebugAttr)]
#[fmt("Point({}, {})", self.x, self.y)]
struct Point {
    x: i32,
    y: i32,
}

#[derive(DisplayAttr, DebugAttr)]
#[fmt("Person: {}", self.name)]
struct Person {
    name: String,
    age: u32,
}

#[derive(DisplayAttr, DebugAttr)]
#[fmt("{} - {} years old", self.name, self.age)]
struct Employee {
    name: String,
    age: u32,
}

#[test]
fn test_point_display() {
    let p = Point { x: 10, y: 20 };
    assert_eq!(format!("{}", p), "Point(10, 20)");
}

#[test]
fn test_point_debug() {
    let p = Point { x: 10, y: 20 };
    assert_eq!(format!("{:?}", p), "Point(10, 20)");
}

#[test]
fn test_person_display() {
    let person = Person {
        name: "Alice".to_string(),
        age: 30,
    };
    assert_eq!(format!("{}", person), "Person: Alice");
}

#[test]
fn test_employee_display() {
    let emp = Employee {
        name: "Bob".to_string(),
        age: 25,
    };
    assert_eq!(format!("{}", emp), "Bob - 25 years old");
}

#[test]
fn test_employee_debug() {
    let emp = Employee {
        name: "Bob".to_string(),
        age: 25,
    };
    assert_eq!(format!("{:?}", emp), "Bob - 25 years old");
}