URLQueryItemCoder

Encoder & decoder for working with Codable
types as URLQueryItem
s.
About
URLQueryItemCoder provides an implementation of Swift’s Encoder
protocol suitable for encoding an Encodable
type as
an array of URLQueryItem
s, and an implementation of Swift’s Decoder
protocol suitable for decoding a Decodable
type from an array of URLQueryItem
s.
This allows us to lift URLQueryItem
requirements into the type system (e.g. modeling an HTTP GET
API).
Capabilities
URLQueryItemCoder is an exhaustive implementation with an exhaustive test suite.
Standard
All standard features expected by the protocols are supported.
All extra features offered by Swift’s JSON implementations are supported.
Usage
Encoding
URLQueryItemEncoder
can be configured through its initializer or strategies
and outputFormatting
properties.
For example, given…
import URLQueryItemCoder
struct Interval: Codable {
let start: Date
let end: Date
}
struct GetPostsQuery: Codable {
let interval: Interval
let userID: String
}
let interval = Interval(start: .now.addingTimeInterval(-1_000), end: .now)
let query = GetPostsQuery(interval: interval, userID: "123abc")
Then…
let encoder = URLQueryItemEncoder(dateStrategy: .secondsSince1970)
let queryItems = try! encoder.encode(query)
// [
// URLQueryItem(name: "interval.end", value: "1681256918.240762"),
// URLQueryItem(name: "interval.start", value: "1681255918.240762"),
// URLQueryItem(name: "userID", value: "123abc"),
// ]
Decoding
URLQueryItemDecoder
can be configured through its initializer or strategy
property.
For example, given…
import URLQueryItemCoder
struct GetPostsQuery: Codable {
struct Interval: Codable {
let start: Date
let end: Date
}
let interval: Interval
let userID: String
}
let queryItems = [
URLQueryItem(name: "interval.start", value: "1681255918.240762"),
URLQueryItem(name: "interval.end", value: "1681256918.240762"),
URLQueryItem(name: "userID", value: "123abc"),
]
Then…
let decoder = URLQueryItemDecoder(dateStrategy: .secondsSince1970)
let query = try! decoder.decode(GetPostsQuery.self, from: queryItems)
// GetPostsQuery(
// interval: Interval(start: 1681255918.240762, end: 1681256918.240762),
// userID: "123abc"
// )
Requirements
Installation
Swift Package Manager
dependencies: [
.package(url: "https://github.com/kylehughes/URLQueryItemCoder.git", .upToNextMajor(from: "1.0.0")),
]
Documentation
Documentation is available on GitHub Pages.
Contributions
URLQueryItemCoder is not accepting source contributions at this time. Bug reports will be considered.
Author
Kyle Hughes

License
URLQueryItemCoder is available under the MIT license.
See LICENSE
for details.
URLQueryItemCoder
Encoder & decoder for working with
Codable
types asURLQueryItem
s.About
URLQueryItemCoder provides an implementation of Swift’s
Encoder
protocol suitable for encoding anEncodable
type as an array ofURLQueryItem
s, and an implementation of Swift’sDecoder
protocol suitable for decoding aDecodable
type from an array ofURLQueryItem
s.This allows us to lift
URLQueryItem
requirements into the type system (e.g. modeling anHTTP GET
API).Capabilities
URLQueryItemCoder is an exhaustive implementation with an exhaustive test suite.
Standard
All standard features expected by the protocols are supported.
Extra
All extra features offered by Swift’s JSON implementations are supported.
Data
special treatmentDate
special treatmentDouble
&Float
special treatmentUsage
Encoding
URLQueryItemEncoder
can be configured through its initializer orstrategies
andoutputFormatting
properties.For example, given…
Then…
Decoding
URLQueryItemDecoder
can be configured through its initializer orstrategy
property.For example, given…
Then…
Supported Platforms
Requirements
Installation
Swift Package Manager
Documentation
Documentation is available on GitHub Pages.
Contributions
URLQueryItemCoder is not accepting source contributions at this time. Bug reports will be considered.
Author
Kyle Hughes
License
URLQueryItemCoder is available under the MIT license.
See
LICENSE
for details.