fix: remove redundant CodingKeys conflicting with .convertFromSnakeCase
JSONDecoder.keyDecodingStrategy = .convertFromSnakeCase converts JSON keys like 'tenant_access_token' to Swift names like 'tenantAccessToken'. Having explicit CodingKeys that map to the ORIGINAL snake_case keys (e.g., case tenantAccessToken = "tenant_access_token") causes a collision: the decoder first converts the JSON key, then looks for a CodingKey matching the original name — but the converted name doesn't match. Removed redundant CodingKeys from OAuthTokenData, TenantAccessTokenData, UserInfoData, and RecordItem. .convertFromSnakeCase handles all these mappings automatically. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f1ef89ef55
commit
ae918a379c
|
|
@ -16,27 +16,16 @@ struct RecordListData: Decodable {
|
||||||
struct RecordItem: Decodable {
|
struct RecordItem: Decodable {
|
||||||
let recordId: String
|
let recordId: String
|
||||||
let fields: [String: JSONValue]
|
let fields: [String: JSONValue]
|
||||||
|
|
||||||
enum CodingKeys: String, CodingKey {
|
|
||||||
case recordId = "record_id"
|
|
||||||
case fields
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct OAuthTokenData: Decodable {
|
struct OAuthTokenData: Decodable {
|
||||||
|
// Note: decoder uses .convertFromSnakeCase, so JSON keys are auto-mapped:
|
||||||
|
// access_token→accessToken, token_type→tokenType, expires_in→expiresIn, etc.
|
||||||
let accessToken: String
|
let accessToken: String
|
||||||
let tokenType: String?
|
let tokenType: String?
|
||||||
let expiresIn: Int
|
let expiresIn: Int
|
||||||
let refreshToken: String?
|
let refreshToken: String?
|
||||||
let refreshExpiresIn: Int?
|
let refreshExpiresIn: Int?
|
||||||
|
|
||||||
enum CodingKeys: String, CodingKey {
|
|
||||||
case accessToken = "access_token"
|
|
||||||
case tokenType = "token_type"
|
|
||||||
case expiresIn = "expires_in"
|
|
||||||
case refreshToken = "refresh_token"
|
|
||||||
case refreshExpiresIn = "refresh_expires_in"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TenantAccessTokenData: Decodable {
|
struct TenantAccessTokenData: Decodable {
|
||||||
|
|
@ -44,23 +33,12 @@ struct TenantAccessTokenData: Decodable {
|
||||||
let msg: String
|
let msg: String
|
||||||
let tenantAccessToken: String
|
let tenantAccessToken: String
|
||||||
let expire: Int
|
let expire: Int
|
||||||
|
|
||||||
enum CodingKeys: String, CodingKey {
|
|
||||||
case code
|
|
||||||
case msg
|
|
||||||
case tenantAccessToken = "tenant_access_token"
|
|
||||||
case expire
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct UserInfoData: Decodable {
|
struct UserInfoData: Decodable {
|
||||||
let name: String?
|
let name: String?
|
||||||
|
// en_name → enName via .convertFromSnakeCase
|
||||||
let enName: String?
|
let enName: String?
|
||||||
|
|
||||||
enum CodingKeys: String, CodingKey {
|
|
||||||
case name
|
|
||||||
case enName = "en_name"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum JSONValue: Decodable {
|
enum JSONValue: Decodable {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue