code: func (decoder *HTTPDecoder) Decode(v interface{}, body io.Reader, contentType string) error {
  	now := time.Now()
  	defer MeasureSince([]string{"goa", "decode", contentType}, now)
  	var p *decoderPool
  	if contentType == "" {
  		// Default to JSON
  		contentType = "application/json"
  	} else {
  		if mediaType, _, err := mime.ParseMediaType(contentType); err == nil {
  			contentType = mediaType
  		}
  	}
  	p = decoder.pools[contentType]
  	if p == nil {
  		p = decoder.pools["*/*"]
  	}
  	if p == nil {
  		return nil
  	}
  
  	// the decoderPool will handle whether or not a pool is actually in use
  	d := p.Get(body)
  	defer p.Put(d)
  	return d.Decode(v)
  }
docs: // Decode uses registered Decoders to unmarshal a body based on the contentType.