82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
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)
|
||
}
|