code: func attributeTags(parent, att *design.AttributeDefinition, name string, private bool) string {
  	var elems []string
  	keys := make([]string, len(att.Metadata))
  	i := 0
  	for k := range att.Metadata {
  		keys[i] = k
  		i++
  	}
  	sort.Strings(keys)
  	for _, key := range keys {
  		val := att.Metadata[key]
  		if strings.HasPrefix(key, "struct:tag:") {
  			name := key[11:]
  			value := strings.Join(val, ",")
  			elems = append(elems, fmt.Sprintf("%s:\"%s\"", name, value))
  		}
  	}
  	if len(elems) > 0 {
  		return " `" + strings.Join(elems, " ") + "`"
  	}
  	// Default algorithm
  	var omit string
  	if private || (!parent.IsRequired(name) && !parent.HasDefaultValue(name)) {
  		omit = ",omitempty"
  	}
  	return fmt.Sprintf(" `form:\"%s%s\" json:\"%s%s\" yaml:\"%s%s\" xml:\"%s%s\"`",
  		name, omit, name, omit, name, omit, name, omit)
  }
docs: // attributeTags computes the struct field tags.