milstian_feedback/lib.rs
1//! # Milstian Feedback
2//! Used to handle feedback of various types of messages.
3
4extern crate chrono;
5use chrono::offset::Utc;
6
7#[derive(Clone, Debug)]
8pub struct Feedback
9{
10 _error_file: Option<String>,
11 _info_file: Option<String>,
12}
13
14impl Feedback {
15 /// # Create new feedback object
16 /// ```rust
17 /// use milstian_feedback::Feedback;
18 /// let feedback = Feedback::new(Option::None, Option::None);
19 /// ```
20 // TODO Verify error-file path and info_file path if specified
21 pub fn new(_error_file: Option<String>, _info_file: Option<String>) -> Feedback {
22 Feedback {
23 _error_file,
24 _info_file,
25 }
26 }
27 /// # Output information
28 /// ```rust,dont_run
29 /// use milstian_feedback::Feedback;
30 /// let feedback = Feedback::new(Option::None, Option::None);
31 /// feedback.info("We have information".to_string());
32 /// ```
33 pub fn info(&self, message: String) {
34 println!("{}", self.format_message(message));
35 // TODO Output to info file here if specified
36 }
37
38 /// # Output error
39 /// ```rust,dont_run
40 /// use milstian_feedback::Feedback;
41 /// let feedback = Feedback::new(Option::None, Option::None);
42 /// feedback.error("We have a undefined error".to_string());
43 /// ```
44 pub fn error(&self, message: String) {
45 eprintln!("{}", self.format_message(message));
46 }
47
48 /// # Format message with timestamp
49 /// ```rust
50 /// use milstian_feedback::Feedback;
51 /// let feedback = Feedback::new(Option::None, Option::None);
52 /// let message = feedback.format_message("Important stuff".to_string());
53 /// assert!(message.contains("stuff"));
54 /// ```
55 pub fn format_message(&self, message: String) -> String {
56 format!("{} - {}", Utc::now().format("%Y-%m-%d %H:%M:%S"), message)
57 }
58}
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63 #[test]
64 fn format_message() {
65 let feedback = Feedback::new(Option::None, Option::None);
66 assert!(feedback.format_message("random".to_string()).contains("random"));
67 }
68}