// Predefined because it's needed by the Decoder
var tWireType = mustGetTypeInfo(reflect.TypeOf((*wireType)(nil)).Elem()).id
-var wireTypeUserInfo *userTypeInfo // userTypeInfo of (*wireType)
+var wireTypeUserInfo *userTypeInfo // userTypeInfo of wireType
func init() {
// Some magic numbers to make sure there are no surprises.
}
idToType = idToType[:firstUserId]
registerBasics()
- wireTypeUserInfo = userType(reflect.TypeOf((*wireType)(nil)))
+ wireTypeUserInfo = userType(reflect.TypeOf((*wireType)(nil)).Elem())
}
// Array type
id typeId
encInit sync.Mutex // protects creation of encoder
encoder atomic.Pointer[encEngine]
- wire *wireType
+ wire wireType
}
// typeInfoMap is an atomic pointer to map[reflect.Type]*typeInfo.
gt := userType.id().gobType().(*gobEncoderType)
switch ut.externalEnc {
case xGob:
- info.wire = &wireType{GobEncoderT: gt}
+ info.wire.GobEncoderT = gt
case xBinary:
- info.wire = &wireType{BinaryMarshalerT: gt}
+ info.wire.BinaryMarshalerT = gt
case xText:
- info.wire = &wireType{TextMarshalerT: gt}
+ info.wire.TextMarshalerT = gt
}
rt = ut.user
} else {
t := info.id.gobType()
switch typ := rt; typ.Kind() {
case reflect.Array:
- info.wire = &wireType{ArrayT: t.(*arrayType)}
+ info.wire.ArrayT = t.(*arrayType)
case reflect.Map:
- info.wire = &wireType{MapT: t.(*mapType)}
+ info.wire.MapT = t.(*mapType)
case reflect.Slice:
// []byte == []uint8 is a special case handled separately
if typ.Elem().Kind() != reflect.Uint8 {
- info.wire = &wireType{SliceT: t.(*sliceType)}
+ info.wire.SliceT = t.(*sliceType)
}
case reflect.Struct:
- info.wire = &wireType{StructT: t.(*structType)}
+ info.wire.StructT = t.(*structType)
}
}