salti 0.5.0

A modern, fast, multiple sequence alignment browser - built for the terminal.
Documentation
use clap::Parser;
use color_eyre::Result;
use crossterm::event::{DisableMouseCapture, EnableMouseCapture};
use crossterm::execute;
use salti::{app::App, cli::Cli, logging};
use std::io::stdout;
use tracing::{error, info};

#[tokio::main]
async fn main() -> Result<()> {
    color_eyre::install()?;
    let cli = Cli::parse();
    let _logger = if cli.debug {
        Some(logging::init_logging())
    } else {
        None
    };
    let startup = cli.load_startup_sate();
    info!(
        has_input_file = startup.file_path.is_some(),
        initial_position = startup.initial_position,
        "startup state: "
    );

    info!("initialising terminal");
    let terminal = ratatui::init();
    if let Err(error_value) = execute!(stdout(), EnableMouseCapture) {
        error!(error = ?error_value, "failed to enable mouse capture");
        ratatui::restore();
        return Err(error_value.into());
    }
    info!("Loading salti....");
    let app_result = App::new(startup).run(terminal).await;
    match &app_result {
        Ok(()) => {}
        Err(error_value) => error!(error = ?error_value, "salti exited with error"),
    }

    if let Err(error_value) = execute!(stdout(), DisableMouseCapture) {
        error!(error = ?error_value, "failed to disable mouse capture");
    }
    info!("restoring terminal");
    ratatui::restore();
    app_result
}