//! 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::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::>() .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() }