proffer 0.5.0

Rust code generation
Documentation
use proffer::*;

fn normalize_whitespace(s: &str) -> String {
    s.split("\n")
        .map(|l| l.trim())
        .filter(|l| l.len() > 0)
        .collect::<String>()
}

#[test]
fn basic_gen() {
    let struct_ = Struct::new("Basic")
        .set_is_pub(true)
        .add_field(
            Field::new("field1", "String")
                .set_is_pub(true)
                .add_annotation("#[serde = w]")
                .add_doc("/// Some example documentation")
                .add_docs(vec!["/// Another line", "/// and another"])
                .to_owned(),
        )
        .add_field(Field::new("field2", "usize"))
        .to_owned();
    let expected = r#"
        pub struct Basic {
            /// Some example documentation
            /// Another line
            /// and another
            #[serde = w]
            pub field1: String,
            field2: usize,
         }
        "#
    .to_owned();
    let src_code = struct_.generate();
    println!("{}", &src_code);
    assert_eq!(
        normalize_whitespace(&src_code),
        normalize_whitespace(&expected)
    );
}

#[test]
fn generic_gen() {
    let s = Struct::new("Generic")
        .set_is_pub(true)
        .add_generic(
            Generic::new("T")
                .add_trait_bounds(vec!["ToString"])
                .to_owned(),
        )
        .add_generic(
            Generic::new("S")
                .add_trait_bounds(vec!["ToString", "Number"])
                .to_owned(),
        )
        .add_field(Field::new("field1", "S"))
        .add_field(Field::new("field2", "T"))
        .to_owned();
    let src_code = s.generate();
    println!("{}", &src_code);
    let expected = r#"
        pub struct Generic<T, S>
            where
                T: ToString,
                S: ToString + Number,
        {
            field1: S,
            field2: T,
        }
    "#;
    let src_code = s.generate();
    assert_eq!(
        normalize_whitespace(&src_code),
        normalize_whitespace(&expected)
    );
}