| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- // Package renderer provides Packet diagram rendering
- package renderer
- import (
- "fmt"
- "strings"
- "mermaid-go/pkg/ast"
- )
- // PacketRenderer implements Packet diagram rendering
- type PacketRenderer struct{}
- // NewPacketRenderer creates a new Packet renderer
- func NewPacketRenderer() *PacketRenderer {
- return &PacketRenderer{}
- }
- // Render renders a Packet diagram to mermaid syntax
- func (r *PacketRenderer) Render(diagram *ast.PacketDiagram) (string, error) {
- var result strings.Builder
- // Start with packet keyword
- result.WriteString("packet\n")
- // Add title if present
- if diagram.Title != nil {
- result.WriteString(fmt.Sprintf(" title %s\n", *diagram.Title))
- }
- // Render packets
- for _, packet := range diagram.Packets {
- result.WriteString(fmt.Sprintf(" %s", packet.Label))
- if packet.Type != "" {
- result.WriteString(fmt.Sprintf(" %s", packet.Type))
- }
- if packet.Protocol != nil {
- result.WriteString(fmt.Sprintf(" %s", *packet.Protocol))
- }
- result.WriteString("\n")
- }
- // Render flows
- for _, flow := range diagram.Flows {
- result.WriteString(fmt.Sprintf(" %s --> %s", flow.From, flow.To))
- if flow.Protocol != nil {
- result.WriteString(fmt.Sprintf(" %s", *flow.Protocol))
- }
- if flow.Label != nil {
- result.WriteString(fmt.Sprintf(" : %s", *flow.Label))
- }
- result.WriteString("\n")
- }
- return result.String(), nil
- }
|