URLQueryItemCoder

Platform Versions Swift Versions Test

用于处理 Codable 类型作为 URLQueryItem 的编码器 & 解码器。

关于

URLQueryItemCoder 提供了 Swift Encoder 协议的实现,适用于将 Encodable 类型编码为 URLQueryItem 数组;以及 Swift Decoder 协议的实现,适用于从 URLQueryItem 数组解码 Decodable 类型。

这允许我们将 URLQueryItem 的需求提升到类型系统层面 (例如,对 HTTP GET API 进行建模)。

功能

URLQueryItemCoder 是一个全面的实现,拥有全面的测试套件。

标准

支持协议所期望的所有标准特性。

额外

支持 Swift JSON 实现提供的所有额外特性。

用法

编码

URLQueryItemEncoder 可以通过其初始化器或 strategiesoutputFormatting 属性进行配置。

例如,给定…

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")

然后…

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"),
// ]

解码

URLQueryItemDecoder 可以通过其初始化器或 strategy 属性进行配置。

例如,给定…

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"),
]

然后…

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"
// )

支持的平台

要求

安装

Swift 包管理器

dependencies: [
    .package(url: "https://github.com/kylehughes/URLQueryItemCoder.git", .upToNextMajor(from: "1.0.0")),
]

文档

文档可在 GitHub Pages 上找到.

贡献

目前 URLQueryItemCoder 不接受源代码贡献。Bug 报告将被考虑。

作者

Kyle Hughes

my Mastodon

许可

URLQueryItemCoder 在 MIT 许可下可用。

有关详细信息,请参阅 LICENSE