pub enum Message {
Show 310 variants
AutostartEnabled,
AutostartEnabledUser,
AutostartDisabled,
AutostartAlreadyDisabled,
AutostartEnableFailed(String),
AutostartDisableFailed(String),
AutostartStatus(String),
AutostartNotImplemented,
AutostartRequiresAdmin,
AutostartCheckingAlternative,
TaskCreated,
TaskUpdated,
TaskDeleted,
TaskNotFound,
TaskCreateFailed,
TaskUpdateFailed,
TaskDeleteFailed,
TasksDeletedCount(usize),
TasksNotFoundForDate(String),
TasksNotFoundSad,
TasksHeader,
TasksIncompleteHeader,
TasksGitlabHeader,
TasksJiraHeader,
TasksDiscoverySummary {
incomplete: usize,
jira: usize,
gitlab: usize,
},
TasksDiscoverySeparator,
TasksDiscoverySearchingIncomplete,
TasksDiscoveryFetchingExternal,
NoTaskIdsProvided,
TasksNotFoundForIds(Vec<i32>),
TasksToBeDeleted,
ConfirmDeleteTask,
ConfirmDeleteTasks(usize),
ConfirmDeleteAllTodayTasks(usize),
ConfirmDeleteAllTodayTasksFinal,
NoTasksForToday,
TaskNotFoundWithId(i32),
CurrentTaskState,
TaskEditPreview,
ConfirmTaskUpdate,
NoChangesDetected,
NoTasksSelected,
SelectTasksToEdit,
EditingTask(String),
TaskUpdatedWithName(String),
TaskSkippedNoChanges(String),
TaskEditingCompleted,
PromptTaskNameEdit,
PromptTaskCommentEdit,
PromptTaskCompletenessEdit,
TaskCompletenessRange,
WorkdayEnded,
WorkdayNotFound,
WorkdayNotFoundForDate(String),
WorkdayCreateFailed,
WorkdayStarting(String),
WorkdayCouldNotFindAfterFinalizing(String),
ConfigSaved,
ConfigDeleted,
ConfigLoaded,
ConfigFileNotFound,
ConfigParseError,
ConfigSaveError,
ConfigModuleGitLab,
ConfigModuleJira,
ConfigModuleSiServer,
ConfigModuleMonitor,
ConfigModuleServer,
ConfigModuleProductivity,
ConfigModuleTaskDiscovery,
ConfigModuleJiraInbox,
TaskDiscoveryIgnoreListHeader,
TaskDiscoveryIgnoreListEmpty,
TaskDiscoveryIgnoreNameAdded(String),
TaskDiscoveryIgnoreNameExists(String),
TaskDiscoveryIgnoreNamesAdded(usize),
DailyReportSent(String),
MonthlyReportSent(String),
MonthlyReportTriggered,
ReportSendFailed(String),
MonthlyReportSendFailed(String),
ReportHeader(String),
WorkingHoursForMonth(String),
ExportingData(String, String),
ExportCompleted(String),
ExportingAllData,
ExportFailed(String),
TemplateCreated(String),
TemplateUpdated(String),
TemplateDeleted(String),
TemplateNotFound(String),
TemplateAlreadyExists(String),
TemplateCreateFailed,
NoTemplatesFound,
TemplateListHeader,
SelectTemplateToEdit,
SelectTemplateToDelete,
ConfirmDeleteTemplate(String),
EditingTemplate(String),
NoTemplatesMatchingQuery(String),
TemplateSearchResults(String),
SelectTemplateAction,
PromptTemplateName,
PromptTemplateTaskName,
PromptTemplateComment,
PromptTemplateCompleteness,
CreatingTaskFromTemplate(String),
SelectTemplate,
CreateTemplateFirst,
TagCreated(String),
TagUpdated(String),
TagDeleted(String),
TagNotFound(String),
TagAlreadyExists(String),
NoTagsFound,
TagListHeader,
EditingTag(String),
SelectTagAction,
SelectTagToEdit,
SelectTagToDelete,
ConfirmDeleteTag(String),
ConfirmDeleteTagWithTasks(String, usize),
PromptTagName,
PromptTagColor,
NoTasksWithTag(String),
TasksWithTag(String),
TagsAddedToTask(String),
ShortIntervalsDetected(usize, String),
NoShortIntervalsFound(u64),
ShortIntervalsToRemove(usize),
RemovingPauses(usize),
ShortIntervalsCleared(usize),
NoRemovablePausesFound,
UpdatedReport,
PromptMinWorkInterval,
SelectAdjustmentMode,
PromptAdjustmentMinutes,
PromptPauseStartTime,
ConfirmTimeAdjustment,
TimeAdjustmentApplied,
AdjustmentPreview,
InvalidAdjustmentTooMuchTime,
InvalidPauseOutsideWorkday,
WorkdayUpdateFailed,
PausesTitle(String),
MonitorStarted {
pause_threshold: u64,
poll_interval: u64,
activity_threshold: u64,
},
MonitorStopped,
MonitorStartFailed,
MonitorStopFailed,
MonitorExitedNormally,
MonitorShuttingDown,
MonitorError(String),
MonitorTaskPanicked(String),
PauseStarted,
PauseEnded,
WatcherStarted(u32),
WatcherStopped(u32),
WatcherStoppedSuccessfully,
WatcherNotRunning,
WatcherNotRunningPidNotFound,
WatcherStartingForeground,
WatcherStoppingExisting(String),
WatcherFailedToStopExisting(String),
WatcherFailedToStop(u32),
WatcherReceivedSigterm,
WatcherReceivedSigint,
WatcherReceivedCtrlC,
WatcherCtrlCListenFailed(String),
WatcherSignalHandlingNotSupported,
DaemonModeNotSupported,
FailedToGetCurrentExecutable,
FailedToCreateSigtermHandler,
FailedToCreateSigintHandler,
UpdateAvailable {
app_name: String,
latest: String,
},
UpdateCompleted {
app_name: String,
version: String,
},
NoUpdateRequired,
UpdateDownloadUrlNotSet,
WatcherStoppingForUpdate,
WatcherRestartingAfterUpdate,
WatcherStoppingForConfig,
WatcherRestartingAfterConfig,
WatcherRestarted,
WatcherRestartFailed {
error: String,
},
UpdateBinaryNotFoundInArchive,
WrongPassword(i32),
InvalidCredentials,
SessionExpired,
AuthenticationFailed(String),
JiraAuthenticateFailed,
LoginFailed,
CredentialsNotSet,
ApiConnectionFailed,
ApiAuthFailed,
ApiRequestFailed,
GitlabFetchFailed(String),
GitlabUserIdFailed(String),
JiraFetchFailed(String),
SiServerConfigNotFound,
SiServerSessionFailed(String),
SiServerRestDatesFailed(String),
SiServerRestDatesParsingFailed(String),
DbConnectionFailed,
DbQueryFailed,
DbMigrationFailed,
DatabaseOperationFailed {
operation: String,
error: String,
},
NoIdSet,
FileNotFound,
FileReadError,
FileWriteError,
InvalidPidFileContent,
DataStoragePathError,
PathConfigured,
PathConfigWarning {
error: String,
},
PathQueryFailed(String),
PathSetFailed,
PathRegistryQueryError {
status: String,
},
PathRegistryUpdateError {
status: String,
stderr: String,
},
FailedToJoinPaths,
FailedToExecuteRegQuery,
FailedToParseRegOutput,
FailedToGetPathFromReg,
FailedToExecuteRegSet,
FailedToOpenProcess(u32),
FailedToTerminateProcess(u32),
ProcessNotFound,
ProcessTerminationNotSupported,
MonthlyProductivity(f64),
LowProductivityWarning {
current: f64,
threshold: f64,
},
ProductivityTooLowToSend {
current: f64,
threshold: f64,
},
ManualPauseCreated {
start_time: String,
end_time: String,
duration_minutes: u64,
},
ManualPauseOverlaps {
start_time: String,
end_time: String,
},
ManualPauseRemoved(i32),
ManualPauseNotFound(i32),
ProductivityRecalculated(f64),
EncryptionKeyMustBeSet,
EncryptionIvMustBeSet,
PromptTaskName,
TaskNameMergedFromPaste,
PromptTaskComment,
PromptTaskCompleteness,
PromptGitlabToken,
PromptGitlabUrl,
PromptJiraLogin,
PromptJiraUrl,
PromptJiraPassword,
PromptSiLogin,
PromptSiAuthUrl,
PromptSiApiUrl,
PromptSiPassword,
PromptMinPauseDuration,
PromptPauseThreshold,
PromptPollInterval,
PromptActivityThreshold,
PromptMinProductivityThreshold,
PromptWorkdayHours,
PromptMinWorkdayFraction,
PromptServerApiUrl,
PromptServerAuthToken,
PromptConfirmDelete,
PromptSelectOptions,
PromptSelectModules,
PromptSelectTasks,
PromptSelectTasksToEdit,
PromptSelectTasksToImport,
PromptSelectTasksToIgnore,
PromptSelectIgnoreNamesToRemove,
PromptAddIgnoreName,
OperationCompleted,
OperationCancelled,
DataExported,
BackupCreated,
InvalidInput,
PermissionDenied,
ErrorSendingEvents(String),
ErrorSendingMonthlyReport(String),
ErrorInRdevListener(String),
ErrorRequestingRestDates(String),
SelectingTask(String),
SelectedTaskFormat(String, i32),
JiraInboxRequiresJiraConfig,
JiraInboxEmpty,
JiraInboxListHeader,
JiraInboxSynced {
fetched: usize,
new_count: usize,
updated: usize,
},
JiraInboxNewIssues(usize),
JiraInboxNotFound(String),
JiraInboxPinned(String),
JiraInboxUnpinned(String),
JiraInboxDismissed(String),
JiraInboxOpened(String),
JiraInboxTaken(String),
JiraInboxOpenFailed(String),
PromptJiraInboxEnabled,
PromptJiraInboxPollInterval,
PromptJiraInboxNotify,
PromptJiraInboxSortFieldId,
PromptJiraInboxSortFieldLabel,
PromptJiraInboxExtraFieldId,
PromptJiraInboxExtraFieldLabel,
MigrationsFound(usize),
RunningMigration(u32, String),
MigrationCompleted(u32),
MigrationFailed(u32, String),
AllMigrationsCompleted,
DatabaseVersion(u32),
DatabaseUpToDate,
DatabaseNeedsUpdate,
MigrationHistory,
NothingToRollback,
RollingBack(u32, u32),
RollbackCompleted(u32),
}Expand description
Comprehensive message enumeration for all user-facing communication.
This enum represents every type of message that the kasl application can present to users. It provides a type-safe way to handle all application communication while ensuring consistent formatting and proper parameter handling across all components.
ยงMessage Categories
The enum is organized into logical categories that correspond to different areas of application functionality. Each category groups related messages to improve maintainability and make it easier to understand the scope of each functional area.
ยงParameter Conventions
- String Parameters: Used for names, descriptions, and user-provided text
- Numeric Parameters: Used for counts, IDs, and measurements
- Status Parameters: Used for system states and operation results
- Structured Parameters: Named fields for complex message data
ยงAdding New Messages
When adding new message variants:
- Choose the appropriate category section
- Use descriptive names that clearly indicate the message purpose
- Include necessary parameters with appropriate types
- Add corresponding text in the
Displayimplementation - Document the message purpose and usage context
ยงBackward Compatibility
The enum is designed to maintain backward compatibility:
- New variants can be added without breaking existing code
- Parameter changes should be additive when possible
- Deprecated messages can be maintained for transition periods
Variantsยง
AutostartEnabled
AutostartEnabledUser
AutostartDisabled
AutostartAlreadyDisabled
AutostartEnableFailed(String)
AutostartDisableFailed(String)
AutostartStatus(String)
AutostartNotImplemented
AutostartRequiresAdmin
AutostartCheckingAlternative
TaskCreated
TaskUpdated
TaskDeleted
TaskNotFound
TaskCreateFailed
TaskUpdateFailed
TaskDeleteFailed
TasksDeletedCount(usize)
TasksNotFoundForDate(String)
TasksNotFoundSad
TasksHeader
TasksIncompleteHeader
TasksGitlabHeader
TasksJiraHeader
TasksDiscoverySummary
Summary line before unified discovery MultiSelect
TasksDiscoverySeparator
Non-selectable separator between incomplete and other items
TasksDiscoverySearchingIncomplete
TasksDiscoveryFetchingExternal
NoTaskIdsProvided
TasksNotFoundForIds(Vec<i32>)
TasksToBeDeleted
ConfirmDeleteTask
ConfirmDeleteTasks(usize)
ConfirmDeleteAllTodayTasks(usize)
ConfirmDeleteAllTodayTasksFinal
NoTasksForToday
TaskNotFoundWithId(i32)
CurrentTaskState
TaskEditPreview
ConfirmTaskUpdate
NoChangesDetected
NoTasksSelected
SelectTasksToEdit
EditingTask(String)
TaskUpdatedWithName(String)
TaskSkippedNoChanges(String)
TaskEditingCompleted
PromptTaskNameEdit
PromptTaskCommentEdit
PromptTaskCompletenessEdit
TaskCompletenessRange
WorkdayEnded
WorkdayNotFound
WorkdayNotFoundForDate(String)
WorkdayCreateFailed
WorkdayStarting(String)
WorkdayCouldNotFindAfterFinalizing(String)
ConfigSaved
ConfigDeleted
ConfigLoaded
ConfigFileNotFound
ConfigParseError
ConfigSaveError
ConfigModuleGitLab
ConfigModuleJira
ConfigModuleSiServer
ConfigModuleMonitor
ConfigModuleServer
ConfigModuleProductivity
ConfigModuleTaskDiscovery
ConfigModuleJiraInbox
TaskDiscoveryIgnoreListHeader
TaskDiscoveryIgnoreListEmpty
TaskDiscoveryIgnoreNameAdded(String)
TaskDiscoveryIgnoreNameExists(String)
TaskDiscoveryIgnoreNamesAdded(usize)
DailyReportSent(String)
MonthlyReportSent(String)
MonthlyReportTriggered
ReportSendFailed(String)
MonthlyReportSendFailed(String)
ReportHeader(String)
WorkingHoursForMonth(String)
ExportingData(String, String)
ExportCompleted(String)
ExportingAllData
ExportFailed(String)
TemplateCreated(String)
TemplateUpdated(String)
TemplateDeleted(String)
TemplateNotFound(String)
TemplateAlreadyExists(String)
TemplateCreateFailed
NoTemplatesFound
TemplateListHeader
SelectTemplateToEdit
SelectTemplateToDelete
ConfirmDeleteTemplate(String)
EditingTemplate(String)
NoTemplatesMatchingQuery(String)
TemplateSearchResults(String)
SelectTemplateAction
PromptTemplateName
PromptTemplateTaskName
PromptTemplateComment
PromptTemplateCompleteness
CreatingTaskFromTemplate(String)
SelectTemplate
CreateTemplateFirst
TagCreated(String)
TagUpdated(String)
TagDeleted(String)
TagNotFound(String)
TagAlreadyExists(String)
NoTagsFound
TagListHeader
EditingTag(String)
SelectTagAction
SelectTagToEdit
SelectTagToDelete
ConfirmDeleteTag(String)
ConfirmDeleteTagWithTasks(String, usize)
PromptTagName
PromptTagColor
NoTasksWithTag(String)
TasksWithTag(String)
TagsAddedToTask(String)
ShortIntervalsDetected(usize, String)
NoShortIntervalsFound(u64)
ShortIntervalsToRemove(usize)
RemovingPauses(usize)
ShortIntervalsCleared(usize)
NoRemovablePausesFound
UpdatedReport
PromptMinWorkInterval
SelectAdjustmentMode
PromptAdjustmentMinutes
PromptPauseStartTime
ConfirmTimeAdjustment
TimeAdjustmentApplied
AdjustmentPreview
InvalidAdjustmentTooMuchTime
InvalidPauseOutsideWorkday
WorkdayUpdateFailed
PausesTitle(String)
MonitorStarted
MonitorStopped
MonitorStartFailed
MonitorStopFailed
MonitorExitedNormally
MonitorShuttingDown
MonitorError(String)
MonitorTaskPanicked(String)
PauseStarted
PauseEnded
WatcherStarted(u32)
WatcherStopped(u32)
WatcherStoppedSuccessfully
WatcherNotRunning
WatcherNotRunningPidNotFound
WatcherStartingForeground
WatcherStoppingExisting(String)
WatcherFailedToStopExisting(String)
WatcherFailedToStop(u32)
WatcherReceivedSigterm
WatcherReceivedSigint
WatcherReceivedCtrlC
WatcherCtrlCListenFailed(String)
WatcherSignalHandlingNotSupported
DaemonModeNotSupported
FailedToGetCurrentExecutable
FailedToCreateSigtermHandler
FailedToCreateSigintHandler
UpdateAvailable
UpdateCompleted
NoUpdateRequired
UpdateDownloadUrlNotSet
WatcherStoppingForUpdate
WatcherRestartingAfterUpdate
WatcherStoppingForConfig
WatcherRestartingAfterConfig
WatcherRestarted
WatcherRestartFailed
UpdateBinaryNotFoundInArchive
WrongPassword(i32)
InvalidCredentials
SessionExpired
AuthenticationFailed(String)
JiraAuthenticateFailed
LoginFailed
CredentialsNotSet
ApiConnectionFailed
ApiAuthFailed
ApiRequestFailed
GitlabFetchFailed(String)
GitlabUserIdFailed(String)
JiraFetchFailed(String)
SiServerConfigNotFound
SiServerSessionFailed(String)
SiServerRestDatesFailed(String)
SiServerRestDatesParsingFailed(String)
DbConnectionFailed
DbQueryFailed
DbMigrationFailed
DatabaseOperationFailed
NoIdSet
FileNotFound
FileReadError
FileWriteError
InvalidPidFileContent
DataStoragePathError
PathConfigured
PathConfigWarning
PathQueryFailed(String)
PathSetFailed
PathRegistryQueryError
PathRegistryUpdateError
FailedToJoinPaths
FailedToExecuteRegQuery
FailedToParseRegOutput
FailedToGetPathFromReg
FailedToExecuteRegSet
FailedToOpenProcess(u32)
FailedToTerminateProcess(u32)
ProcessNotFound
ProcessTerminationNotSupported
MonthlyProductivity(f64)
LowProductivityWarning
ProductivityTooLowToSend
ManualPauseCreated
ManualPauseOverlaps
ManualPauseRemoved(i32)
ManualPauseNotFound(i32)
ProductivityRecalculated(f64)
EncryptionKeyMustBeSet
EncryptionIvMustBeSet
PromptTaskName
TaskNameMergedFromPaste
PromptTaskComment
PromptTaskCompleteness
PromptGitlabToken
PromptGitlabUrl
PromptJiraLogin
PromptJiraUrl
PromptJiraPassword
PromptSiLogin
PromptSiAuthUrl
PromptSiApiUrl
PromptSiPassword
PromptMinPauseDuration
PromptPauseThreshold
PromptPollInterval
PromptActivityThreshold
PromptMinProductivityThreshold
PromptWorkdayHours
PromptMinWorkdayFraction
PromptServerApiUrl
PromptServerAuthToken
PromptConfirmDelete
PromptSelectOptions
PromptSelectModules
PromptSelectTasks
PromptSelectTasksToEdit
PromptSelectTasksToImport
PromptSelectTasksToIgnore
PromptSelectIgnoreNamesToRemove
PromptAddIgnoreName
OperationCompleted
OperationCancelled
DataExported
BackupCreated
InvalidInput
PermissionDenied
ErrorSendingEvents(String)
ErrorSendingMonthlyReport(String)
ErrorInRdevListener(String)
ErrorRequestingRestDates(String)
SelectingTask(String)
SelectedTaskFormat(String, i32)
JiraInboxRequiresJiraConfig
JiraInboxEmpty
JiraInboxListHeader
JiraInboxSynced
JiraInboxNewIssues(usize)
JiraInboxNotFound(String)
JiraInboxPinned(String)
JiraInboxUnpinned(String)
JiraInboxDismissed(String)
JiraInboxOpened(String)
JiraInboxTaken(String)
JiraInboxOpenFailed(String)
PromptJiraInboxEnabled
PromptJiraInboxPollInterval
PromptJiraInboxNotify
PromptJiraInboxSortFieldId
PromptJiraInboxSortFieldLabel
PromptJiraInboxExtraFieldId
PromptJiraInboxExtraFieldLabel
MigrationsFound(usize)
RunningMigration(u32, String)
MigrationCompleted(u32)
MigrationFailed(u32, String)
AllMigrationsCompleted
DatabaseVersion(u32)
DatabaseUpToDate
DatabaseNeedsUpdate
MigrationHistory
NothingToRollback
RollingBack(u32, u32)
RollbackCompleted(u32)
Trait Implementationsยง
Sourceยงimpl Display for Message
impl Display for Message
Sourceยงfn fmt(&self, f: &mut Formatter<'_>) -> Result
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Converts a Message enum variant into human-readable text.
This method implements the core message-to-text conversion logic for the entire kasl application. It provides consistent, professional text formatting for all user-facing messages while maintaining type safety and parameter interpolation.
ยงImplementation Strategy
The method uses a comprehensive match statement to handle each message variant individually, ensuring that:
- All message types are explicitly handled
- Parameter interpolation is type-safe
- Text formatting is consistent across message categories
- New message types require explicit formatting decisions
ยงText Quality Standards
All generated text adheres to these quality standards:
- Clarity: Messages are easily understood by users
- Specificity: Include relevant details and context
- Actionability: Provide guidance for next steps when appropriate
- Professionalism: Suitable for business and personal environments
- Consistency: Uniform tone and style across all messages
ยงParameter Handling
Messages with parameters use safe string interpolation:
- String parameters are inserted directly
- Numeric parameters are formatted appropriately
- Collections are joined with appropriate separators
- Optional values are handled with meaningful defaults
ยงError Message Philosophy
Error messages are designed to be helpful rather than technical:
- Focus on user-understandable problems
- Suggest concrete resolution steps
- Avoid intimidating technical jargon
- Provide sufficient context for troubleshooting
ยงArguments
f- The formatter for writing the text output
ยงReturns
Returns Ok(()) if the message was successfully formatted,
or an error if the formatting operation fails.
ยงError Scenarios
- Formatter Errors: Underlying write operations fail
- Memory Allocation: Insufficient memory for string operations
- Parameter Formatting: Invalid parameter values (rare)
ยงExamples
use kasl::libs::messages::Message;
// Automatic formatting through Display trait
let message = Message::TaskCreated;
println!("{}", message); // "Task created successfully"
// With parameters
let date_message = Message::WorkdayStarting("2025-01-15".to_string());
println!("{}", date_message); // "Starting workday for 2025-01-15"