code: func GoTypeDesc(t design.DataType, upper bool) string {
  	switch actual := t.(type) {
  	case *design.UserTypeDefinition:
  		if actual.Description != "" {
  			return strings.Replace(actual.Description, "\n", "\n// ", -1)
  		}
  
  		return Goify(actual.TypeName, upper) + " user type."
  	case *design.MediaTypeDefinition:
  		if actual.Description != "" {
  			return strings.Replace(actual.Description, "\n", "\n// ", -1)
  		}
  		name := Goify(actual.TypeName, upper)
  		if actual.View != "default" {
  			name += Goify(actual.View, true)
  		}
  
  		switch elem := actual.UserTypeDefinition.AttributeDefinition.Type.(type) {
  		case *design.Array:
  			elemName := GoTypeName(elem.ElemType.Type, nil, 0, !upper)
  			if actual.View != "default" {
  				elemName += Goify(actual.View, true)
  			}
  			return fmt.Sprintf("%s media type is a collection of %s.", name, elemName)
  		default:
  			return name + " media type."
  		}
  	default:
  		return ""
  	}
  }
docs: // GoTypeDesc returns the description of a type.  If no description is defined
  // for the type, one will be generated.