use better_panic;
use log::info;
extern crate probabilistic_data_structures;
pub mod lib;
fn main() -> std::io::Result<()> {
std::env::set_var("RUST_BACKTRACE", "1");
std::env::set_var("RUST_LOG", "trace");
better_panic::Settings::debug()
.most_recent_first(true)
.backtrace_first(true)
.lineno_suffix(true)
.verbosity(better_panic::Verbosity::Full)
.install();
let (width, height) = lib::terminal_utils::dimensions_or_exit();
let separator: String =
"-".repeat((width - "[2020-08-20T10:11:28Z INFO main] ".len()) as usize);
const COLOUR_BORDER: &str = "\x1b[44m";
const RESET: &str = "\x1b[0m";
let cli = lib::cli::new();
#[allow(unused_assignments)]
let mut log_level = cli.log_level.as_str();
log_level = "debug";
let rust_log = format!("{}", log_level);
std::env::set_var("RUST_LOG", rust_log);
env_logger::init();
info!("main: cli={:?}, width={:?}, height={:?}", cli, width, height);
info!("{}{}{}", COLOUR_BORDER, separator, RESET);
{
let pkg_name = env!("CARGO_PKG_NAME");
let pkg_version = env!("CARGO_PKG_VERSION");
let pkg_repository = env!("CARGO_PKG_REPOSITORY");
info!("main: {}@{} -> {}", pkg_name, pkg_version, pkg_repository);
}
let lines: Vec<String> = read_lines()?;
let mut pcsa = probabilistic_data_structures::pcsa::PCSA::new();
for line in lines {
pcsa.add(line)?;
}
info!("main: pcsa={:?}", pcsa);
info!("main: pcsa.count()={:?}", pcsa.cardinality());
info!("{}{}{}", COLOUR_BORDER, separator, RESET);
Ok(())
}
fn read_lines() -> std::io::Result<Vec<String>> {
use std::{
fs::File,
io::{prelude::*, BufReader},
};
let file = File::open("testdata/countdistinct/elements.txt")?;
let reader = BufReader::new(file);
let mut lines: Vec<String> = Vec::new();
for line in reader.lines() {
let l = line?;
lines.push(l);
}
Ok(lines)
}