Skip to content

Commit 71912da

Browse files
committed
Add new querystring parameter location
1 parent 8508f98 commit 71912da

File tree

8 files changed

+69
-26
lines changed

8 files changed

+69
-26
lines changed

Sources/OpenAPIKit/Parameter/Parameter.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ extension OpenAPI.Parameter: Encodable {
254254
case .cookie(required: let req):
255255
required = req
256256
location = .cookie
257+
case .querystring(required: let req):
258+
required = req
259+
location = .querystring
257260
}
258261
try container.encode(location, forKey: .parameterLocation)
259262

@@ -307,6 +310,8 @@ extension OpenAPI.Parameter: Decodable {
307310
context = .path
308311
case .cookie:
309312
context = .cookie(required: required)
313+
case .querystring:
314+
context = .querystring(required: required)
310315
}
311316

312317
let maybeContent = try container.decodeIfPresent(OpenAPI.Content.Map.self, forKey: .content)
@@ -318,6 +323,14 @@ extension OpenAPI.Parameter: Decodable {
318323
maybeSchema = nil
319324
}
320325

326+
if location == .querystring && maybeSchema != nil {
327+
throw GenericError(
328+
subjectName: name,
329+
details: "`schema` and `style` are disallowed for `querystring` parameters",
330+
codingPath: decoder.codingPath
331+
)
332+
}
333+
321334
switch (maybeContent, maybeSchema) {
322335
case (let content?, nil):
323336
schemaOrContent = .init(content)

Sources/OpenAPIKit/Parameter/ParameterContext.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ extension OpenAPI.Parameter {
2121
case header(required: Bool)
2222
case path
2323
case cookie(required: Bool)
24+
case querystring(required: Bool)
2425

2526
public static func query(required: Bool) -> Context { return .query(required: required, allowEmptyValue: false) }
2627

@@ -36,6 +37,9 @@ extension OpenAPI.Parameter {
3637
/// An optional cookie parameter.
3738
public static var cookie: Context { return .cookie(required: false) }
3839

40+
/// An optional querystring parameter.
41+
public static var querystring: Context { return .querystring(required: false) }
42+
3943
public var inQuery: Bool {
4044
guard case .query = self else {
4145
return false
@@ -59,11 +63,19 @@ extension OpenAPI.Parameter {
5963
return true
6064
}
6165

66+
public var inQuerystring: Bool {
67+
guard case .querystring = self else {
68+
return false
69+
}
70+
return true
71+
}
72+
6273
public var required: Bool {
6374
switch self {
6475
case .query(required: let required, allowEmptyValue: _),
6576
.header(required: let required),
66-
.cookie(required: let required):
77+
.cookie(required: let required),
78+
.querystring(required: let required):
6779
return required
6880
case .path:
6981
return true
@@ -83,6 +95,8 @@ extension OpenAPI.Parameter.Context {
8395
return .path
8496
case .cookie:
8597
return .cookie
98+
case .querystring:
99+
return .querystring
86100
}
87101
}
88102
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//
2+
// ParameterContextLocation.swift
3+
//
4+
//
5+
// Created by Mathew Polzin on 12/24/22.
6+
//
7+
8+
import OpenAPIKitCore
9+
10+
extension OpenAPI.Parameter.Context {
11+
public enum Location: String, CaseIterable, Codable {
12+
case query
13+
case header
14+
case path
15+
case cookie
16+
case querystring
17+
}
18+
}
19+
20+
extension OpenAPI.Parameter.Context.Location: Validatable {}

Sources/OpenAPIKit/Parameter/ParameterSchemaContext.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ extension OpenAPI.Parameter.SchemaContext.Style {
143143
return .simple
144144
case .header:
145145
return .simple
146+
case .querystring:
147+
return .simple
146148
}
147149
}
148150

Sources/OpenAPIKit/_CoreReExport.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ public extension OpenAPI.SecurityScheme {
3131
typealias Location = OpenAPIKitCore.Shared.SecuritySchemeLocation
3232
}
3333

34-
public extension OpenAPI.Parameter.Context {
35-
typealias Location = OpenAPIKitCore.Shared.ParameterContextLocation
36-
}
37-
3834
public extension OpenAPI.Parameter.SchemaContext {
3935
typealias Style = OpenAPIKitCore.Shared.ParameterSchemaContextStyle
4036
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// ParameterContextLocation.swift
3+
//
4+
//
5+
// Created by Mathew Polzin on 12/24/22.
6+
//
7+
8+
import OpenAPIKitCore
9+
10+
extension OpenAPI.Parameter.Context {
11+
public enum Location: String, CaseIterable, Codable {
12+
case query
13+
case header
14+
case path
15+
case cookie
16+
}
17+
}
18+
19+
extension OpenAPI.Parameter.Context.Location: Validatable {}

Sources/OpenAPIKit30/_CoreReExport.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ public extension OpenAPI.SecurityScheme {
3131
typealias Location = OpenAPIKitCore.Shared.SecuritySchemeLocation
3232
}
3333

34-
public extension OpenAPI.Parameter.Context {
35-
typealias Location = OpenAPIKitCore.Shared.ParameterContextLocation
36-
}
37-
3834
public extension OpenAPI.Parameter.SchemaContext {
3935
typealias Style = OpenAPIKitCore.Shared.ParameterSchemaContextStyle
4036
}

Sources/OpenAPIKitCore/Shared/ParameterContextLocation.swift

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)