"time"
"github.com/google/uuid"
- "go.cypherpunks.su/tai64n/v3"
+ "go.cypherpunks.su/tai64n/v4"
"go.cypherpunks.su/yac/gyac"
)
{
var tai tai64n.TAI64
t := time.Unix(1234567890, 0)
- t = tai64n.LeapsecsAdd(t)
+ t = tai64n.Leapsecs.Add(t)
tai.FromTime(t)
buf = gyac.AtomTAI64Encode(buf, tai[:])
}
{
var tai tai64n.TAI64N
t := time.Unix(1234567890, 456*1000)
- t = tai64n.LeapsecsAdd(t)
+ t = tai64n.Leapsecs.Add(t)
tai.FromTime(t)
buf = gyac.AtomTAI64Encode(buf, tai[:])
}
{
var tai tai64n.TAI64N
t := time.Unix(1234567890, 456789)
- t = tai64n.LeapsecsAdd(t)
+ t = tai64n.Leapsecs.Add(t)
tai.FromTime(t)
buf = gyac.AtomTAI64Encode(buf, tai[:])
}
go 1.22
-require go.cypherpunks.su/tai64n/v3 v3.1.0
+require go.cypherpunks.su/tai64n/v4 v4.0.0
require (
github.com/google/uuid v1.6.0
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-go.cypherpunks.su/tai64n/v3 v3.1.0 h1:cdGnanxA5/H3hc37BO9D3h/exChVNEvrPWjTT/kuwQ4=
-go.cypherpunks.su/tai64n/v3 v3.1.0/go.mod h1:zGDFuyiFKJk+iem8lyBaFeCm+MNMOn7RRWy456n1J78=
+go.cypherpunks.su/tai64n/v4 v4.0.0 h1:jFEoz3XLOdimA0ZXarzRvGYNublOpgFv04r656UrYiI=
+go.cypherpunks.su/tai64n/v4 v4.0.0/go.mod h1:/uKUdhLOy8UciRKpapPaFXSOoa/SiXjs3XsDDpAz7OA=
"github.com/google/uuid"
"github.com/mitchellh/mapstructure"
- "go.cypherpunks.su/tai64n/v3"
+ "go.cypherpunks.su/tai64n/v4"
)
func (v *Item) ToGo() any {
case ItemFloat:
panic("float is unsupported")
case ItemTAI64:
- tai := v.V.([]byte)
- if len(tai) == tai64n.TAI64NASize {
- return Raw{T: AtomTAI64NA, V: tai}
+ raw := v.V.([]byte)
+ switch len(raw) {
+ case tai64n.TAI64Size:
+ tai := tai64n.TAI64(raw)
+ t, isLeap := tai64n.Leapsecs.Sub(tai.Time())
+ if isLeap {
+ return Raw{T: AtomTAI64, V: raw}
+ }
+ return t
+ case tai64n.TAI64NSize:
+ tai := tai64n.TAI64N(raw)
+ t, isLeap := tai64n.Leapsecs.Sub(tai.Time())
+ if isLeap {
+ return Raw{T: AtomTAI64N, V: raw}
+ }
+ return t
+ case tai64n.TAI64NASize:
+ return Raw{T: AtomTAI64NA, V: raw}
+ default:
+ panic("unexpected TAI size")
}
- return tai64n.LeapsecsSub(tai64n.ToTime(tai))
case ItemBin:
return v.V.([]byte)
case ItemStr:
case *Blob:
return &Item{T: byte(ItemBlob), V: v}
case time.Time:
- t := tai64n.LeapsecsAdd(v)
+ t := tai64n.Leapsecs.Add(v)
var taiRaw []byte
if t.Nanosecond() > 0 {
var tai tai64n.TAI64N