mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
* Introduce diagnostics that explain why derivation of Encodable/Decodable fail rather than just silently failing * Allow properties with default values to be omitted from CodingKeys enum and from encoding/decoding * If `CodingKeys` is a typealias, reach through it more consistently to get at the final target type * Add unit tests to confirm this new behavior for classes and structs NOTE: Although this made the diff bigger, standalone variables named "type" have been renamed to "target" throughout, since the word "type" may be ambiguous and makes debugging impossible. "target" is unique.
32 lines
1.1 KiB
Swift
32 lines
1.1 KiB
Swift
// RUN: %target-typecheck-verify-swift -verify-ignore-unknown
|
|
|
|
// Simple classes with all Codable properties should get derived conformance to
|
|
// Codable.
|
|
class SimpleClass : Codable {
|
|
var x: Int = 1
|
|
var y: Double = .pi
|
|
static var z: String = "foo"
|
|
|
|
// These lines have to be within the SimpleClass type because CodingKeys
|
|
// should be private.
|
|
func foo() {
|
|
// They should receive a synthesized CodingKeys enum.
|
|
let _ = SimpleClass.CodingKeys.self
|
|
|
|
// The enum should have a case for each of the vars.
|
|
let _ = SimpleClass.CodingKeys.x
|
|
let _ = SimpleClass.CodingKeys.y
|
|
|
|
// Static vars should not be part of the CodingKeys enum.
|
|
let _ = SimpleClass.CodingKeys.z // expected-error {{type 'SimpleClass.CodingKeys' has no member 'z'}}
|
|
}
|
|
}
|
|
|
|
// They should receive synthesized init(from:) and an encode(to:).
|
|
let _ = SimpleClass.init(from:)
|
|
let _ = SimpleClass.encode(to:)
|
|
|
|
// The synthesized CodingKeys type should not be accessible from outside the
|
|
// class.
|
|
let _ = SimpleClass.CodingKeys.self // expected-error {{'CodingKeys' is inaccessible due to 'private' protection level}}
|