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
33
34
35
36
37
38
39
40
41
42
43
use clap::Parser;

mod cli;
mod formatted_output;
mod temperature;

pub fn run() {
    let cli = cli::Cli::parse();

    let temperature_in = cli.temperature_in();
    let temperature_out = cli.temperature_out();
    let original_value = cli.value();

    let format = cli.format();

    let result = cli.convert();

    let output =
        formatted_output::Output::new(temperature_in, original_value, temperature_out, result);

    let output_string = if cli.only_value() {
        format!("{result}")
    } else if let Some(format) = format {
        match format {
            formatted_output::Format::Json => output.to_json().unwrap(),
            formatted_output::Format::Yaml => output.to_yaml().unwrap(),
            formatted_output::Format::Toml => output.to_toml().unwrap(),
        }
    } else {
        format!("Result: {result}")
    };

    if let Some(path) = cli.output() {
        let result = std::fs::write(path.as_path(), output_string);
        match result {
            Ok(_) if cli.verbose() => println!("Sucessfully saved at {}", path.display()),
            Err(e) => eprintln!("{e}"),
            _ => {}
        }
    } else {
        println!("{}", output_string);
    }
}