iris-reader 1.0.0

A terminal-native viewer for documents, structured data, images, PDFs, databases, and stdin.
Documentation
pub mod app;
pub mod cli;
pub mod config;
pub mod image;
pub mod input;
pub mod options;
pub mod renderer;
pub mod search;
pub mod theme;
pub mod ui;

use anyhow::Result;
use clap::Parser;

use app::App;
use cli::Cli;
use config::Config;
use input::read_input;
use renderer::ViewDocument;
use theme::Theme;

pub fn run() -> Result<()> {
    let cli = Cli::parse();

    if cli.list_themes {
        for theme in Theme::list_available() {
            println!("{theme}");
        }
        return Ok(());
    }

    let config = Config::load()?.apply_cli(&cli);
    let theme = Theme::load(&config.theme, config.icons)?;
    let input = read_input(cli.input.as_deref(), cli.format)?;
    let document = ViewDocument::from_input(&input);
    let mut app = App::new(
        input.name,
        input.kind,
        input.base_dir,
        document,
        theme,
        config.wrap,
        config.tab_width,
    );

    ratatui::run(|terminal| app.run(terminal))?;
    Ok(())
}