Rename JSONAPITestLib to JSONAPITesting to fit with naming convention I am adopting going forward. Added OpenAPI JSON schema types. Added default schema types for a handful of Swift primitives.

This commit is contained in:
Mathew Polzin
2019-01-13 18:28:41 -08:00
parent 14a0256885
commit 25bda795a7
17 changed files with 172 additions and 4 deletions
+8
View File
@@ -0,0 +1,8 @@
//
// OpenAPI.swift
// JSONAPI
//
// Created by Mathew Polzin on 1/13/19.
//
public enum OpenAPI {}
+82
View File
@@ -0,0 +1,82 @@
//
// OpenAPITypes.swift
// JSONAPI
//
// Created by Mathew Polzin on 1/13/19.
//
public protocol OpenAPITyped {
var openAPIType: OpenAPI.JSONTypeFormat { get }
}
public extension OpenAPI {
enum JSONType: String {
case boolean = "boolean"
case object = "object"
case array = "array"
case number = "number"
case integer = "integer"
case string = "string"
}
enum JSONTypeFormat: Equatable {
case boolean(BooleanFormat)
case object(ObjectFormat)
case array(ArrayFormat)
case number(NumberFormat)
case integer(IntegerFormat)
case string(StringFormat)
}
}
public extension OpenAPI.JSONTypeFormat {
public enum BooleanFormat: String, Equatable, Codable {
case generic = ""
}
public enum ObjectFormat: String, Equatable, Codable {
case generic = ""
}
public enum ArrayFormat: String, Equatable, Codable {
case generic = ""
}
public enum NumberFormat: String, Equatable, Codable {
case generic = ""
case float = "float"
case double = "double"
}
public enum IntegerFormat: String, Equatable, Codable {
case generic = ""
case int32 = "int32"
case int64 = "int64"
}
public enum StringFormat: String, Equatable, Codable {
case generic = ""
case byte = "byte"
case binary = "binary"
case date = "date"
case dateTime = "date-time"
case password = "password"
}
public var type: OpenAPI.JSONType {
switch self {
case .boolean:
return .boolean
case .object:
return .object
case .array:
return .array
case .number:
return .number
case .integer:
return .integer
case .string:
return .string
}
}
}
@@ -0,0 +1,78 @@
//
// PrimitiveTypes.swift
// JSONAPIOpenAPI
//
// Created by Mathew Polzin on 01/13/19.
//
/**
Notable omissions in this library's default offerings:
Base 64 encoded characters:
.string(.byte)
Any sequence of octets:
.string(.binary)
RFC3339 full-date:
.string(.date)
RFC3339 date-time:
.string(.dateTime)
A hint to UIs to obscure input:
.string(.password)
An object:
.object(.generic)
**/
extension String: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .string(.generic)
}
}
extension Bool: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .boolean(.generic)
}
}
extension Array: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .array(.generic)
}
}
extension Double: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .number(.double)
}
}
extension Float: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .number(.float)
}
}
extension Int: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .integer(.generic)
}
}
extension Int32: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .integer(.int32)
}
}
extension Int64: OpenAPITyped {
public var openAPIType: OpenAPI.JSONTypeFormat {
return .integer(.int64)
}
}