Swaggen внешние ссылки терпят неудачу с неразрешенной ссылкой - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь использовать SwagGen для генерации клиентского кода из спецификации OpenAPI 3.0.Примером спецификации является https://github.com/yonaskolb/SwagGen/blob/master/Specs/Petstore/spec.yml (в переводе на json), и он отлично работает при вызове:

swaggen generate spec.json

Я хочу заменить раздел компонентов / схем внешней схемойпредставляющий Pet:

      "schemas": {
         "Pet": {
            "required": [
               "id",
               "name"
            ],
            "properties": {
               "id": {
                  "type": "integer",
                  "format": "int64"
               },
               "name": {
                  "type": "string"
               },
               "tag": {
                  "type": "string"
               }
            }
         },

с

      "schemas": {
         "Pet": {
            "$ref": "pet.json"
         },

, где pet.json находится в том же каталоге и выглядит так:

{
  "$schema": "http://json-schema.org/draft-05/schema#",
  "$id": "https://example.com/schema/pet.json",
  "title": "Pet",
  "description": "Pet",
  "type": "object",
  "properties": {
    "id": {
      "description": "id",
      "type": "integer",
      "format": "int64"
    },
    "name": {
      "description": "name",
      "type": "string"
    },
    "tag": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name"
  ]
}

Это дает мне ошибку Fatal error: Reference ./pet.json is unresolved: file /private/tmp/swaggen-20190424-43085-jvmk5p/SwagGen-4.1.0/Sources/Swagger/Component/Reference.swift, line 10 Illegal instruction: 4

По какой-то причине, когда я вместо этого использую #ref:

      "schemas": {
         "Pet": {
            "#ref": "./pet.json"
         },

генерация завершается успешно.Но сгенерированная модель Pet пуста:

// Generated by SwagGen
// https://github.com/yonaskolb/SwagGen
//

import Foundation

public class Pet: APIModel {

    public init() {
    }

    public required init(from decoder: Decoder) throws {
    }

    public func encode(to encoder: Encoder) throws {
    }

    public func isEqual(to object: Any?) -> Bool {
      guard object is Pet else { return false }
      return true
    }

    public static func == (lhs: Pet, rhs: Pet) -> Bool {
        return lhs.isEqual(to: rhs)
    }
}

Я пытаюсь понять, почему $ ref приводит к нерешенной проблеме, почему вид #ref работает, но приводит к неправильной модели Pet.

...