aboutsummaryrefslogtreecommitdiff
path: root/apps/cassiopeia/src/format/gen.rs
//! 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::<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()
}