feat(types): Add a ValueCodec for Uint complex type (#19164)

Co-authored-by: Likhita Polavarapu <78951027+likhita-809@users.noreply.github.com>
Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
T
2024-01-30 22:01:09 +00:00
committed by GitHub
co-authored by Likhita Polavarapu Julien Robert
parent 3e05255956
commit 3f15c4bb78
3 changed files with 52 additions and 1 deletions
+6
View File
@@ -10,3 +10,9 @@ import (
func TestIntValue(t *testing.T) {
colltest.TestValueCodec(t, IntValue, math.NewInt(10005994859))
}
func TestUintValue(t *testing.T) {
colltest.TestValueCodec(t, UintValue, math.NewUint(1337))
colltest.TestValueCodec(t, UintValue, math.ZeroUint())
colltest.TestValueCodec(t, UintValue, math.NewUintFromString("1000000000000000000"))
}
+45 -1
View File
@@ -33,6 +33,9 @@ var (
// IntValue represents a collections.ValueCodec to work with Int.
IntValue collcodec.ValueCodec[math.Int] = intValueCodec{}
// UintValue represents a collections.ValueCodec to work with Uint.
UintValue collcodec.ValueCodec[math.Uint] = uintValueCodec{}
// TimeKey represents a collections.KeyCodec to work with time.Time
// Deprecated: exists only for state compatibility reasons, should not
// be used for new storage keys using time. Please use the time KeyCodec
@@ -52,6 +55,11 @@ var (
LengthPrefixedBytesKey collcodec.KeyCodec[[]byte] = lengthPrefixedBytesKey{collections.BytesKey}
)
const (
Int string = "math.Int"
Uint string = "math.Uint"
)
type addressUnion interface {
AccAddress | ValAddress | ConsAddress
String() string
@@ -198,7 +206,43 @@ func (i intValueCodec) Stringify(value math.Int) string {
}
func (i intValueCodec) ValueType() string {
return "math.Int"
return Int
}
type uintValueCodec struct{}
func (i uintValueCodec) Encode(value math.Uint) ([]byte, error) {
return value.Marshal()
}
func (i uintValueCodec) Decode(b []byte) (math.Uint, error) {
v := new(math.Uint)
err := v.Unmarshal(b)
if err != nil {
return math.Uint{}, err
}
return *v, nil
}
func (i uintValueCodec) EncodeJSON(value math.Uint) ([]byte, error) {
return value.MarshalJSON()
}
func (i uintValueCodec) DecodeJSON(b []byte) (math.Uint, error) {
v := new(math.Uint)
err := v.UnmarshalJSON(b)
if err != nil {
return math.Uint{}, err
}
return *v, nil
}
func (i uintValueCodec) Stringify(value math.Uint) string {
return value.String()
}
func (i uintValueCodec) ValueType() string {
return Uint
}
type timeKeyCodec struct{}