123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- package spec
- import (
- "fmt"
- "github.com/go-openapi/swag"
- )
- func resolveAnyWithBase(root interface{}, ref *Ref, result interface{}, options *ExpandOptions) error {
- options = optionsOrDefault(options)
- resolver := defaultSchemaLoader(root, options, nil, nil)
- if err := resolver.Resolve(ref, result, options.RelativeBase); err != nil {
- return err
- }
- return nil
- }
- func ResolveRefWithBase(root interface{}, ref *Ref, options *ExpandOptions) (*Schema, error) {
- result := new(Schema)
- if err := resolveAnyWithBase(root, ref, result, options); err != nil {
- return nil, err
- }
- return result, nil
- }
- func ResolveRef(root interface{}, ref *Ref) (*Schema, error) {
- res, _, err := ref.GetPointer().Get(root)
- if err != nil {
- return nil, err
- }
- switch sch := res.(type) {
- case Schema:
- return &sch, nil
- case *Schema:
- return sch, nil
- case map[string]interface{}:
- newSch := new(Schema)
- if err = swag.DynamicJSONToStruct(sch, newSch); err != nil {
- return nil, err
- }
- return newSch, nil
- default:
- return nil, fmt.Errorf("type: %T: %w", sch, ErrUnknownTypeForReference)
- }
- }
- func ResolveParameterWithBase(root interface{}, ref Ref, options *ExpandOptions) (*Parameter, error) {
- result := new(Parameter)
- if err := resolveAnyWithBase(root, &ref, result, options); err != nil {
- return nil, err
- }
- return result, nil
- }
- func ResolveParameter(root interface{}, ref Ref) (*Parameter, error) {
- return ResolveParameterWithBase(root, ref, nil)
- }
- func ResolveResponseWithBase(root interface{}, ref Ref, options *ExpandOptions) (*Response, error) {
- result := new(Response)
- err := resolveAnyWithBase(root, &ref, result, options)
- if err != nil {
- return nil, err
- }
- return result, nil
- }
- func ResolveResponse(root interface{}, ref Ref) (*Response, error) {
- return ResolveResponseWithBase(root, ref, nil)
- }
- func ResolvePathItemWithBase(root interface{}, ref Ref, options *ExpandOptions) (*PathItem, error) {
- result := new(PathItem)
- if err := resolveAnyWithBase(root, &ref, result, options); err != nil {
- return nil, err
- }
- return result, nil
- }
- func ResolvePathItem(root interface{}, ref Ref, options *ExpandOptions) (*PathItem, error) {
- return ResolvePathItemWithBase(root, ref, options)
- }
- func ResolveItemsWithBase(root interface{}, ref Ref, options *ExpandOptions) (*Items, error) {
- result := new(Items)
- if err := resolveAnyWithBase(root, &ref, result, options); err != nil {
- return nil, err
- }
- return result, nil
- }
- func ResolveItems(root interface{}, ref Ref, options *ExpandOptions) (*Items, error) {
- return ResolveItemsWithBase(root, ref, options)
- }
|