assemblist 1.3.0

Define your builder patterns as you use them.
Documentation
use assemblist::assemblist;

#[test]
pub fn decompose_replacen() {
    assemblist! {
        pub fn replace_in<'a>(string: &'a str)
            .occurrences_of(pattern: &'a str)
            .with(to: &'a str)
            .at_most(n: usize)
            .times() -> String
        {
            string.replacen(pattern, to, n)
        }
    }

    let text = "Une souris verte qui courait dans l'herbe \
        Je l'attrape par la queue, je la montre à ces messieurs \
        Ces messieurs me disent 'trempez-la dans l'huile' \
        'Trempez-la dans l'eau, ça fera un escargot'";

    let result = replace_in(text)
        .occurrences_of("l'")
        .with("z'")
        .at_most(3)
        .times();

    assert_eq!(
        result,
        "Une souris verte qui courait dans z'herbe \
        Je z'attrape par la queue, je la montre à ces messieurs \
        Ces messieurs me disent 'trempez-la dans z'huile' \
        'Trempez-la dans l'eau, ça fera un escargot'"
    );
}

#[test]
fn decompose_resize_with() {
    assemblist! {
        pub fn resize_vec<'a, T>(vec: &'a mut Vec<T>)
            .to(new_len: usize)
            .filling_with(f: impl FnMut() -> T)
        {
            Vec::<T>::resize_with(vec, new_len, f)
        }
    };

    let mut a = vec![12, 54, -9, 0, 3434];

    resize_vec(&mut a).to(8).filling_with(|| 42);

    assert_eq!(a, vec![12, 54, -9, 0, 3434, 42, 42, 42]);
}