// Other diagram types based on mermaid.js parsers package ast // ERDiagram represents an entity relationship diagram type ERDiagram struct { Entities map[string]*EREntity `json:"entities"` Relations []*ERRelation `json:"relations"` Title *string `json:"title,omitempty"` Config map[string]any `json:"config,omitempty"` } type EREntity struct { ID string `json:"id"` Name string `json:"name"` Attributes []*ERAttribute `json:"attributes"` CssClasses []string `json:"cssClasses,omitempty"` } type ERAttribute struct { Name string `json:"name"` Type string `json:"type"` Key *ERKeyType `json:"key,omitempty"` Comment *string `json:"comment,omitempty"` } type ERKeyType string const ( ERKeyPrimary ERKeyType = "PK" ERKeyForeign ERKeyType = "FK" ERKeyUnique ERKeyType = "UK" ) type ERRelation struct { From string `json:"from"` To string `json:"to"` Type ERRelationType `json:"type"` Label *string `json:"label,omitempty"` Cardinality *ERCardinality `json:"cardinality,omitempty"` } type ERRelationType string const ( ERRelationOneToOne ERRelationType = "||--||" ERRelationOneToMany ERRelationType = "||--o{" ERRelationManyToOne ERRelationType = "}o--||" ERRelationManyToMany ERRelationType = "}o--o{" ERRelationZeroToOne ERRelationType = "||--o|" ERRelationZeroToMany ERRelationType = "||--o{" ) type ERCardinality struct { From string `json:"from"` To string `json:"to"` } // GanttDiagram represents a Gantt chart type GanttDiagram struct { Title *string `json:"title,omitempty"` DateFormat string `json:"dateFormat"` AxisFormat string `json:"axisFormat"` Sections []*GanttSection `json:"sections"` Tasks []*GanttTask `json:"tasks"` Config map[string]any `json:"config,omitempty"` } type GanttSection struct { Name string `json:"name"` Tasks []*GanttTask `json:"tasks"` } type GanttTask struct { ID string `json:"id"` Name string `json:"name"` Status GanttStatus `json:"status"` Start *string `json:"start,omitempty"` End *string `json:"end,omitempty"` Duration *string `json:"duration,omitempty"` Dependencies []string `json:"dependencies,omitempty"` } type GanttStatus string const ( GanttStatusActive GanttStatus = "active" GanttStatusDone GanttStatus = "done" GanttStatusCrit GanttStatus = "crit" ) // PieChart represents a pie chart type PieChart struct { Title *string `json:"title,omitempty"` Data []*PieSlice `json:"data"` Config map[string]any `json:"config,omitempty"` } type PieSlice struct { Label string `json:"label"` Value float64 `json:"value"` } // TimelineDiagram represents a timeline diagram type TimelineDiagram struct { Title *string `json:"title,omitempty"` Sections []*TimelineSection `json:"sections"` Config map[string]any `json:"config,omitempty"` } type TimelineSection struct { Name string `json:"name"` Events []*TimelineEvent `json:"events"` } type TimelineEvent struct { Name string `json:"name"` Description *string `json:"description,omitempty"` Time *string `json:"time,omitempty"` } // UserJourneyDiagram represents a user journey diagram type UserJourneyDiagram struct { Title *string `json:"title,omitempty"` Sections []*UserJourneySection `json:"sections"` Config map[string]any `json:"config,omitempty"` } type UserJourneySection struct { Name string `json:"name"` Tasks []*UserJourneyTask `json:"tasks"` } type UserJourneyTask struct { Name string `json:"name"` Score *float64 `json:"score,omitempty"` People []string `json:"people,omitempty"` } // QuadrantChart represents a quadrant chart type QuadrantChart struct { Title *string `json:"title,omitempty"` XAxis *QuadrantAxis `json:"xAxis,omitempty"` YAxis *QuadrantAxis `json:"yAxis,omitempty"` Quadrants []*QuadrantData `json:"quadrants"` Points []*QuadrantPoint `json:"points"` Config map[string]any `json:"config,omitempty"` } type QuadrantAxis struct { Label string `json:"label"` Min float64 `json:"min"` Max float64 `json:"max"` } type QuadrantData struct { Name string `json:"name"` Description string `json:"description"` } type QuadrantPoint struct { Name string `json:"name"` X float64 `json:"x"` Y float64 `json:"y"` } // RequirementDiagram represents a requirement diagram type RequirementDiagram struct { Requirements []*Requirement `json:"requirements"` Elements []*RequirementElement `json:"elements"` Relations []*RequirementRelation `json:"relations"` Config map[string]any `json:"config,omitempty"` } type Requirement struct { ID string `json:"id"` Name string `json:"name"` Type RequirementType `json:"type"` Text *string `json:"text,omitempty"` Risk *RequirementRisk `json:"risk,omitempty"` Verification *RequirementVerification `json:"verification,omitempty"` } type RequirementType string const ( RequirementTypeRequirement RequirementType = "requirement" RequirementTypeFunctionalRequirement RequirementType = "functionalRequirement" RequirementTypeInterfaceRequirement RequirementType = "interfaceRequirement" RequirementTypePerformanceRequirement RequirementType = "performanceRequirement" RequirementTypePhysicalRequirement RequirementType = "physicalRequirement" RequirementTypeDesignConstraint RequirementType = "designConstraint" ) type RequirementRisk string const ( RequirementRiskLow RequirementRisk = "low" RequirementRiskMedium RequirementRisk = "medium" RequirementRiskHigh RequirementRisk = "high" ) type RequirementVerification string const ( RequirementVerificationAnalysis RequirementVerification = "analysis" RequirementVerificationInspection RequirementVerification = "inspection" RequirementVerificationTest RequirementVerification = "test" RequirementVerificationDemonstration RequirementVerification = "demonstration" ) type RequirementElement struct { ID string `json:"id"` Name string `json:"name"` Type string `json:"type"` DocRef *string `json:"docRef,omitempty"` } type RequirementRelation struct { From string `json:"from"` To string `json:"to"` Type RequirementRelationType `json:"type"` } type RequirementRelationType string const ( RequirementRelationContains RequirementRelationType = "contains" RequirementRelationCopies RequirementRelationType = "copies" RequirementRelationDerives RequirementRelationType = "derives" RequirementRelationSatisfies RequirementRelationType = "satisfies" RequirementRelationVerifies RequirementRelationType = "verifies" RequirementRelationRefines RequirementRelationType = "refines" RequirementRelationTraces RequirementRelationType = "traces" ) // Type methods for all diagram types func (e *ERDiagram) Type() DiagramType { return DiagramTypeERDiagram } func (e *ERDiagram) Validate() error { return nil } func (g *GanttDiagram) Type() DiagramType { return DiagramTypeGantt } func (g *GanttDiagram) Validate() error { return nil } func (p *PieChart) Type() DiagramType { return DiagramTypePie } func (p *PieChart) Validate() error { return nil } func (t *TimelineDiagram) Type() DiagramType { return DiagramTypeTimeline } func (t *TimelineDiagram) Validate() error { return nil } func (u *UserJourneyDiagram) Type() DiagramType { return DiagramTypeUserJourney } func (u *UserJourneyDiagram) Validate() error { return nil } func (q *QuadrantChart) Type() DiagramType { return DiagramTypeQuadrant } func (q *QuadrantChart) Validate() error { return nil } func (r *RequirementDiagram) Type() DiagramType { return DiagramTypeRequirement } func (r *RequirementDiagram) Validate() error { return nil } // Constructor functions func NewERDiagram() *ERDiagram { return &ERDiagram{ Entities: make(map[string]*EREntity), Relations: make([]*ERRelation, 0), Config: make(map[string]any), } }