47 lines
1011 B
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),
|
|
}
|
|
}
|