Skip to main content

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

1//! Result message type for final output data
2
3use super::super::{Channel, OutputMessage, Theme, VerbosityLevel};
4
5/// Result message for final output data
6///
7/// Result messages contain final output data that can be piped or redirected.
8/// They go to stdout without any symbols or formatting.
9pub struct ResultMessage {
10    /// The result message text
11    pub text: String,
12}
13
14impl OutputMessage for ResultMessage {
15    fn format(&self, _theme: &Theme) -> String {
16        format!("{}\n", self.text)
17    }
18
19    fn required_verbosity(&self) -> VerbosityLevel {
20        VerbosityLevel::Quiet
21    }
22
23    fn channel(&self) -> Channel {
24        Channel::Stdout
25    }
26
27    fn type_name(&self) -> &'static str {
28        "ResultMessage"
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn it_should_use_stdout_channel_when_displaying_result() {
38        let message = ResultMessage {
39            text: "Output data".to_string(),
40        };
41
42        assert_eq!(message.channel(), Channel::Stdout);
43    }
44
45    #[test]
46    fn it_should_require_quiet_verbosity_when_displaying_result() {
47        let message = ResultMessage {
48            text: "Output data".to_string(),
49        };
50
51        assert_eq!(message.required_verbosity(), VerbosityLevel::Quiet);
52    }
53
54    #[test]
55    fn it_should_not_include_symbols_when_formatting_result() {
56        let theme = Theme::emoji();
57        let message = ResultMessage {
58            text: "Plain output".to_string(),
59        };
60
61        let formatted = message.format(&theme);
62
63        // Result messages should not include theme symbols
64        assert!(!formatted.contains("⏳"));
65        assert!(!formatted.contains("✅"));
66        assert_eq!(formatted, "Plain output\n");
67    }
68}