43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package chart
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/blendlabs/go-util"
|
|
)
|
|
|
|
// ValueFormatter is a function that takes a value and produces a string.
|
|
type ValueFormatter func(v interface{}) string
|
|
|
|
// TimeValueFormatter is a ValueFormatter for timestamps.
|
|
func TimeValueFormatter(v interface{}) string {
|
|
return TimeValueFormatterWithFormat(v, DefaultDateFormat)
|
|
}
|
|
|
|
// TimeValueFormatterWithFormat is a ValueFormatter for timestamps with a given format.
|
|
func TimeValueFormatterWithFormat(v interface{}, dateFormat string) string {
|
|
if typed, isTyped := v.(time.Time); isTyped {
|
|
return typed.Format(dateFormat)
|
|
}
|
|
if typed, isTyped := v.(int64); isTyped {
|
|
return time.Unix(typed, 0).Format(dateFormat)
|
|
}
|
|
if typed, isTyped := v.(float64); isTyped {
|
|
return time.Unix(int64(typed), 0).Format(dateFormat)
|
|
}
|
|
return util.StringEmpty
|
|
}
|
|
|
|
// FloatValueFormatter is a ValueFormatter for float64.
|
|
func FloatValueFormatter(v interface{}) string {
|
|
return FloatValueFormatterWithFormat(v, "%.2f")
|
|
}
|
|
|
|
// FloatValueFormatterWithFormat is a ValueFormatter for float64 with a given format.
|
|
func FloatValueFormatterWithFormat(v interface{}, floatFormat string) string {
|
|
if typed, isTyped := v.(float64); isTyped {
|
|
return fmt.Sprintf(floatFormat, typed)
|
|
}
|
|
return util.StringEmpty
|
|
}
|