temp-converter 1.1.2

Simple terminal temperature unit converter between Celsius, Fahrenheit and Kelvin.
Documentation
use console::style;
use dialoguer::{theme::ColorfulTheme, Input, Select};
use temp_converter::*;
use thousands::Separable;

fn main() -> std::io::Result<()> {
    // Define the possible choices of temperature units
    let items = vec!["Celsius", "Fahrenheit", "Kelvin"];

    // User prompt for selecting the initial temperature unit
    let from = Select::with_theme(&ColorfulTheme::default())
        .with_prompt("What unit do you want to convert from?")
        .clear(true)
        .report(true)
        .items(&items)
        .default(0)
        .interact_opt()?;

    if from.is_none() {
        println!("Goodbye!");
        return Ok(());
    }

    // User prompt for the output temperature unit
    let to = Select::with_theme(&ColorfulTheme::default())
        .with_prompt("What unit do you want to convert it into?")
        .clear(true)
        .report(true)
        .items(&items)
        .default(0)
        .interact_opt()?;

    if to.is_none() {
        println!("Goodbye!");
        return Ok(());
    }

    // Initial value prompt
    let input: String = Input::with_theme(&ColorfulTheme::default())
        .with_prompt("Please write the value")
        .report(true)
        .validate_with(|input: &String| -> Result<(), &str> {
            if input.parse::<f32>().is_ok() {
                Ok(())
            } else {
                Err("Please input a valid number")
            }
        })
        .interact_text()?;

    // Convert the input string to a floating point number,
    // unwrapping fearlessly because the input has already been validated
    let input_number: f32 = input.parse().unwrap();
    let result: f32;

    // Stack allocated buffer for result formatting
    let mut output = String::new();

    // Match all possible choices, using the corresponding function on each one
    if let Some(from_index) = from {
        if let Some(to_index) = to {
            match from_index {
                0 => {
                    if to_index == 1 {
                        result = celsius_to_fahrenheit(input_number);
                        output = format!(
                            "{} {} °F",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    } else if to_index == 2 {
                        result = celsius_to_kelvin(input_number);
                        output = format!(
                            "{} {} K",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    } else {
                        result = input_number;
                        output = format!(
                            "{} {} °C",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    }
                }
                1 => {
                    if to_index == 0 {
                        result = fahrenheit_to_celsius(input_number);
                        output = format!(
                            "{} {} °C",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    } else if to_index == 2 {
                        result = fahrenheit_to_kelvin(input_number);
                        output = format!(
                            "{} {} K",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    } else {
                        result = input_number;
                        output = format!(
                            "{} {} °F",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    }
                }
                2 => {
                    if to_index == 0 {
                        result = kelvin_to_celsius(input_number);
                        output = format!(
                            "{} {} °C",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    } else if to_index == 1 {
                        result = kelvin_to_fahrenheit(input_number);
                        output = format!(
                            "{} {} °F",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    } else {
                        result = input_number;
                        output = format!(
                            "{} {} K",
                            style("Result:").green(),
                            result.separate_with_commas()
                        );
                    }
                }
                _ => {}
            }
        }
    }

    println!("{output}");

    Ok(())
}