trey 0.2.0

Writing V3000 CTfiles.
Documentation
use crate::header::Header;

pub fn header(header: &Header) -> Vec<String> {
    let mut result = Vec::new();

    result.push(header.name.to_string());
    result.push(
        format!(
            "{}{}{}{}{}{}{}",
            header.initials.iter().collect::<String>(),
            header.program.iter().collect::<String>(),
            header.timestamp,
            header.dimensional_code,
            header.scaling_factors.iter().collect::<String>(),
            header.energy.iter().collect::<String>(),
            header.registry_number.iter().collect::<String>(),
        )
        .trim_end()
        .to_string(),
    );
    result.push(header.comments.to_string());
    result.push("  0  0  0     0  0            999 V3000".to_string());

    result
}

#[cfg(test)]
mod tests {
    use crate::header::{Comment, Name};

    use super::*;
    use pretty_assertions::assert_eq;

    #[test]
    fn default() {
        let hdr = Header::default();

        assert_eq!(
            header(&hdr),
            vec![
                "",
                "  MM V3K  01017000002D",
                "",
                "  0  0  0     0  0            999 V3000",
            ]
        )
    }

    #[test]
    fn custom_name_and_comments() {
        let hdr = Header {
            name: Name::try_from("name").unwrap(),
            comments: Comment::try_from("comment...").unwrap(),
            ..Default::default()
        };

        assert_eq!(
            header(&hdr),
            vec![
                "name",
                "  MM V3K  01017000002D",
                "comment...",
                "  0  0  0     0  0            999 V3000",
            ]
        )
    }
}