analyst 0.1.0

A command line tool that supports quick browsing of csv data.
Documentation
use crate::reader::StreamingCsvReader;
use anyhow::{Result, anyhow};
use prettytable::{Table, Row, Cell};

pub fn analyze(reader: StreamingCsvReader, start: usize, end: usize) -> Result<()> {
    if start < 1 || end < start || end - start + 1 > 100 {
        return Err(anyhow!("Invalid range. Start should be >= 1, end should be >= start, and range should not exceed 100 rows."));
    }

    let headers = reader.headers();
    let mut table = Table::new();
    table.add_row(Row::from_iter(headers.iter().map(|h| Cell::new(h))));

    for (i, result) in reader.enumerate() {
        if i + 1 > end {
            break;
        }
        if i + 1 >= start {
            let record = result?;
            table.add_row(Row::from_iter(record.iter().map(|field| Cell::new(field))));
        }
    }

    if table.len() == 1 {
        println!("No data found in the specified range.");
    } else {
        table.printstd();
    }

    Ok(())
}