mirror of
https://github.com/LukeHagar/libopenapi.git
synced 2025-12-07 12:37:48 +00:00
Also ran `gofmt` across the entire project. Things need cleaning up. Signed-off-by: Dave Shanley <dave@quobix.com>
62 lines
1.8 KiB
Go
62 lines
1.8 KiB
Go
// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package base
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"github.com/pb33f/libopenapi/datamodel/low"
|
|
"github.com/pb33f/libopenapi/index"
|
|
"gopkg.in/yaml.v3"
|
|
"sort"
|
|
"strings"
|
|
)
|
|
|
|
// ExternalDoc represents a low-level External Documentation object as defined by OpenAPI 2 and 3
|
|
//
|
|
// Allows referencing an external resource for extended documentation.
|
|
//
|
|
// v2 - https://swagger.io/specification/v2/#externalDocumentationObject
|
|
// v3 - https://spec.openapis.org/oas/v3.1.0#external-documentation-object
|
|
type ExternalDoc struct {
|
|
Description low.NodeReference[string]
|
|
URL low.NodeReference[string]
|
|
Extensions map[low.KeyReference[string]]low.ValueReference[any]
|
|
*low.Reference
|
|
}
|
|
|
|
// FindExtension returns a ValueReference containing the extension value, if found.
|
|
func (ex *ExternalDoc) FindExtension(ext string) *low.ValueReference[any] {
|
|
return low.FindItemInMap[any](ext, ex.Extensions)
|
|
}
|
|
|
|
// Build will extract extensions from the ExternalDoc instance.
|
|
func (ex *ExternalDoc) Build(root *yaml.Node, idx *index.SpecIndex) error {
|
|
ex.Reference = new(low.Reference)
|
|
ex.Extensions = low.ExtractExtensions(root)
|
|
return nil
|
|
}
|
|
|
|
// GetExtensions returns all ExternalDoc extensions and satisfies the low.HasExtensions interface.
|
|
func (ex *ExternalDoc) GetExtensions() map[low.KeyReference[string]]low.ValueReference[any] {
|
|
return ex.Extensions
|
|
}
|
|
|
|
func (ex *ExternalDoc) Hash() [32]byte {
|
|
// calculate a hash from every property.
|
|
f := []string{
|
|
ex.Description.Value,
|
|
ex.URL.Value,
|
|
}
|
|
keys := make([]string, len(ex.Extensions))
|
|
z := 0
|
|
for k := range ex.Extensions {
|
|
keys[z] = fmt.Sprintf("%s-%x", k.Value, sha256.Sum256([]byte(fmt.Sprint(ex.Extensions[k].Value))))
|
|
z++
|
|
}
|
|
sort.Strings(keys)
|
|
f = append(f, keys...)
|
|
return sha256.Sum256([]byte(strings.Join(f, "|")))
|
|
}
|