gotygen/pkg/document/document.go

47 lines
1011 B
Go

package document
import (
"fmt"
"strings"
)
type Document struct {
Comments []string
Package string
Types map[string]DeclaredType
}
func (d *Document) String() string {
parts := make([]string, 0, len(d.Types)+2)
if len(d.Comments) > 0 {
parts = append(parts, strings.TrimSpace(fmt.Sprint("// ", strings.Join(d.Comments, "\n// "))))
}
parts = append(parts, fmt.Sprint("package ", d.Package))
for _, t := range d.Types {
parts = append(parts, t.String())
}
return strings.Join(parts, "\n\n")
}
func (d *Document) PutDeclaredType(t DeclaredType, merge bool) {
id := t.Id()
if v, ok := d.Types[id]; ok && v != nil && merge {
d.Types[id] = mergeDeclaredTypes(v, t)
} else {
d.Types[id] = t
}
}
func (d *Document) GetDeclaredType(id string) (t DeclaredType, ok bool) {
t, ok = d.Types[id]
return
}
func NewDocument(packageName string, comments ...string) *Document {
return &Document{
Comments: comments,
Package: packageName,
Types: make(map[string]DeclaredType),
}
}