From d7183cb38f4bd53d760f454e292cfb0442bc5d24 Mon Sep 17 00:00:00 2001 From: c9s Date: Thu, 18 May 2023 17:32:15 +0800 Subject: [PATCH] types: add StrInt64 type for unmarshalling integer in string --- pkg/types/strint.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 pkg/types/strint.go diff --git a/pkg/types/strint.go b/pkg/types/strint.go new file mode 100644 index 000000000..c69a69507 --- /dev/null +++ b/pkg/types/strint.go @@ -0,0 +1,38 @@ +package types + +import ( + "encoding/json" + "fmt" + "strconv" +) + +type StrInt64 int64 + +func (s *StrInt64) UnmarshalJSON(body []byte) error { + var arg interface{} + if err := json.Unmarshal(body, &arg); err != nil { + return err + } + + switch ta := arg.(type) { + case string: + // parse string + i, err := strconv.ParseInt(ta, 10, 64) + if err != nil { + return err + } + *s = StrInt64(i) + + case int64: + *s = StrInt64(ta) + case int32: + *s = StrInt64(ta) + case int: + *s = StrInt64(ta) + + default: + return fmt.Errorf("StrInt64 error: unsupported value type %T", ta) + } + + return nil +}