reefast 0.0.1

Rust Engine for Eve Fit Analysis, Statistics and Theorycrafting.
Documentation
use std::collections::HashMap;
use std::path::PathBuf;

use chrono;

use reefast::consts::{EveEffectCategory, EveModDomain, EveModOperator};
use reefast::dh::{self, DataHandler};
use reefast::dh_impls::phobos;
use reefast::eve_type::{Attribute, Effect, Item, ItemModifier};

fn setup_logger() -> Result<(), fern::InitError> {
    fern::Dispatch::new()
        .format(|out, message, record| {
            out.finish(format_args!(
                "{}[{}][{}] {}",
                chrono::Local::now().format("[%H:%M:%S%.3f]"),
                record.target(),
                record.level(),
                message
            ))
        })
        .level(log::LevelFilter::Debug)
        .chain(std::io::stdout())
        .chain(fern::log_file("output.log")?)
        .apply()?;
    Ok(())
}

fn print_data<T>(name: &'static str, data: dh::Result<dh::Container<T>>) {
    match data {
        Ok(r) => {
            println!("{}: {} returned, {} failed", name, r.data.len(), r.errors.len());
            for e in r.errors.iter() {
                println!("  error: {}", e)
            }
        }
        Err(e) => println!("{} failed: {}", name, e),
    }
}

fn main() {
    setup_logger().unwrap();
    let _attr = Attribute::new(0, Some(5), Some(50.0), false, false);
    let _eff = Effect::new(
        0,
        EveEffectCategory::Active,
        false,
        false,
        Some(0),
        Some(0),
        Some(0),
        Some(0),
        Some(0),
        Some(0),
        Some(0),
    );
    let _mod = ItemModifier::new(EveModDomain::Ship, 0, EveModOperator::PostPercent, 0);
    let _item = Item::new(1, 2, 3, HashMap::new(), HashMap::new(), None);

    let dh = phobos::PhobosHandler::new(PathBuf::from("/home/dfx/Desktop/phobos_tq_en-us"));
    println!("using {:?}", dh);
    print_data("items", dh.get_items());
    print_data("item groups", dh.get_item_groups());
    print_data("attributes", dh.get_attrs());
    print_data("item-attribute rels", dh.get_item_attrs());
    print_data("effects", dh.get_effects());
    print_data("item-effect rels", dh.get_item_effects());
    print_data("mutaplasmid item convs", dh.get_muta_item_convs());
    print_data("mutaplasmid attr mods", dh.get_muta_attr_mods());
    print_data("buffs", dh.get_buffs());
    print_data("fighter abilities", dh.get_fighter_abils());
    print_data("item-fighter ability rels", dh.get_item_fighter_abils());
    print_data("item skill requirements", dh.get_item_skill_reqs());
    match dh.get_version() {
        Ok(r) => println!("data version: {}", r),
        Err(e) => println!("version failed: {}", e),
    }
}