in format.go [711:765]
func (un *formatter) visitStructMsg(expr ast.Expr) error {
m := expr.AsStruct()
fields := m.Fields()
un.WriteString(m.TypeName())
un.WriteString("{")
if un.isMultiline(expr) {
un.indent++
for i, f := range fields {
field := f.AsStructField()
f := field.Name()
v := field.Value()
un.WriteNewLine()
if field.IsOptional() {
for _, c := range un.CommentBlock(v.ID()) {
un.WriteString(c)
un.WriteNewLine()
}
un.WriteString("?")
}
un.WriteString(f)
un.WriteString(": ")
err := un.visit(v, false)
if err != nil {
return err
}
if un.options.alwaysComma || i < len(fields)-1 {
un.WriteString(",")
}
un.WriteString(un.Comment(un.lastChild(field.Value()).ID()))
}
un.indent--
un.WriteNewLine()
un.WriteString("}")
} else {
for i, f := range fields {
field := f.AsStructField()
f := field.Name()
if field.IsOptional() {
un.WriteString("?")
}
un.WriteString(f)
un.WriteString(": ")
v := field.Value()
err := un.visit(v, false)
if err != nil {
return err
}
if i < len(fields)-1 {
un.WriteString(", ")
}
}
un.WriteString("}")
}
return nil
}