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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//! All user-facing text, one enum away from the code that prints it.
//!
//! Keeping every string behind [`Message`] means the wording lives in one
//! place, the compiler checks the parameters, and a future locale layer has a
//! single seam to hook into.
//!
//! ```rust
//! use kasl::libs::messages::{Message, success, error};
//! use kasl::{msg_info, msg_error, msg_success};
//!
//! msg_success!(Message::TaskCreated);
//! msg_error!(Message::ConfigSaveError);
//! msg_info!(Message::MonitorStarted {
//! pause_threshold: 60,
//! poll_interval: 500,
//! activity_threshold: 30,
//! });
//! ```
pub use Message;
/// Prefixes the message with the success mark.
///
/// ```rust
/// use kasl::libs::messages::{Message, success};
///
/// let message = success(Message::TaskCreated);
/// println!("{}", message); // "✅ Task created successfully"
///
/// let report_message = success(Message::DailyReportSent("2025-01-15".to_string()));
/// println!("{}", report_message);
/// ```
///
/// The [`crate::msg_success`] macro prints the same thing directly:
/// ```rust
/// use kasl::msg_success;
/// use kasl::libs::messages::Message;
///
/// msg_success!(Message::TaskCreated);
/// ```
/// Prefixes the message with the error mark.
///
/// ```rust
/// use kasl::libs::messages::{Message, error};
///
/// let message = error(Message::ConfigSaveError);
/// println!("{}", message); // "❌ Failed to save configuration"
///
/// let detailed = error(Message::GitlabFetchFailed("Network timeout".to_string()));
/// println!("{}", detailed);
/// ```
///
/// ```rust
/// use kasl::msg_error;
/// use kasl::libs::messages::Message;
/// use anyhow::Result;
///
/// # fn operation() -> Result<()> { Ok(()) }
/// fn save_config() -> Result<()> {
/// if let Err(_) = operation() {
/// msg_error!(Message::ConfigSaveError);
/// return Err(anyhow::anyhow!("Configuration save failed"));
/// }
/// Ok(())
/// }
/// ```
/// Prefixes the message with the warning mark.
///
/// ```rust
/// use kasl::libs::messages::{Message, warning};
///
/// let message = warning(Message::AutostartRequiresAdmin);
/// println!("{}", message);
///
/// let data_warning = warning(Message::ShortIntervalsDetected(3, "45 minutes".to_string()));
/// println!("{}", data_warning);
/// ```
///
/// ```rust
/// use kasl::msg_warning;
/// use kasl::libs::messages::Message;
///
/// let count = 3;
/// let duration = "45 minutes".to_string();
/// msg_warning!(Message::ShortIntervalsDetected(count, duration));
/// ```
/// Prefixes the message with the info mark.
///
/// ```rust
/// use kasl::libs::messages::{Message, info};
///
/// let message = info(Message::MonitorStarted {
/// pause_threshold: 60,
/// poll_interval: 500,
/// activity_threshold: 30,
/// });
/// println!("{}", message);
///
/// let config_info = info(Message::AutostartStatus("enabled".to_string()));
/// println!("{}", config_info); // "ℹ️ Autostart is currently: enabled"
/// ```
///
/// ```rust
/// use kasl::{msg_info, msg_success};
/// use kasl::libs::messages::Message;
///
/// msg_info!(Message::WatcherStartingForeground);
/// msg_success!(Message::WatcherStarted(12345));
/// ```
/// Wraps the message in blank lines for emphasis; use sparingly.
///
/// ```rust
/// use kasl::libs::messages::{Message, wrap_msg};
///
/// let message = wrap_msg(Message::ConfirmDeleteAllTodayTasksFinal);
/// println!("{}", message);
///
/// let summary = wrap_msg(Message::AllMigrationsCompleted);
/// println!("{}", summary);
/// ```
///
/// ```rust
/// use kasl::libs::messages::{Message, success, wrap_msg};
///
/// let emphasized_success = format!("\n{}\n", success(Message::OperationCompleted));
/// let wrapped_success = wrap_msg(Message::OperationCompleted);
/// ```