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}