code: func (r *RemoteService) RPC(ctx context.Context, serverID string, route *route.Route, reply proto.Message, arg proto.Message) error {
  	var data []byte
  	var err error
  	if arg != nil {
  		data, err = proto.Marshal(arg)
  		if err != nil {
  			return err
  		}
  	}
  	res, err := r.DoRPC(ctx, serverID, route, data)
  	if err != nil {
  		return err
  	}
  
  	if res.Error != nil {
  		return &e.Error{
  			Code:     res.Error.Code,
  			Message:  res.Error.Msg,
  			Metadata: res.Error.Metadata,
  		}
  	}
  
  	if reply != nil {
  		err = proto.Unmarshal(res.GetData(), reply)
  		if err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // RPC makes rpcs