// Package renderer provides Sankey diagram rendering package renderer import ( "fmt" "strings" "mermaid-go/pkg/ast" ) // SankeyRenderer implements Sankey diagram rendering type SankeyRenderer struct{} // NewSankeyRenderer creates a new Sankey renderer func NewSankeyRenderer() *SankeyRenderer { return &SankeyRenderer{} } // Render renders a Sankey diagram to mermaid syntax func (r *SankeyRenderer) Render(diagram *ast.SankeyDiagram) (string, error) { var result strings.Builder // Start with sankey-beta keyword result.WriteString("sankey-beta\n") // Add title if present if diagram.Title != nil { result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title)) } // Render nodes for _, node := range diagram.Nodes { result.WriteString(fmt.Sprintf(" %s\n", node.Label)) } // Render links for _, link := range diagram.Links { result.WriteString(fmt.Sprintf(" %s --> %s : %d\n", link.Source, link.Target, link.Value)) } return result.String(), nil }