weather_parser 0.1.0

A parser for extracting data about weather
Documentation
use anyhow::Result;
use serde_json::json;
use std::env;
use std::fs::File;
use std::io::{Read, Write};
use weather_parser::parse_input;

fn main() -> Result<()> {
    let args: Vec<String> = env::args().collect();

    if args.len() < 2 {
        println!("Usage: run code using specific arguments\n");
        println!("cargo run <command> [options]\n");
        println!("Commands:");
        println!(
            "  parse <input_file> <output_file>  -Parse the input file and save to output file"
        );
        println!("  help                              -Show help information");
        println!("  credits                           -Show credits");
        return Ok(());
    }

    match args[1].as_str() {
        "parse" => {
            if args.len() != 4 {
                eprintln!("Error: 'parse' command requires an input file and an output file.");
                return Ok(());
            }
            let input_file_name = &args[2];
            let output_file_name = &args[3];

            let mut file = File::open(input_file_name)?;
            let mut input = String::new();
            file.read_to_string(&mut input)?;

            match parse_input(&input) {
                Ok(weather_report) => {
                    let weather_json = json!(weather_report);
                    let formatted_json = serde_json::to_string_pretty(&weather_json).unwrap();

                    let mut output_file = File::create(output_file_name)?;
                    output_file.write_all(formatted_json.as_bytes())?;

                    println!("JSON data has been written to {}", output_file_name);
                }
                Err(e) => eprintln!("Error: {}", e),
            }
        }
        "help" => {
            println!("Usage: run code using specific arguments\n");
            println!("cargo run <command> [options]\n");
            println!("Commands:");
            println!(
                "  parse <input_file> <output_file>  -Parse the input file and save to output file"
            );
            println!("  help                              -Show help information");
            println!("  credits                           -Show credits");
            println!("\nAdditional explanations:\n");
            println!("To use this parser you must have data in format, displayed at input.txt");
            println!("General structure:");
            println!("Condition: *condition_type*; Temperature: *temperature*C; Humidity: *humidity*%; Wind: *direction* *speed*km/h; Precipitation: *precipitation_type* *amount*mm; Visibility: *distance*km; Cloud Cover: *percentage*%; Pressure: *pressure*hPa; UV Index: *uv_index*; Air Quality: *air_quality_level*; Sunrise: *time*; Sunset: *time*; Cloud Types: *cloud_type*, *cloud_type*, ...");
            println!("Write all of it in one line.");
            println!("You will get JSON on the out.");
        }
        "credits" => {
            println!("Weather Parser");
            println!("Developed by Andrii Kviatkovskyi");
            println!("Student of NaUKMA SE-3");
        }
        _ => {
            eprintln!("Unknown command");
            println!("Run 'cargo run help' to see available commands.");
        }
    }
    Ok(())
}