csvpp 0.5.1

Compile csv++ source code to a target spreadsheet format
Documentation
use crate::logger;
use crate::parser::ast_parser::AstParser;
use crate::{CliArgs, Compiler, Options, Output};
use log::debug;

impl TryFrom<&CliArgs> for Compiler {
    type Error = crate::Error;

    fn try_from(cli_args: &CliArgs) -> std::result::Result<Self, Self::Error> {
        let options = Options {
            key_values: AstParser::parse_key_value_str(
                &cli_args.key_values,
                &cli_args.input_filename,
            )?,
            ..Options::try_from(cli_args)?
        };

        logger::init(options.verbosity);

        let compiler = Self {
            options,
            output: Output::try_from(cli_args)?,
            input_filename: cli_args.input_filename.clone(),
        };

        debug!("Initted compiler: {compiler}");

        Ok(compiler)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::test_utils::*;

    #[test]
    fn try_from() {
        let test_file = TestSourceCode::new("csv", "foo,bar,baz");
        let cli_args = CliArgs {
            input_filename: test_file.input_file.clone(),
            google_sheet_id: Some("abc123".to_string()),
            ..Default::default()
        };
        let compiler = Compiler::try_from(&cli_args);

        assert!(compiler.is_ok());
    }
}