formatter.go: Truncate function and number type names

This commit is contained in:
Celestino Amoroso 2024-05-20 05:25:04 +02:00
parent b92b19e1dd
commit 1c4ffd7d64

View File

@ -11,16 +11,42 @@ type FmtOpt uint16
const ( const (
TTY FmtOpt = 1 << iota TTY FmtOpt = 1 << iota
MultiLine MultiLine
Truncate
Base2 Base2
Base8 Base8
Base10 Base10
Base16 Base16
) )
const (
TruncateEllipsis = "(...)"
MinTruncateSize = 10
TruncateSize = MinTruncateSize + 15
)
func TruncateString(s string) (trunc string) {
finalPart := len(s) - (MinTruncateSize - len(TruncateEllipsis))
trunc = s[0:len(s)-MinTruncateSize] + TruncateEllipsis + s[finalPart:]
return
}
type Formatter interface { type Formatter interface {
ToString(options FmtOpt) string ToString(options FmtOpt) string
} }
func getFormatted(v any, opt FmtOpt) (text string) {
if v == nil {
text = "(nil)"
} else if s, ok := v.(string); ok {
text = s
} else if formatter, ok := v.(Formatter); ok {
text = formatter.ToString(opt)
} else {
text = fmt.Sprintf("%v", v)
}
return
}
type Typer interface { type Typer interface {
TypeName() string TypeName() string
} }
@ -28,6 +54,10 @@ type Typer interface {
func getTypeName(v any) (name string) { func getTypeName(v any) (name string) {
if typer, ok := v.(Typer); ok { if typer, ok := v.(Typer); ok {
name = typer.TypeName() name = typer.TypeName()
} else if IsInteger(v) {
name = "integer"
} else if IsFloat(v) {
name = "float"
} else { } else {
name = fmt.Sprintf("%T", v) name = fmt.Sprintf("%T", v)
} }