| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // Package renderer provides Architecture rendering
- package renderer
- import (
- "fmt"
- "strings"
- "mermaid-go/pkg/ast"
- )
- // ArchitectureRenderer implements Architecture rendering
- type ArchitectureRenderer struct{}
- // NewArchitectureRenderer creates a new Architecture renderer
- func NewArchitectureRenderer() *ArchitectureRenderer {
- return &ArchitectureRenderer{}
- }
- // Render renders an Architecture diagram to mermaid syntax
- func (r *ArchitectureRenderer) Render(diagram *ast.ArchitectureDiagram) (string, error) {
- var result strings.Builder
- // Start with architecture declaration
- result.WriteString("architecture\n")
- // Add title if present
- if diagram.Title != nil {
- result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
- }
- // Render groups
- for _, group := range diagram.Groups {
- result.WriteString(fmt.Sprintf(" group %s", group.ID))
- if group.Title != nil {
- result.WriteString(fmt.Sprintf("[%s]", *group.Title))
- }
- if group.In != nil {
- result.WriteString(fmt.Sprintf(" in %s", *group.In))
- }
- result.WriteString("\n")
- }
- // Render services
- for _, service := range diagram.Services {
- result.WriteString(fmt.Sprintf(" service %s", service.ID))
- if service.Title != nil {
- result.WriteString(fmt.Sprintf("[%s]", *service.Title))
- }
- if service.In != nil {
- result.WriteString(fmt.Sprintf(" in %s", *service.In))
- }
- result.WriteString("\n")
- }
- // Render edges
- for _, edge := range diagram.Edges {
- result.WriteString(fmt.Sprintf(" %s %s--%s %s",
- edge.LhsID,
- string(edge.LhsDir),
- string(edge.RhsDir),
- edge.RhsID))
- if edge.Title != nil {
- result.WriteString(fmt.Sprintf(" : %s", *edge.Title))
- }
- result.WriteString("\n")
- }
- return result.String(), nil
- }
|