🍾 This is our 200th release!
Compare 3.0.0-alpha.11...3.0.0-alpha.12
161 changed files with 1,735 additions and 840 deletions.
New:
- New
Validation
module.
import Validation
let user = User(...)
try user.validate()
final class User: Validatable {
var id: Int?
var name: String
var age: Int
var child: User?
init(id: Int? = nil, name: String, age: Int) {
self.id = id
self.name = name
self.age = age
}
static var keyStringMap: KeyStringMap = [
key(\.id): "id",
key(\.name): "name",
key(\.age): "age",
key(\.child): "child"
]
static var validations: Validations = [
key(\.id): !IsNil(), // ensures id is not nil
key(\.name): IsCount(5...), // ensures name is at least 5 chars
key(\.age): IsCount(3...), // ensures age is above or equal to 3
key(\.child): IsNil() || IsValid() // ensures child user is either nil or validates it
]
}
- Renamed some generic modules to avoid future collisions (
Core
->JunkDrawer
,libc
->COperatingSystem
) - Adds Base64URL encoding/decoding
- Refactored JWT
struct TestPayload: JWTPayload {
var sub: SubjectClaim
var name: String
var admin: Bool
var exp: ExpirationClaim
func verify() throws {
try exp.verify()
}
}
let data = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImV4cCI6OTk5OTk5OTk5OTk5fQ.Ks7KcdjrlUTYaSNeAO5SzBla_sFCHkUh4vvJYn6q29U"
let signer = JWTSigner.hs256(key: Data("secret".utf8))
let jwt = try JWT<TestPayload>(from: data, verifiedUsing: signer)
XCTAssertEqual(jwt.payload.name, "John Doe")
XCTAssertEqual(jwt.payload.sub.value, "1234567890")
XCTAssertEqual(jwt.payload.admin, true)
Environment.get("FOO")
for getting process env variables
Fixed:
- Publicized
import Multipart
--env
flag is now supported- Simplified TCP socket connect, fixing some intermittent errors