Skip to content

Commit 6c077d2

Browse files
committed
chore: introduce env_logger to make debug easier
1 parent 0a1b654 commit 6c077d2

File tree

4 files changed

+81
-27
lines changed

4 files changed

+81
-27
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,14 @@ edition = "2021"
77

88
[dependencies]
99

10+
1011
reqwest = { version = "0.11.6", features = ["blocking", "json"] }
1112
serde_json = { version = "1.0" }
1213
serde = { version = "1.0", features = ["derive"] }
1314
anyhow = { version = "1.0" }
1415
inquire = { version = "0.6.1" }
1516
colored = { version = "2" }
1617
indicatif = { version = "0.17" }
18+
log = { version = "0.4" }
19+
env_logger = { version = "0.10" }
20+
chrono = { version = "0.4" }

src/app.rs

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,50 +45,69 @@ impl App {
4545
}
4646
}
4747

48+
// begin_converting_progress_bar beginning displaying the progress bar on the screen, and
49+
// return a function to stop the progress bar.
50+
fn begin_converting_progress_bar() -> impl FnOnce() {
51+
let spinner_style = ProgressStyle::with_template("{prefix:.bold.dim} {spinner} {wide_msg}")
52+
.unwrap()
53+
.tick_chars("⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈✔");
54+
let progress_bar = ProgressBar::new_spinner();
55+
progress_bar.set_style(spinner_style);
56+
progress_bar.set_prefix("Converting");
57+
progress_bar.enable_steady_tick(std::time::Duration::from_millis(25));
58+
move || {
59+
progress_bar.finish_and_clear();
60+
}
61+
}
62+
4863
pub fn run(&mut self) {
4964
loop {
5065
match &self.status {
51-
Status::Begin(hello) => {
52-
println!("{}", hello);
66+
Status::Begin(hello_msg) => {
67+
println!("{}", hello_msg);
5368
self.status = Status::WaitingText;
5469
}
5570
Status::WaitingText => {
5671
let question = Text::new("Text: ")
57-
.with_help_message("Input 'exit' or 'quit' to end the program.")
72+
.with_help_message("Input 'quit' to quit the program.")
5873
.prompt()
5974
.unwrap();
6075

61-
if question == "exit" || question == "quit" {
76+
if question == "quit" {
6277
self.status = Status::End;
6378
continue;
6479
}
6580

66-
let spinner_style =
67-
ProgressStyle::with_template("{prefix:.bold.dim} {spinner} {wide_msg}")
68-
.unwrap()
69-
.tick_chars("⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈✔");
70-
let progress_bar = ProgressBar::new_spinner();
71-
progress_bar.set_style(spinner_style);
72-
progress_bar.enable_steady_tick(std::time::Duration::from_millis(25));
73-
progress_bar.set_prefix("Converting");
81+
let progress_bar_stopper = Self::begin_converting_progress_bar();
7482

7583
let detail = self.converter.convert(&question);
76-
progress_bar.finish_and_clear();
77-
if let Err(e) = detail {
78-
println!("Error: {}", e.to_string().red());
84+
progress_bar_stopper();
85+
86+
if detail.is_err() {
87+
log::error!(
88+
"Cannot convert the text to command detail, error: {}",
89+
detail.err().unwrap()
90+
);
91+
self.status = Status::WaitingText;
7992
continue;
8093
}
94+
8195
let detail = detail.unwrap();
96+
8297
println!("{}:", "Description".bold());
8398
for (index, desc) in detail.descriptions.iter().enumerate() {
8499
println!("{}. {}", (index + 1).to_string().bold(), desc);
85100
}
86101
println!("{}: {}", "Command".bold(), detail.command.bold());
102+
87103
self.last_detail = Some(detail);
88104
self.status = Status::WaitingUserChoice;
89105
}
90106
Status::WaitingUserChoice => {
91-
let last_detail = self.last_detail.as_ref().unwrap();
107+
let last_detail = self
108+
.last_detail
109+
.as_ref()
110+
.expect("Expecting get the last detail in WaitingUserChoice status.");
92111

93112
let options = vec![
94113
UserChoice::ExecuteCommand,
@@ -99,6 +118,7 @@ impl App {
99118
let ans = Select::new("What do you want to do next?", options)
100119
.prompt()
101120
.unwrap();
121+
102122
match ans {
103123
UserChoice::ExecuteCommand => {
104124
let result = execute_command(last_detail.command.as_str());

src/converter/openai.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ pub mod gpt35_turbo {
9797
let prompt_response: PromptResponse = serde_json::from_str(&choice.message.content)
9898
.map_err(|e| {
9999
anyhow::anyhow!(
100-
"Failed to deserialize prompt response from gpt-3.5-turbo response: {}, err: {}",
100+
"Failed to deserialize prompt response from gpt-3.5-turbo, response: {}, err: {}",
101101
choice.message.content,
102102
e,
103103
)

src/main.rs

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
use colored::*;
2-
use std::env;
3-
41
use chatsh::app;
2+
use chrono::Local;
3+
use std::env;
4+
use std::io::Write;
55

66
fn main() {
7+
init_logger();
78
let openai_key = env::var("OPENAI_KEY");
89
if openai_key.is_err() {
9-
println!(
10-
"{}",
11-
format!(
12-
"Cannot get OPENAI_KEY environment variable, error: {}",
13-
openai_key.err().unwrap()
14-
)
15-
.red()
10+
log::error!(
11+
"Cannot get OPENAI_KEY environment variable, error: {}",
12+
openai_key.err().unwrap()
1613
);
1714
std::process::exit(1);
1815
}
@@ -21,3 +18,36 @@ fn main() {
2118
let mut app = app::App::new(openai_key.as_str());
2219
app.run();
2320
}
21+
22+
fn init_logger() {
23+
env_logger::Builder::new()
24+
.format(|buf, record| {
25+
let mut level_style = buf.style();
26+
match record.level() {
27+
log::Level::Error => level_style
28+
.set_color(env_logger::fmt::Color::Red)
29+
.set_bold(true),
30+
log::Level::Warn => level_style
31+
.set_color(env_logger::fmt::Color::Yellow)
32+
.set_bold(true),
33+
log::Level::Info => level_style
34+
.set_color(env_logger::fmt::Color::Green)
35+
.set_bold(true),
36+
log::Level::Debug => level_style
37+
.set_color(env_logger::fmt::Color::Blue)
38+
.set_bold(true),
39+
log::Level::Trace => level_style
40+
.set_color(env_logger::fmt::Color::Magenta)
41+
.set_bold(true),
42+
};
43+
writeln!(
44+
buf,
45+
"{} [{}] {}",
46+
Local::now().format("%Y-%m-%dT%H:%M:%S"),
47+
level_style.value(record.level()),
48+
record.args()
49+
)
50+
})
51+
.filter_level(log::LevelFilter::Info)
52+
.init();
53+
}

0 commit comments

Comments
 (0)