80 lines
2 KiB
Go
80 lines
2 KiB
Go
package openapi3
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/getkin/kin-openapi/jsoninfo"
|
|
"github.com/go-openapi/jsonpointer"
|
|
)
|
|
|
|
type Headers map[string]*HeaderRef
|
|
|
|
var _ jsonpointer.JSONPointable = (*Headers)(nil)
|
|
|
|
func (h Headers) JSONLookup(token string) (interface{}, error) {
|
|
ref, ok := h[token]
|
|
if ref == nil || ok == false {
|
|
return nil, fmt.Errorf("object has no field %q", token)
|
|
}
|
|
|
|
if ref.Ref != "" {
|
|
return &Ref{Ref: ref.Ref}, nil
|
|
}
|
|
return ref.Value, nil
|
|
}
|
|
|
|
type Header struct {
|
|
ExtensionProps
|
|
|
|
// Optional description. Should use CommonMark syntax.
|
|
Description string `json:"description,omitempty" yaml:"description,omitempty"`
|
|
Deprecated bool `json:"deprecated,omitempty" yaml:"deprecated,omitempty"`
|
|
Required bool `json:"required,omitempty" yaml:"required,omitempty"`
|
|
Schema *SchemaRef `json:"schema,omitempty" yaml:"schema,omitempty"`
|
|
Example interface{} `json:"example,omitempty" yaml:"example,omitempty"`
|
|
Examples Examples `json:"examples,omitempty" yaml:"examples,omitempty"`
|
|
Content Content `json:"content,omitempty" yaml:"content,omitempty"`
|
|
}
|
|
|
|
var _ jsonpointer.JSONPointable = (*Header)(nil)
|
|
|
|
func (value *Header) UnmarshalJSON(data []byte) error {
|
|
return jsoninfo.UnmarshalStrictStruct(data, value)
|
|
}
|
|
|
|
func (value *Header) Validate(c context.Context) error {
|
|
if v := value.Schema; v != nil {
|
|
if err := v.Validate(c); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (value Header) JSONLookup(token string) (interface{}, error) {
|
|
switch token {
|
|
case "schema":
|
|
if value.Schema != nil {
|
|
if value.Schema.Ref != "" {
|
|
return &Ref{Ref: value.Schema.Ref}, nil
|
|
}
|
|
return value.Schema.Value, nil
|
|
}
|
|
case "description":
|
|
return value.Description, nil
|
|
case "deprecated":
|
|
return value.Deprecated, nil
|
|
case "required":
|
|
return value.Required, nil
|
|
case "example":
|
|
return value.Example, nil
|
|
case "examples":
|
|
return value.Examples, nil
|
|
case "content":
|
|
return value.Content, nil
|
|
}
|
|
|
|
v, _, err := jsonpointer.GetForToken(value.ExtensionProps, token)
|
|
return v, err
|
|
}
|