"errors"
"fmt"
"slices"
+ "time"
"go.cypherpunks.su/tai64n/v4"
typ = types.TAI64N
case *tai64n.TAI64NA:
typ = types.TAI64NA
+ case time.Time:
+ typ = types.TAI64N
case keks.Magic:
typ = types.Magic
case []byte:
return fmt.Errorf("%s: %d: %s: bad prec: %+v", schemaName, i, cmd, act[1])
}
for _, v := range vs {
+ switch v := v.(type) {
+ case *tai64n.TAI64:
+ case *tai64n.TAI64N:
+ case *tai64n.TAI64NA:
+ case time.Time:
+ default:
+ return fmt.Errorf("%s: %d: %s: unsupported data type: %T",
+ schemaName, i, cmd, v)
+ }
switch prec {
case 0: // s
- if _, ok = v.(*tai64n.TAI64); !ok {
- return fmt.Errorf("%s: %d: %s: >TAI64", schemaName, i, cmd)
+ switch v := v.(type) {
+ case *tai64n.TAI64:
+ case time.Time:
+ if v.Nanosecond() != 0 {
+ return fmt.Errorf("%s: %d: %s: >s", schemaName, i, cmd)
+ }
+ default:
+ return fmt.Errorf("%s: %d: %s: >s", schemaName, i, cmd)
}
case 3: // ms
- if _, ok = v.(*tai64n.TAI64); ok {
- continue
- }
- var tai *tai64n.TAI64N
- tai, ok = v.(*tai64n.TAI64N)
- if !ok {
- return fmt.Errorf("%s: %d: %s: >TAI64N", schemaName, i, cmd)
- }
- d := be.Get(tai[8:])
- if d%1000000 != 0 {
+ switch v := v.(type) {
+ case *tai64n.TAI64:
+ case *tai64n.TAI64N:
+ d := be.Get(v[8:])
+ if d%1000000 != 0 {
+ return fmt.Errorf("%s: %d: %s: >ms", schemaName, i, cmd)
+ }
+ case time.Time:
+ if v.Nanosecond()%1000000 != 0 {
+ return fmt.Errorf("%s: %d: %s: >ms", schemaName, i, cmd)
+ }
+ default:
return fmt.Errorf("%s: %d: %s: >ms", schemaName, i, cmd)
}
case 6: // µs
- if _, ok = v.(*tai64n.TAI64); ok {
- continue
- }
- var tai *tai64n.TAI64N
- tai, ok = v.(*tai64n.TAI64N)
- if !ok {
- return fmt.Errorf("%s: %d: %s: >TAI64N", schemaName, i, cmd)
- }
- d := be.Get(tai[8:])
- if d%1000 != 0 {
+ switch v := v.(type) {
+ case *tai64n.TAI64:
+ case *tai64n.TAI64N:
+ d := be.Get(v[8:])
+ if d%1000 != 0 {
+ return fmt.Errorf("%s: %d: %s: >µs", schemaName, i, cmd)
+ }
+ case time.Time:
+ if v.Nanosecond()%1000 != 0 {
+ return fmt.Errorf("%s: %d: %s: >µs", schemaName, i, cmd)
+ }
+ default:
return fmt.Errorf("%s: %d: %s: >µs", schemaName, i, cmd)
}
case 9: // ns
- if _, ok = v.(*tai64n.TAI64); ok {
- continue
- }
- if _, ok = v.(*tai64n.TAI64N); !ok {
- return fmt.Errorf("%s: %d: %s: >TAI64N", schemaName, i, cmd)
+ switch v.(type) {
+ case *tai64n.TAI64:
+ case *tai64n.TAI64N:
+ case time.Time:
+ default:
+ return fmt.Errorf("%s: %d: %s: >ns", schemaName, i, cmd)
}
case 12: // ps
- if _, ok = v.(*tai64n.TAI64); ok {
- continue
- }
- if _, ok = v.(*tai64n.TAI64N); ok {
- continue
- }
- var tai *tai64n.TAI64NA
- tai, ok = v.(*tai64n.TAI64NA)
- if !ok {
- return fmt.Errorf("%s: %d: %s: non-TAI", schemaName, i, cmd)
- }
- d := be.Get(tai[12:])
- if d%1000000 != 0 {
- return fmt.Errorf("%s: %d: %s: >ps", schemaName, i, cmd)
+ switch v := v.(type) {
+ case time.Time:
+ case *tai64n.TAI64:
+ case *tai64n.TAI64N:
+ case *tai64n.TAI64NA:
+ d := be.Get(v[12:])
+ if d%1000000 != 0 {
+ return fmt.Errorf("%s: %d: %s: >ps", schemaName, i, cmd)
+ }
}
case 15: // fs
- if _, ok = v.(*tai64n.TAI64); ok {
- continue
- }
- if _, ok = v.(*tai64n.TAI64N); ok {
- continue
- }
- var tai *tai64n.TAI64NA
- tai, ok = v.(*tai64n.TAI64NA)
- if !ok {
- return fmt.Errorf("%s: %d: %s: non-TAI", schemaName, i, cmd)
- }
- d := be.Get(tai[12:])
- if d%1000 != 0 {
- return fmt.Errorf("%s: %d: %s: >fs", schemaName, i, cmd)
+ switch v := v.(type) {
+ case time.Time:
+ case *tai64n.TAI64:
+ case *tai64n.TAI64N:
+ case *tai64n.TAI64NA:
+ d := be.Get(v[12:])
+ if d%1000 != 0 {
+ return fmt.Errorf("%s: %d: %s: >fs", schemaName, i, cmd)
+ }
}
case 18: // as
- if _, ok = v.(*tai64n.TAI64); ok {
- continue
- }
- if _, ok = v.(*tai64n.TAI64N); ok {
- continue
- }
- if _, ok = v.(*tai64n.TAI64NA); ok {
- continue
- }
- return fmt.Errorf("%s: %d: %s: non-TAI", schemaName, i, cmd)
default:
return fmt.Errorf("%s: %d: %s: unknown value: %d",
schemaName, i, cmd, prec)