// Package renderer provides Git diagram rendering package renderer import ( "fmt" "strings" "mermaid-go/pkg/ast" ) // GitRenderer implements Git diagram rendering type GitRenderer struct{} // NewGitRenderer creates a new Git renderer func NewGitRenderer() *GitRenderer { return &GitRenderer{} } // Render renders a Git diagram to mermaid syntax func (r *GitRenderer) Render(diagram *ast.GitDiagram) (string, error) { var result strings.Builder // Start with gitGraph keyword result.WriteString("gitGraph\n") // Add title if present if diagram.Title != nil { result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title)) } // Render commits for _, commit := range diagram.Commits { switch commit.Type { case "commit": result.WriteString(fmt.Sprintf(" commit %s\n", commit.Message)) case "branch": result.WriteString(fmt.Sprintf(" branch %s\n", commit.Branch)) case "checkout": result.WriteString(fmt.Sprintf(" checkout %s\n", commit.Branch)) case "merge": result.WriteString(fmt.Sprintf(" merge %s\n", commit.Branch)) default: result.WriteString(fmt.Sprintf(" commit %s\n", commit.Message)) } } return result.String(), nil }