aboutsummaryrefslogtreecommitdiff
path: root/src/display.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/display.rs')
-rw-r--r--src/display.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/display.rs b/src/display.rs
new file mode 100644
index 0000000..6316f95
--- /dev/null
+++ b/src/display.rs
@@ -0,0 +1,62 @@
+use colored::*;
+use std::{fs::File, path::PathBuf};
+use tracing::{error, info};
+use tracing_subscriber::{fmt, prelude::*, EnvFilter};
+
+pub struct Display {
+ pub log_file: PathBuf,
+ pub output_dir: Option<PathBuf>,
+}
+
+impl Display {
+ pub fn new(book_id: &str) -> Self {
+ let log_file = std::env::current_dir()
+ .unwrap()
+ .join(format!("info_{}.log", book_id));
+
+ let d = Self {
+ log_file,
+ output_dir: None,
+ };
+
+ let file = File::create(&d.log_file).expect("Cannot create log file");
+
+ tracing_subscriber::registry()
+ .with(EnvFilter::from_default_env())
+ .with(fmt::layer().with_writer(std::io::stdout))
+ .with(fmt::layer().with_writer(file).with_ansi(false))
+ .init();
+
+ d.intro();
+ info!("** Welcome to SafariBooks (Rust) **");
+ d
+ }
+
+ pub fn intro(&self) {
+ let banner = r#"
+ ____ __ _ ____ _
+/ ___| __ _ / _| __ _ _ __(_) _ \ _ _ ___| |_
+\___ \ / _` | |_ / _` | '__| | |_) | | | / __| __|
+ ___) | (_| | _| (_| | | | | _ <| |_| \__ \ |_
+|____/ \__,_|_| \__,_|_| |_|_| \_\\__,_|___/\__|
+"#;
+ println!("{}", banner.yellow());
+ println!("{}", "~".repeat(32));
+ }
+
+ pub fn info(&self, msg: &str) {
+ println!("{} {}", "[*]".yellow(), msg);
+ info!("{msg}");
+ }
+
+ pub fn error_and_exit(&self, msg: &str) -> ! {
+ eprintln!("{} {}", "[!]".on_red().white(), msg);
+ error!("{msg}");
+ std::process::exit(1);
+ }
+
+ pub fn set_output_dir(&mut self, dir: PathBuf) {
+ self.output_dir = Some(dir.clone());
+ self.info(&format!("Output directory:\n {}", dir.display()));
+ }
+}