1use crate::header::Header;
2
3pub fn header(header: &Header) -> Vec<String> {
4 let mut result = Vec::new();
5
6 result.push(header.name.to_string());
7 result.push(
8 format!(
9 "{}{}{}{}{}{}{}",
10 header.initials.iter().collect::<String>(),
11 header.program.iter().collect::<String>(),
12 header.timestamp,
13 header.dimensional_code,
14 header.scaling_factors.iter().collect::<String>(),
15 header.energy.iter().collect::<String>(),
16 header.registry_number.iter().collect::<String>(),
17 )
18 .trim_end()
19 .to_string(),
20 );
21 result.push(header.comments.to_string());
22 result.push(" 0 0 0 0 0 999 V3000".to_string());
23
24 result
25}
26
27#[cfg(test)]
28mod tests {
29 use crate::header::{Comment, Name};
30
31 use super::*;
32 use pretty_assertions::assert_eq;
33
34 #[test]
35 fn default() {
36 let hdr = Header::default();
37
38 assert_eq!(
39 header(&hdr),
40 vec![
41 "",
42 " MM V3K 01017000002D",
43 "",
44 " 0 0 0 0 0 999 V3000",
45 ]
46 )
47 }
48
49 #[test]
50 fn custom_name_and_comments() {
51 let hdr = Header {
52 name: Name::try_from("name").unwrap(),
53 comments: Comment::try_from("comment...").unwrap(),
54 ..Default::default()
55 };
56
57 assert_eq!(
58 header(&hdr),
59 vec![
60 "name",
61 " MM V3K 01017000002D",
62 "comment...",
63 " 0 0 0 0 0 999 V3000",
64 ]
65 )
66 }
67}