code: func RecursivePublicizer(att *design.AttributeDefinition, source, target string, depth int) string {
  	var publications []string
  	if o := att.Type.ToObject(); o != nil {
  		if ds, ok := att.Type.(design.DataStructure); ok {
  			att = ds.Definition()
  		}
  		o.IterateAttributes(func(n string, catt *design.AttributeDefinition) error {
  			publication := Publicizer(
  				catt,
  				fmt.Sprintf("%s.%s", source, Goify(n, true)),
  				fmt.Sprintf("%s.%s", target, Goify(n, true)),
  				catt.Type.IsPrimitive() && !att.IsPrimitivePointer(n) && !att.IsInterface(n),
  				depth+1,
  				false,
  			)
  			publication = fmt.Sprintf("%sif %s.%s != nil {\n%s\n%s}",
  				Tabs(depth), source, Goify(n, true), publication, Tabs(depth))
  			publications = append(publications, publication)
  			return nil
  		})
  	}
  	return strings.Join(publications, "\n")
  }
docs: // RecursivePublicizer produces code that copies fields from the private struct to the
  // public struct