@@ -164,6 +164,11 @@ type isWkt interface {
164164 XXX_WellKnownType () string
165165}
166166
167+ var (
168+ wktType = reflect .TypeOf ((* isWkt )(nil )).Elem ()
169+ messageType = reflect .TypeOf ((* proto .Message )(nil )).Elem ()
170+ )
171+
167172// marshalObject writes a struct to the Writer.
168173func (m * Marshaler ) marshalObject (out * errWriter , v proto.Message , indent , typeURL string ) error {
169174 if jsm , ok := v .(JSONPBMarshaler ); ok {
@@ -551,7 +556,8 @@ func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v refle
551556
552557 // Handle well-known types.
553558 // Most are handled up in marshalObject (because 99% are messages).
554- if wkt , ok := v .Interface ().(isWkt ); ok {
559+ if v .Type ().Implements (wktType ) {
560+ wkt := v .Interface ().(isWkt )
555561 switch wkt .XXX_WellKnownType () {
556562 case "NullValue" :
557563 out .write ("null" )
@@ -1422,8 +1428,8 @@ func checkRequiredFields(pb proto.Message) error {
14221428}
14231429
14241430func checkRequiredFieldsInValue (v reflect.Value ) error {
1425- if pm , ok := v . Interface ().(proto. Message ); ok {
1426- return checkRequiredFields (pm )
1431+ if v . Type ().Implements ( messageType ) {
1432+ return checkRequiredFields (v . Interface ().(proto. Message ) )
14271433 }
14281434 return nil
14291435}
0 commit comments