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>
63 lines
2.0 KiB
Go
63 lines
2.0 KiB
Go
// Copyright 2022 Princess B33f Heavy Industries / Dave Shanley
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package base
|
|
|
|
import (
|
|
"github.com/pb33f/libopenapi/datamodel/high"
|
|
low "github.com/pb33f/libopenapi/datamodel/low/base"
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// ExternalDoc represents a high-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 string `json:"description,omitempty" yaml:"description,omitempty"`
|
|
URL string `json:"url,omitempty" yaml:"url,omitempty"`
|
|
Extensions map[string]any `json:"-" yaml:"-"`
|
|
low *low.ExternalDoc
|
|
}
|
|
|
|
// NewExternalDoc will create a new high-level External Documentation object from a low-level one.
|
|
func NewExternalDoc(extDoc *low.ExternalDoc) *ExternalDoc {
|
|
d := new(ExternalDoc)
|
|
d.low = extDoc
|
|
if !extDoc.Description.IsEmpty() {
|
|
d.Description = extDoc.Description.Value
|
|
}
|
|
if !extDoc.URL.IsEmpty() {
|
|
d.URL = extDoc.URL.Value
|
|
}
|
|
d.Extensions = high.ExtractExtensions(extDoc.Extensions)
|
|
return d
|
|
}
|
|
|
|
// GoLow returns the low-level ExternalDoc instance used to create the high-level one.
|
|
func (e *ExternalDoc) GoLow() *low.ExternalDoc {
|
|
return e.low
|
|
}
|
|
|
|
// GoLowUntyped will return the low-level ExternalDoc instance that was used to create the high-level one, with no type
|
|
func (e *ExternalDoc) GoLowUntyped() any {
|
|
return e.low
|
|
}
|
|
|
|
func (e *ExternalDoc) GetExtensions() map[string]any {
|
|
return e.Extensions
|
|
}
|
|
|
|
// Render will return a YAML representation of the ExternalDoc object as a byte slice.
|
|
func (e *ExternalDoc) Render() ([]byte, error) {
|
|
return yaml.Marshal(e)
|
|
}
|
|
|
|
// MarshalYAML will create a ready to render YAML representation of the ExternalDoc object.
|
|
func (e *ExternalDoc) MarshalYAML() (interface{}, error) {
|
|
nb := high.NewNodeBuilder(e, e.low)
|
|
return nb.Render(), nil
|
|
}
|