Skip to main content

torrust_tracker_deployer_lib/presentation/cli/views/messages/
progress.rs

1//! Progress message type for ongoing operations
2
3use super::super::{Channel, OutputMessage, Theme, VerbosityLevel};
4
5/// Progress message for ongoing operations
6///
7/// Progress messages indicate that work is in progress. They are displayed
8/// during operations to provide feedback to users.
9///
10/// # Examples
11///
12/// ```rust,ignore
13/// use torrust_tracker_deployer_lib::presentation::cli::views::ProgressMessage;
14///
15/// let message = ProgressMessage {
16///     text: "Destroying environment...".to_string(),
17/// };
18/// ```
19pub struct ProgressMessage {
20    /// The progress message text
21    pub text: String,
22}
23
24impl OutputMessage for ProgressMessage {
25    fn format(&self, theme: &Theme) -> String {
26        format!("{} {}\n", theme.progress_symbol(), self.text)
27    }
28
29    fn required_verbosity(&self) -> VerbosityLevel {
30        VerbosityLevel::Normal
31    }
32
33    fn channel(&self) -> Channel {
34        Channel::Stderr
35    }
36
37    fn type_name(&self) -> &'static str {
38        "ProgressMessage"
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn it_should_format_with_theme_when_displaying_progress() {
48        let theme = Theme::emoji();
49        let message = ProgressMessage {
50            text: "Test message".to_string(),
51        };
52
53        let formatted = message.format(&theme);
54
55        assert_eq!(formatted, "⏳ Test message\n");
56    }
57
58    #[test]
59    fn it_should_require_normal_verbosity_when_displaying_progress() {
60        let message = ProgressMessage {
61            text: "Test".to_string(),
62        };
63
64        assert_eq!(message.required_verbosity(), VerbosityLevel::Normal);
65    }
66
67    #[test]
68    fn it_should_use_stderr_channel_when_displaying_progress() {
69        let message = ProgressMessage {
70            text: "Test".to_string(),
71        };
72
73        assert_eq!(message.channel(), Channel::Stderr);
74    }
75}