dot-multisample 0.1.0

Bindings to the .multisample manifest file format
Documentation
use std::path::Path;

use dot_multisample::*;

fn write<T: serde::Serialize>(data: T) -> String {
    let mut out = String::new();
    let mut s = quick_xml::se::Serializer::new(&mut out);
    s.expand_empty_elements(true);
    s.indent(' ', 2);
    data.serialize(s).unwrap();
    out
}

#[test]
fn empty() {
    assert_eq!(
        write(Multisample::default()),
        include_str!("data/empty.xml")
    );
}

#[test]
fn just_groups() {
    assert_eq!(
        write(Multisample::default().with_groups(vec![
            Group::default().with_name("First"),
            Group::default().with_name("Second"),
        ],)),
        include_str!("data/groups.xml")
    );
}

#[test]
fn more_detailed() {
    assert_eq!(
        write(
            Multisample::default()
                .with_name("1980s FM Synth")
                .with_generator("multirec")
                .with_category("Pad")
                .with_description("Very large plastic synthesizer playing a pad sound")
                .with_keywords(["Pad", "Synth", "Glassy", "Retro"])
                .with_samples([
                    Sample::default().with_file(AsRef::<Path>::as_ref("C2.wav")),
                    Sample::default().with_file(AsRef::<Path>::as_ref("F2.wav")),
                    Sample::default().with_file(AsRef::<Path>::as_ref("A#2.wav")),
                    Sample::default().with_file(AsRef::<Path>::as_ref("D#3.wav")),
                ])
        ),
        include_str!("data/details.xml")
    );
}