@@ -216,7 +216,7 @@ func MarshalAnyToProto(from interface{}) (*anypb.Any, error) {
216216}
217217
218218func  unmarshal (typeURL  string , value  []byte , v  interface {}) (interface {}, error ) {
219- 	t , err  :=  getTypeByUrl (typeURL )
219+ 	t , isProto ,  err  :=  getTypeByUrl (typeURL )
220220	if  err  !=  nil  {
221221		return  nil , err 
222222	}
@@ -234,31 +234,32 @@ func unmarshal(typeURL string, value []byte, v interface{}) (interface{}, error)
234234		}
235235	}
236236
237- 	pm , ok  :=  v .(proto.Message )
238- 	if  ok  {
239- 		err  =  proto .Unmarshal (value , pm )
240- 	} else  {
241- 		err  =  json .Unmarshal (value , v )
237+ 	if  isProto  {
238+ 		pm , ok  :=  v .(proto.Message )
239+ 		if  ok  {
240+ 			err  =  proto .Unmarshal (value , pm )
241+ 			return  v , err 
242+ 		}
242243	}
244+ 	return  v , json .Unmarshal (value , v )
243245
244- 	return  v , err 
245246}
246247
247- func  getTypeByUrl (url  string ) (reflect.Type , error ) {
248+ func  getTypeByUrl (url  string ) (_   reflect.Type ,  isProto   bool ,  _  error ) {
248249	mu .RLock ()
249250	for  t , u  :=  range  registry  {
250251		if  u  ==  url  {
251252			mu .RUnlock ()
252- 			return  t , nil 
253+ 			return  t , false ,  nil 
253254		}
254255	}
255256	mu .RUnlock ()
256257	mt , err  :=  protoregistry .GlobalTypes .FindMessageByURL (url )
257258	if  err  !=  nil  {
258- 		return  nil , fmt .Errorf ("type with url %s: %w" , url , ErrNotFound )
259+ 		return  nil , false ,  fmt .Errorf ("type with url %s: %w" , url , ErrNotFound )
259260	}
260261	empty  :=  mt .New ().Interface ()
261- 	return  reflect .TypeOf (empty ).Elem (), nil 
262+ 	return  reflect .TypeOf (empty ).Elem (), true ,  nil 
262263}
263264
264265func  tryDereference (v  interface {}) reflect.Type  {
0 commit comments