1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//! # Milstian Feedback
//! Used to handle feedback of various types of messages.

extern crate chrono;
use chrono::offset::Utc;

#[derive(Clone, Debug)]
pub struct Feedback
{
    _error_file: Option<String>,
    _info_file: Option<String>,
}

impl Feedback {
    /// # Create new feedback object
    /// ```rust
    /// use milstian_feedback::Feedback;
    /// let feedback = Feedback::new(Option::None, Option::None);
    /// ```
    // TODO Verify error-file path and info_file path if specified
    pub fn new(_error_file: Option<String>, _info_file: Option<String>) -> Feedback {
        Feedback {
            _error_file,
            _info_file,
        }
    }
    /// # Output information
    /// ```rust,dont_run
    /// use milstian_feedback::Feedback;
    /// let feedback = Feedback::new(Option::None, Option::None);
    /// feedback.info("We have information".to_string());
    /// ```
    pub fn info(&self, message: String) {
        println!("{}", self.format_message(message));
        // TODO Output to info file here if specified
    }

    /// # Output error
    /// ```rust,dont_run
    /// use milstian_feedback::Feedback;
    /// let feedback = Feedback::new(Option::None, Option::None);
    /// feedback.error("We have a undefined error".to_string());
    /// ```
    pub fn error(&self, message: String) {
        eprintln!("{}", self.format_message(message));
    }

    /// # Format message with timestamp
    /// ```rust
    /// use milstian_feedback::Feedback;
    /// let feedback = Feedback::new(Option::None, Option::None);
    /// let message = feedback.format_message("Important stuff".to_string());
    /// assert!(message.contains("stuff"));
    /// ```
    pub fn format_message(&self, message: String) -> String {
        format!("{} - {}", Utc::now().format("%Y-%m-%d %H:%M:%S"), message)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn format_message() {
        let feedback = Feedback::new(Option::None, Option::None);
        assert!(feedback.format_message("random".to_string()).contains("random"));
    }
}