code: func (d *Decoder) Decode(v interface{}) (int, error) {
  	if v == nil {
  		msg := "can't unmarshal to nil interface"
  		return 0, unmarshalError("Unmarshal", ErrNilInterface, msg, nil,
  			nil)
  	}
  
  	vv := reflect.ValueOf(v)
  	if vv.Kind() != reflect.Ptr {
  		msg := fmt.Sprintf("can't unmarshal to non-pointer '%v' - use "+
  			"& operator", vv.Type().String())
  		err := unmarshalError("Unmarshal", ErrBadArguments, msg, nil, nil)
  		return 0, err
  	}
  	if vv.IsNil() && !vv.CanSet() {
  		msg := fmt.Sprintf("can't unmarshal to unsettable '%v' - use "+
  			"& operator", vv.Type().String())
  		err := unmarshalError("Unmarshal", ErrNotSettable, msg, nil, nil)
  		return 0, err
  	}
  
  	return d.decode(vv)
  }
docs: // Decode operates identically to the Unmarshal function with the exception of
  // using the reader associated with the Decoder as the source of XDR-encoded
  // data instead of a user-supplied reader.  See the Unmarhsal documentation for
  // specifics.