Я пытаюсь использовать 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.