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 {
|
||||
let recordId: String
|
||||
let fields: [String: JSONValue]
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case recordId = "record_id"
|
||||
case fields
|
||||
}
|
||||
}
|
||||
|
||||
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 tokenType: String?
|
||||
let expiresIn: Int
|
||||
let refreshToken: String?
|
||||
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 {
|
||||
|
|
@ -44,23 +33,12 @@ struct TenantAccessTokenData: Decodable {
|
|||
let msg: String
|
||||
let tenantAccessToken: String
|
||||
let expire: Int
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case code
|
||||
case msg
|
||||
case tenantAccessToken = "tenant_access_token"
|
||||
case expire
|
||||
}
|
||||
}
|
||||
|
||||
struct UserInfoData: Decodable {
|
||||
let name: String?
|
||||
// en_name → enName via .convertFromSnakeCase
|
||||
let enName: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case name
|
||||
case enName = "en_name"
|
||||
}
|
||||
}
|
||||
|
||||
enum JSONValue: Decodable {
|
||||
|
|
|
|||
Loading…
Reference in New Issue