mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-06 04:20:11 +00:00
Also ran `gofmt` across the entire project. Things need cleaning up. Signed-off-by: Dave Shanley <dave@quobix.com>
89 lines
2.7 KiB
Go
89 lines
2.7 KiB
Go
// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package reports
|
|
|
|
import (
|
|
v3 "github.com/pb33f/libopenapi/datamodel/low/v3"
|
|
"github.com/pb33f/libopenapi/what-changed/model"
|
|
)
|
|
|
|
// Changed provides a simple wrapper for changed counts
|
|
type Changed struct {
|
|
Total int `json:"totalChanges"`
|
|
Breaking int `json:"breakingChanges"`
|
|
}
|
|
|
|
// OverallReport provides a Document level overview of all changes to an OpenAPI doc.
|
|
type OverallReport struct {
|
|
ChangeReport map[string]*Changed `json:"overallSummaryReport"`
|
|
}
|
|
|
|
// CreateOverallReport will create a high level report for all top level changes (but with deep counts)
|
|
func CreateOverallReport(changes *model.DocumentChanges) *OverallReport {
|
|
|
|
changedReport := make(map[string]*Changed)
|
|
if changes.InfoChanges != nil {
|
|
changedReport[v3.InfoLabel] = createChangedModel(changes.InfoChanges)
|
|
}
|
|
if changes.PathsChanges != nil {
|
|
changedReport[v3.PathsLabel] = createChangedModel(changes.PathsChanges)
|
|
}
|
|
if changes.TagChanges != nil {
|
|
j := make([]HasChanges, len(changes.TagChanges))
|
|
for k := range changes.TagChanges {
|
|
j[k] = HasChanges(changes.TagChanges[k])
|
|
}
|
|
changedReport[v3.TagsLabel] = createChangedModelFromSlice(j)
|
|
}
|
|
if changes.ExternalDocChanges != nil {
|
|
changedReport[v3.ExternalDocsLabel] = createChangedModel(changes.ExternalDocChanges)
|
|
}
|
|
if changes.WebhookChanges != nil {
|
|
j := make([]HasChanges, len(changes.WebhookChanges))
|
|
z := 0
|
|
for k := range changes.WebhookChanges {
|
|
j[z] = HasChanges(changes.WebhookChanges[k])
|
|
z++
|
|
}
|
|
ch := createChangedModelFromSlice(j)
|
|
if ch.Total > 0 {
|
|
changedReport[v3.WebhooksLabel] = ch
|
|
}
|
|
}
|
|
if changes.ServerChanges != nil {
|
|
j := make([]HasChanges, len(changes.ServerChanges))
|
|
for k := range changes.ServerChanges {
|
|
j[k] = HasChanges(changes.ServerChanges[k])
|
|
}
|
|
changedReport[v3.ServersLabel] = createChangedModelFromSlice(j)
|
|
}
|
|
if changes.SecurityRequirementChanges != nil {
|
|
j := make([]HasChanges, len(changes.SecurityRequirementChanges))
|
|
for k := range changes.SecurityRequirementChanges {
|
|
j[k] = HasChanges(changes.SecurityRequirementChanges[k])
|
|
}
|
|
changedReport[v3.SecurityLabel] = createChangedModelFromSlice(j)
|
|
}
|
|
if changes.ComponentsChanges != nil {
|
|
changedReport[v3.ComponentsLabel] = createChangedModel(changes.ComponentsChanges)
|
|
}
|
|
return &OverallReport{
|
|
ChangeReport: changedReport,
|
|
}
|
|
}
|
|
|
|
func createChangedModel(ch HasChanges) *Changed {
|
|
return &Changed{ch.TotalChanges(), ch.TotalBreakingChanges()}
|
|
}
|
|
|
|
func createChangedModelFromSlice(ch []HasChanges) *Changed {
|
|
t := 0
|
|
b := 0
|
|
for n := range ch {
|
|
t += ch[n].TotalChanges()
|
|
b += ch[n].TotalBreakingChanges()
|
|
}
|
|
return &Changed{t, b}
|
|
}
|