From 3f6e996c64d24574f71ae45ae1ba03e1bc0c7092 Mon Sep 17 00:00:00 2001 From: Valerie Date: Sat, 26 Aug 2023 00:00:55 -0400 Subject: [PATCH] added ANSI formatting for better output readability --- Cargo.toml | 4 ++-- README.md | 1 + src/operation.rs | 42 +++++++++++++++++++++++++++++------------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7547e7e..9fa5ff5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,13 @@ [package] name = "oink" -version = "0.1.0" +version = "0.1.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -#copy_dir = "0.1.3" pico-args = "0.5.0" +termion = "2.0.1" toml = "0.7.6" upon = "0.7.1" diff --git a/README.md b/README.md index 647338e..e72cae7 100644 --- a/README.md +++ b/README.md @@ -41,5 +41,6 @@ path = "/home/test/.config/oink/oink.toml" ## Libraries - [pico-args](https://crates.io/crates/pico-args) — argument parsing +- [termion](https://crates.io/crates/termion) — ANSI formatting - [toml](https://crates.io/crates/toml) — configuration parsing - [upon](https://crates.io/crates/upon) — template engine diff --git a/src/operation.rs b/src/operation.rs index 4df09dd..b4f1ddb 100644 --- a/src/operation.rs +++ b/src/operation.rs @@ -6,11 +6,23 @@ use std::{ path::{ Path, PathBuf } }; +use termion::{ + color::{ self, Fg }, + style::{ + Bold as BOLD, + Italic as ITALIC, + Reset as RESET + } +}; use toml::{ map::Map, Value }; use upon::Engine; use crate::config::Config; +static SUCCESS: Fg = Fg(color::Green); +static WARNING: Fg = Fg(color::Yellow); +static FAILURE: Fg = Fg(color::Red); + pub fn apply(targets: &Vec>) { let home = var("HOME").unwrap(); println!("running apply:"); @@ -23,12 +35,12 @@ pub fn apply(targets: &Vec>) { if path.is_none() { if i_name.is_some() { let name = i_name.unwrap().as_str().unwrap(); - println!(" \"{name}\" is missing its path property; skipping"); - } else { println!(" skipping empty target"); } + println!(" {WARNING}\"{name}\" is missing its path property; skipping{RESET}"); + } else { println!(" {WARNING}skipping empty target{RESET}"); } continue; } if i_name.is_none() { - println!(" target missing name; skipping"); + println!(" {WARNING}target missing name; skipping{RESET}"); continue; } @@ -43,8 +55,12 @@ pub fn apply(targets: &Vec>) { // copy and print let result = fs::copy(source, destination); - if result.is_err() { println!(" failed to copy!"); } - else { println!(" completed successfully"); } + if result.is_err() { + println!(" {BOLD}{FAILURE}failed to copy{RESET}"); + } + else { + println!(" {BOLD}{SUCCESS}completed{RESET}"); + } } } @@ -60,7 +76,7 @@ pub fn build(targets: &Vec>, template_dir: String, config: &C let i_name = target.get("name"); // handle empty names gracefully if i_name.is_none() { - println!(" target missing name; skipping"); + println!(" {WARNING}target missing name; skipping{RESET}"); continue; } @@ -69,23 +85,23 @@ pub fn build(targets: &Vec>, template_dir: String, config: &C println!(" building \"{name}\":"); // compile - println!(" compiling"); + println!(" {ITALIC}compiling{RESET}"); let mut path = PathBuf::from(&template_dir); path.push(name); let content = read_to_string(path).unwrap(); let template = engine.compile(&content); if template.is_err() { let error = template.err().unwrap(); - println!(" failed to compile template:\n {error}\n skipping"); + println!(" {BOLD}{FAILURE}failed to compile template:{RESET}\n {FAILURE}{error}\n {BOLD}skipping{RESET}"); continue; } // render - println!(" rendering"); + println!(" {ITALIC}rendering{RESET}"); let render = template.unwrap().render(&context).to_string(); if render.is_err() { let error = render.err().unwrap(); - println!(" failed to render template:\n {error}\n skipping"); + println!(" {BOLD}{FAILURE}failed to render template:{RESET}\n {FAILURE}{error}\n {BOLD}skipping{RESET}"); continue; } @@ -95,14 +111,14 @@ pub fn build(targets: &Vec>, template_dir: String, config: &C let path = Path::new(&destination); let i_file = File::create(path); if i_file.is_err() { - println!(" failed to create destination file at {path:?}"); + println!(" {BOLD}{FAILURE}failed to create destination file at {path:?}{RESET}"); continue; } let mut file = i_file.unwrap(); // write to destination file let written = write!(&mut file, "{output}"); - if written.is_err() { println!(" failed to write to destination file at {path:?}"); } - else { println!(" completed"); } + if written.is_err() { println!(" {FAILURE}failed to write to destination file at {path:?}{RESET}"); } + else { println!(" {BOLD}{SUCCESS}completed{RESET}"); } } }