@@ -24,13 +24,6 @@ func newHashConvFactory(t reflect.Type, schema schema) *hashConvFactory {
24
24
k := f .typ .Kind ()
25
25
panic (fmt .Sprintf ("schema %q should not contain unsupported field type %s." , t , k ))
26
26
}
27
- if conv .ValueToString == nil && conv .StringToValue == nil {
28
- ptr := reflect .PointerTo (f .typ )
29
- if ! ptr .Implements (reflect .TypeOf ((* json .Marshaler )(nil )).Elem ()) || ! ptr .Implements (reflect .TypeOf ((* json .Unmarshaler )(nil )).Elem ()) {
30
- k := f .typ .Kind ()
31
- panic (fmt .Sprintf ("schema %q should not contain unsupported field type %s." , t , k ))
32
- }
33
- }
34
27
factory .fields [name ] = fieldConv {conv : conv , idx : f .idx }
35
28
}
36
29
return factory
@@ -59,7 +52,7 @@ func (r hashConv) ToHash() (fields map[string]string) {
59
52
for k , f := range r .factory .fields {
60
53
ref := r .entity .Field (f .idx )
61
54
if f .conv .ValueToString == nil {
62
- if bs , err := ref .Interface ().(json. Marshaler ). MarshalJSON ( ); err == nil {
55
+ if bs , err := json . Marshal ( ref .Interface ()); err == nil {
63
56
fields [k ] = rueidis .BinaryString (bs )
64
57
}
65
58
} else if v , ok := f .conv .ValueToString (ref ); ok {
@@ -76,7 +69,7 @@ func (r hashConv) FromHash(fields map[string]string) error {
76
69
continue
77
70
}
78
71
if f .conv .StringToValue == nil {
79
- if err := r .entity .Field (f .idx ).Addr ().Interface ().(json. Unmarshaler ). UnmarshalJSON ([] byte ( v )); err != nil {
72
+ if err := json . Unmarshal ( unsafe . Slice ( unsafe . StringData ( v ), len ( v )), r .entity .Field (f .idx ).Addr ().Interface ()); err != nil {
80
73
return err
81
74
}
82
75
} else {
@@ -142,6 +135,10 @@ var converters = struct {
142
135
return reflect .ValueOf (& b ), nil
143
136
},
144
137
},
138
+ reflect .Struct : {
139
+ ValueToString : nil ,
140
+ StringToValue : nil ,
141
+ },
145
142
},
146
143
val : map [reflect.Kind ]converter {
147
144
reflect .Int64 : {
@@ -209,5 +206,9 @@ var converters = struct {
209
206
return reflect .ValueOf (rueidis .ToVector64 (value )), nil
210
207
},
211
208
},
209
+ reflect .Struct : {
210
+ ValueToString : nil ,
211
+ StringToValue : nil ,
212
+ },
212
213
},
213
214
}
0 commit comments