code: func Publicizer(att *design.AttributeDefinition, sourceField, targetField string, dereference bool, depth int, init bool) string {
  	var publication string
  	data := map[string]interface{}{
  		"sourceField": sourceField,
  		"targetField": targetField,
  		"depth":       depth,
  		"att":         att,
  		"dereference": dereference,
  		"init":        init,
  	}
  	switch {
  	case att.Type.IsPrimitive():
  		publication = RunTemplate(simplePublicizeT, data)
  	case att.Type.IsObject():
  		if _, ok := att.Type.(*design.MediaTypeDefinition); ok {
  			publication = RunTemplate(recursivePublicizeT, data)
  		} else if _, ok := att.Type.(*design.UserTypeDefinition); ok {
  			publication = RunTemplate(recursivePublicizeT, data)
  		} else {
  			publication = RunTemplate(objectPublicizeT, data)
  		}
  	case att.Type.IsArray():
  		// If the array element is primitive type, we can simply copy the elements over (i.e) []string
  		if att.Type.HasAttributes() {
  			data["elemType"] = att.Type.ToArray().ElemType
  			publication = RunTemplate(arrayPublicizeT, data)
  		} else {
  			publication = RunTemplate(simplePublicizeT, data)
  		}
  	case att.Type.IsHash():
  		if att.Type.HasAttributes() {
  			h := att.Type.ToHash()
  			data["keyType"] = h.KeyType
  			data["elemType"] = h.ElemType
  			publication = RunTemplate(hashPublicizeT, data)
  		} else {
  			publication = RunTemplate(simplePublicizeT, data)
  		}
  	}
  	return publication
  }
docs: // Publicizer publicizes a single attribute based on the type.