desugar-impl 0.1.1

Sugar for less explicit generics in structs, enums, and union declarations.
Documentation
use std::fmt::{Debug, Result, Write};

use desugar_impl::desugar_impl;

#[desugar_impl]
#[derive(Clone, Debug, PartialEq, PartialOrd, Eq, Ord)]
struct ExampleStruct {
    a: impl Clone + Debug + PartialEq + PartialOrd + Eq + Ord,
    b: impl Clone + Debug + PartialEq + PartialOrd + Eq + Ord,
    c: impl Clone + Debug + PartialEq + PartialOrd + Eq + Ord,
}

#[test]
fn compile_test() -> Result {
    let a = ExampleStruct {
        a: &1,
        b: "hello",
        c: true,
    };
    let b = ExampleStruct {
        a: &3,
        b: "world",
        c: false,
    };
    let c = ExampleStruct {
        a: &1,
        b: ":)",
        c: true,
    };

    let mut dbg_str = String::new();
    write!(dbg_str, "{:?}", &a)?;
    assert_eq!(dbg_str, "ExampleStruct { a: 1, b: \"hello\", c: true }");

    let mut dbg_str = String::new();
    write!(dbg_str, "{:?}", &b)?;
    assert_eq!(dbg_str, "ExampleStruct { a: 3, b: \"world\", c: false }");

    let mut dbg_str = String::new();
    write!(dbg_str, "{:?}", &c)?;
    assert_eq!(dbg_str, "ExampleStruct { a: 1, b: \":)\", c: true }");

    let mut abc = vec![a.clone(), b.clone(), c.clone()];
    abc.sort();
    assert_eq!(abc, vec![c, a, b]);

    Ok(())
}