1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//! Cassiopeia line generator
//!
//! This module takes a set of IR lines, and generates strings from
//! them that are in accordance with the way that the parser of the
//! same version expects them.
use crate::cass::format::ir::{IrItem, IrType};
/// Take a line of IR and generate a string to print into a file
pub(crate) fn line(ir: &IrItem) -> String {
let IrItem { tt, lo } = ir;
match tt {
IrType::Ignore => "".into(),
IrType::Header(map) => format!(
"HEADER {}",
map.iter()
.map(|(k, v)| format!("{}={},", k, v))
.collect::<Vec<_>>()
.join("")
),
IrType::Start(time) => format!("START {}", time.to_string()),
// FIXME: find a better way to align the lines here rather
// than having to manually having to pad the 'STOP' commands
IrType::Stop(time) => format!("STOP {}", time.to_string()),
IrType::Invoice(date) => format!("INVOICE {}", date.to_string()),
}
}
pub(crate) fn head_comment() -> String {
";; generated by cassiopeia, be careful about editing by hand!".into()
}
|