obrimbasecli/essential/visible/service/helper/status/status.go

125 lines
3.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
|--------------------------------------------------------------------------
| Metadata
|--------------------------------------------------------------------------
|
| Name:
| - Status
|
| Purpose:
| - Provide a framework-level CLI status utility that standardizes
| terminal message presentation using semantic labels and visual
| indicators to ensure consistent output across all softwares.
|
| Guideline:
| - Call ObrimStatus() whenever a standardized terminal status message
| must be emitted.
| - Use only supported semantic labels: INFO, WARNING, SUCCESS, ERROR.
| - Invalid, unsupported, or empty labels are automatically normalized
| to INFO.
| - Status operates through terminal output side-effects and does not
| return any value.
|
| Example:
| - ObrimStatus("INFO", "Application started.")
| - ObrimStatus("SUCCESS", "Configuration loaded.")
| - ObrimStatus("WARNING", "Configuration file not found.")
| - ObrimStatus("ERROR", "Unable to establish connection.")
|
|--------------------------------------------------------------------------
*/
/*
|--------------------------------------------------------------------------
| Credit
|--------------------------------------------------------------------------
|
| Contributor:
| - Rajon Ahmed
| - Blockonite
|
|--------------------------------------------------------------------------
*/
package status
import (
"fmt"
"strings"
)
const (
obrimStatusLabelInfo = "INFO"
obrimStatusLabelWarning = "WARNING"
obrimStatusLabelSuccess = "SUCCESS"
obrimStatusLabelError = "ERROR"
)
// obrimStatusIndicatorRegistry stores status indicators.
var obrimStatusIndicatorRegistry = map[string]string{
obrimStatusLabelInfo: "",
obrimStatusLabelWarning: "⚠",
obrimStatusLabelSuccess: "✓",
obrimStatusLabelError: "✖",
}
// ObrimStatus emits a standardized CLI status message.
func ObrimStatus(label string, message string) {
normalizedLabel := obrimStatusNormalizeLabel(label)
formattedLabel := obrimStatusFormatLabel(normalizedLabel)
formattedIndicator := obrimStatusFormatIndicator(normalizedLabel)
formattedMessage := obrimStatusBuildMessage(
formattedLabel,
formattedIndicator,
message,
)
fmt.Println(formattedMessage)
}
// obrimStatusNormalizeLabel normalizes and validates labels.
func obrimStatusNormalizeLabel(label string) string {
normalizedLabel := strings.ToUpper(strings.TrimSpace(label))
switch normalizedLabel {
case obrimStatusLabelInfo:
return obrimStatusLabelInfo
case obrimStatusLabelWarning:
return obrimStatusLabelWarning
case obrimStatusLabelSuccess:
return obrimStatusLabelSuccess
case obrimStatusLabelError:
return obrimStatusLabelError
default:
return obrimStatusLabelInfo
}
}
// obrimStatusFormatLabel formats semantic labels.
func obrimStatusFormatLabel(label string) string {
return fmt.Sprintf("[%s]", label)
}
// obrimStatusFormatIndicator generates visual status indicators.
func obrimStatusFormatIndicator(label string) string {
indicator, exists := obrimStatusIndicatorRegistry[label]
if !exists {
return obrimStatusIndicatorRegistry[obrimStatusLabelInfo]
}
return indicator
}
// obrimStatusBuildMessage constructs the final terminal message.
func obrimStatusBuildMessage(
label string,
indicator string,
message string,
) string {
return fmt.Sprintf("%s %s %s", indicator, label, message)
}