From 740deb525751bfeb0f4a4cdcfd2a93291eeb4a2fc69808ca118153bdb0161d89 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 21 Nov 2024 11:44:17 +0300 Subject: [PATCH] Use updated fixed tai64n library --- gyac/cmd/test-vector-manual/main.go | 8 ++++---- gyac/go.mod | 2 +- gyac/go.sum | 4 ++-- gyac/reflect.go | 28 ++++++++++++++++++++++------ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/gyac/cmd/test-vector-manual/main.go b/gyac/cmd/test-vector-manual/main.go index 64fa841..2f2e23c 100644 --- a/gyac/cmd/test-vector-manual/main.go +++ b/gyac/cmd/test-vector-manual/main.go @@ -8,7 +8,7 @@ import ( "time" "github.com/google/uuid" - "go.cypherpunks.su/tai64n/v3" + "go.cypherpunks.su/tai64n/v4" "go.cypherpunks.su/yac/gyac" ) @@ -140,21 +140,21 @@ func main() { { 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[:]) } diff --git a/gyac/go.mod b/gyac/go.mod index 1b9af1b..e8990e9 100644 --- a/gyac/go.mod +++ b/gyac/go.mod @@ -2,7 +2,7 @@ module go.cypherpunks.su/yac/gyac 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 diff --git a/gyac/go.sum b/gyac/go.sum index f78f8a5..4fea018 100644 --- a/gyac/go.sum +++ b/gyac/go.sum @@ -2,5 +2,5 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= 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= diff --git a/gyac/reflect.go b/gyac/reflect.go index 201a4f1..1f5118d 100644 --- a/gyac/reflect.go +++ b/gyac/reflect.go @@ -25,7 +25,7 @@ import ( "github.com/google/uuid" "github.com/mitchellh/mapstructure" - "go.cypherpunks.su/tai64n/v3" + "go.cypherpunks.su/tai64n/v4" ) func (v *Item) ToGo() any { @@ -59,11 +59,27 @@ 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: @@ -103,7 +119,7 @@ func ItemFromGo(v any) *Item { 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 -- 2.50.0