mirror of
https://github.com/jimeh/go-tyme.git
synced 2026-02-19 09:56:42 +00:00
52 lines
897 B
Go
52 lines
897 B
Go
package ts
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func unmarshalBytes(data []byte) (int64, error) {
|
|
s, err := strconv.Unquote(string(data))
|
|
if err == nil {
|
|
data = []byte(s)
|
|
}
|
|
|
|
i, err := strconv.ParseInt(string(data), 10, 64)
|
|
if err != nil {
|
|
var f float64
|
|
f, err = strconv.ParseFloat(string(data), 64)
|
|
i = int64(f)
|
|
}
|
|
|
|
if err != nil {
|
|
return 0, fmt.Errorf("invalid numeric timestamp: %s", string(data))
|
|
}
|
|
|
|
return i, nil
|
|
}
|
|
|
|
func unmarshalYAMLNode(node *yaml.Node) (int64, error) {
|
|
var i int64
|
|
var err error
|
|
var invalid bool
|
|
|
|
switch node.Tag {
|
|
case "!!int", "!!str":
|
|
i, err = strconv.ParseInt(node.Value, 10, 64)
|
|
case "!!float":
|
|
var f float64
|
|
f, err = strconv.ParseFloat(node.Value, 64)
|
|
i = int64(f)
|
|
default:
|
|
invalid = true
|
|
}
|
|
|
|
if err != nil || invalid {
|
|
return 0, &yaml.TypeError{Errors: []string{"invalid numeric timestamp"}}
|
|
}
|
|
|
|
return i, nil
|
|
}
|