treed_gpu 0.1.0

Build TreeD with GPU
use std::io;
use std::path::PathBuf;
use std::str::FromStr;

use clap::Parser;
use log4rs::append::console::ConsoleAppender;
use log4rs::config::{Appender, Root};
use log4rs::encode::pattern::PatternEncoder;
use log::LevelFilter;

fn logger_init() {
    let pattern = if cfg!(debug_assertions) {
        "[{d(%Y-%m-%d %H:%M:%S)}] {h({l})} {f}:{L} - {m}{n}"
    } else {
        "[{d(%Y-%m-%d %H:%M:%S)}] {h({l})} {t} - {m}{n}"
    };

    let stdout = ConsoleAppender::builder()
        .encoder(Box::new(PatternEncoder::new(pattern)))
        .build();

    let config = log4rs::Config::builder()
        .appender(Appender::builder().build("stdout", Box::new(stdout)))
        .build(
            Root::builder()
                .appender("stdout")
                .build(LevelFilter::from_str(
                    &std::env::var("BUILD_TREE_LOG").unwrap_or_else(|_| String::from("INFO")),
                ).unwrap()),
        ).unwrap();

    log4rs::init_config(config).unwrap();
}

#[derive(Parser)]
struct Args {
    #[arg(short, long)]
    unsealed_path: PathBuf,

    #[arg(short, long, default_value = "treed_file" )]
    output_treed: PathBuf
}

fn main() -> io::Result<()> {
    let args = Args::parse();

    let out_path = args.output_treed;
    let in_path = args.unsealed_path;

    logger_init();

    let md = std::fs::metadata(&in_path)?;

    let mut buf = vec![0u8; md.len() as usize * 2 - 32];
    let _root = treed_gpu::build_treed(&in_path, &out_path, &mut buf, 4 * 1024 * 1024 * 1024)?;
    Ok(())
}