)
var (
- ErrLenTooBig = errors.New("too big string")
- ErrIntNonMinimal = errors.New("int non minimal")
- ErrUnknownType = errors.New("unknown type")
- ErrBadUTF8 = errors.New("invalid UTF-8")
- ErrBadInt = errors.New("bad int value")
- ErrBadMagic = errors.New("bad magic value")
- ErrTAIReserved = errors.New("reserved TAI64 values in use")
- ErrTAINonMinimal = errors.New("non-minimal TAI64")
- ErrTooManyNsecs = errors.New("too many nanoseconds")
- ErrTooManyAsecs = errors.New("too many attoseconds")
+ ErrLenTooBig = errors.New("too big string")
+ ErrIntNonMinimal = errors.New("int non minimal")
+ ErrUnknownType = errors.New("unknown type")
+ ErrUTF8Bad = errors.New("invalid UTF-8")
+ ErrIntBad = errors.New("bad int value")
+ ErrMagicBad = errors.New("bad magic value")
+ ErrTAIReserved = errors.New("reserved TAI64 values in use")
+ ErrTAINonMinimal = errors.New("non-minimal TAI64")
+ ErrTAITooManyNsecs = errors.New("too many nanoseconds")
+ ErrTAITooManyAsecs = errors.New("too many attoseconds")
)
func (ctx *Decoder) DecodeAtom() (t types.Type, err error) {
ctx.strs = append(ctx.strs, s)
if t == types.Str && !(ctx.opts != nil && ctx.opts.DisableUTF8Check) {
if !utf8.ValidString(s) {
- err = ErrBadUTF8
+ err = ErrUTF8Bad
}
if strings.Contains(s, "\x00") {
- err = ErrBadUTF8
+ err = ErrUTF8Bad
}
}
return
return
}
if tag&AtomStrings == 0 || tag&AtomIsUTF8 != 0 {
- err = ErrBadInt
+ err = ErrIntBad
return
}
var s string
return
}
if nsecs > 999999999 {
- err = ErrTooManyNsecs
+ err = ErrTAITooManyNsecs
return
}
}
return
}
if asecs > 999999999 {
- err = ErrTooManyAsecs
+ err = ErrTAITooManyAsecs
return
}
}
return
}
if s[:3] != "EKS" {
- err = ErrBadMagic
+ err = ErrMagicBad
return
}
t = types.Magic
if err == nil {
v, err = d.Unmarshal()
if err != nil {
- if err == ErrLeapSecond {
+ if err == ErrTAILeapSecond {
return
}
t.Fatal(err)
func TestLonelyEOC(t *testing.T) {
_, err := NewDecoderFromBytes(append([]byte{0x00}, Junk...), nil).Decode()
- if err != ErrUnexpectedEOC {
+ if err != ErrEOCUnexpected {
t.Fatal(err)
}
}
func TestIntNonBinInInt(t *testing.T) {
encoded := mustHexDec("0C017B")
_, err := NewDecoderFromBytes(encoded, nil).Decode()
- if err != ErrBadInt {
+ if err != ErrIntBad {
t.Fatal(err)
}
}
if _, err := NewDecoderFromBytes(append(
[]byte{byte(AtomPInt)},
bytes.Repeat([]byte{byte(AtomList)}, 1000)...,
- ), nil).Decode(); err != ErrBadInt {
+ ), nil).Decode(); err != ErrIntBad {
t.Fatal(err)
}
}
encoded[2] = 'e'
decoder := NewDecoderFromBytes(encoded, nil)
_, err = decoder.Decode()
- if err != ErrBadMagic {
+ if err != ErrMagicBad {
t.Fatal(err)
}
}
func TestMapUnexpectedEOC(t *testing.T) {
_, err := NewDecoderFromBytes([]byte("\x09\xC4key1\x00\x00"), nil).Decode()
- if err != ErrUnexpectedEOC {
+ if err != ErrEOCUnexpected {
t.Fatal(err)
}
}
ErrMapUnordered = errors.New("map unordered")
ErrBlobBadAtom = errors.New("blob unexpected atom")
ErrBlobBadChunkLen = errors.New("blob bad chunk len")
- ErrUnexpectedEOC = errors.New("unexpected EOC")
+ ErrEOCUnexpected = errors.New("unexpected EOC")
ErrTooDeep = errors.New("too deep structure")
)
return
}
if sub == types.EOC {
- err = ErrUnexpectedEOC
+ err = ErrEOCUnexpected
return
}
count++
func (ctx *Decoder) Parse() (t types.Type, err error) {
t, err = ctx.parse()
if t == types.EOC {
- err = ErrUnexpectedEOC
+ err = ErrEOCUnexpected
}
return
}
func TestStrNullByteInUTF8(t *testing.T) {
bin := []byte("\xC5he\x00\x01\x02")
_, err := NewDecoderFromBytes(bin, nil).Decode()
- if err != ErrBadUTF8 {
+ if err != ErrUTF8Bad {
t.Fatal(err)
}
}
func TestStrNullByteInUTF8AndCheckDisabled(t *testing.T) {
bin := []byte("\xC5he\x00\x01\x02")
_, err := NewDecoderFromBytes(bin, &DecodeOpts{DisableUTF8Check: true}).Decode()
- if err == ErrBadUTF8 {
+ if err == ErrUTF8Bad {
t.Fatal(err)
}
}
f := func(x int) bool {
bin := []byte{0xC1, (1 << 7) | (1 << 6) | byte(x)}
_, err := NewDecoderFromBytes(bin, nil).Decode()
- if err != ErrBadUTF8 {
+ if err != ErrUTF8Bad {
return false
}
_, err = NewDecoderFromBytes(bin,
byte((1 << 7) | (((1 << 6) - 1) & x)),
}
_, err := NewDecoderFromBytes(bin, nil).Decode()
- if err != ErrBadUTF8 {
+ if err != ErrUTF8Bad {
return false
}
_, err = NewDecoderFromBytes(bin,
func TestTAINTooManyNanosecs(t *testing.T) {
bin := mustHexDec("19" + "4000000000000000" + hex1G)
_, err := NewDecoderFromBytes(bin, nil).Decode()
- if err != ErrTooManyNsecs {
+ if err != ErrTAITooManyNsecs {
t.Fatal(err)
}
}
func TestTAINATooManyNanosecs(t *testing.T) {
bin := mustHexDec("1A" + "4000000000000000" + hex1G + "00010000")
_, err := NewDecoderFromBytes(bin, nil).Decode()
- if err != ErrTooManyNsecs {
+ if err != ErrTAITooManyNsecs {
t.Fatal(err)
}
}
func TestTAINATooManyAttosecs(t *testing.T) {
bin := mustHexDec("1A" + "4000000000000000" + "00010000" + hex1G)
_, err := NewDecoderFromBytes(bin, nil).Decode()
- if err != ErrTooManyAsecs {
+ if err != ErrTAITooManyAsecs {
t.Fatal(err)
}
}
"go.cypherpunks.su/tai64n/v4"
)
-var ErrLeapSecond = errors.New("leap second")
+var (
+ ErrTAILeapSecond = errors.New("leap second")
+ ErrNonMap = errors.New("non-map decoded")
+)
func toUTC(t time.Time) (ret time.Time, err error) {
var isLeap bool
ret, isLeap = tai64n.Leapsecs.Sub(t)
if isLeap {
- err = ErrLeapSecond
+ err = ErrTAILeapSecond
}
return
}
}
src, ok := srcAny.(map[string]any)
if !ok {
- return errors.New("non-map decoded")
+ return ErrNonMap
}
return Map2Struct(dst, src)
}