admerge 0.1.3

Merge multiply sources into one, with advanced options
Documentation
use admerge::*;
use std::io::Cursor;
use std::str;

#[test]
fn test_pad_with_before() {
    let mut buf = Vec::new();
    let mut merger = RsMerger::new();

    let mut c1 = Cursor::new(" c1 ");
    let mut c2 = Cursor::new(" c2 ");
    let mut c3 = Cursor::new(" c3 ");

    merger.pad_with(Pad::Before(b""));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), " c1  c2  c3 "),
        Err(_) => assert!(false),
    }

    merger.pad_with(Pad::Before(b"leading"));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), "leading c1  c2  c3 "),
        Err(_) => assert!(false),
    }
}

#[test]
fn test_pad_with_between() {
    let mut buf = Vec::new();
    let mut merger = RsMerger::new();

    let mut c1 = Cursor::new(" c1 ");
    let mut c2 = Cursor::new(" c2 ");
    let mut c3 = Cursor::new(" c3 ");

    merger.pad_with(Pad::Between(b""));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), " c1  c2  c3 "),
        Err(_) => assert!(false),
    }

    merger.pad_with(Pad::Between(b"inner"));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), " c1 inner c2 inner c3 "),
        Err(_) => assert!(false),
    }
}

#[test]
fn test_pad_with_after() {
    let mut buf = Vec::new();
    let mut merger = RsMerger::new();

    let mut c1 = Cursor::new(" c1 ");
    let mut c2 = Cursor::new(" c2 ");
    let mut c3 = Cursor::new(" c3 ");

    merger.pad_with(Pad::After(b""));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), " c1  c2  c3 "),
        Err(_) => assert!(false),
    }

    merger.pad_with(Pad::After(b"ending"));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), " c1  c2  c3 ending"),
        Err(_) => assert!(false),
    }
}

#[test]
fn test_pad_with_custom() {
    let mut buf = Vec::new();
    let mut merger = RsMerger::new();

    let mut c1 = Cursor::new(" c1 ");
    let mut c2 = Cursor::new(" c2 ");
    let mut c3 = Cursor::new(" c3 ");

    merger.pad_with(Pad::Custom(Some(b""), Some(b""), Some(b"")));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(str::from_utf8(&buf).unwrap(), " c1  c2  c3 "),
        Err(_) => assert!(false),
    }

    merger.pad_with(Pad::Custom(
        Some(b"leading"),
        Some(b"inner"),
        Some(b"ending"),
    ));
    buf.clear();
    match merger.merge_sources_into(vec![&mut c1, &mut c2, &mut c3], &mut buf) {
        Ok(_) => assert_eq!(
            str::from_utf8(&buf).unwrap(),
            "leading c1 inner c2 inner c3 ending"
        ),
        Err(_) => assert!(false),
    }
}