amplify-swift/AmplifyPlugins/Auth/Sources/AWSCognitoAuthPlugin/StateMachine/CodeGen/Data/AuthConfiguration.swift

106 lines
3.8 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import Foundation
enum AuthConfiguration {
case userPools(UserPoolConfigurationData)
case identityPools(IdentityPoolConfigurationData)
case userPoolsAndIdentityPools(UserPoolConfigurationData, IdentityPoolConfigurationData)
}
extension AuthConfiguration: Equatable { }
extension AuthConfiguration: Codable {
enum CodingKeys: CodingKey {
case userPools
case identityPools
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
switch self {
case .userPools(let configData):
try container.encode(configData, forKey: .userPools)
case .identityPools(let configData):
try container.encode(configData, forKey: .identityPools)
case .userPoolsAndIdentityPools(let userPoolConfigData, let identityPoolConfigData):
try container.encode(identityPoolConfigData, forKey: .identityPools)
try container.encode(userPoolConfigData, forKey: .userPools)
}
}
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
let userConfigData = try? values.decode(UserPoolConfigurationData.self, forKey: .userPools)
let idpConfigData = try? values.decode(IdentityPoolConfigurationData.self, forKey: .identityPools)
guard userConfigData != nil || idpConfigData != nil else {
throw DecodingError.dataCorrupted(
DecodingError.Context(codingPath: values.codingPath,
debugDescription: "Unable to decode")
)
}
if let userPoolData = userConfigData, let identityPoolData = idpConfigData {
self = .userPoolsAndIdentityPools(userPoolData, identityPoolData)
} else if let identityPoolData = idpConfigData {
self = .identityPools(identityPoolData)
} else {
self = .userPools(userConfigData!)
}
}
}
extension AuthConfiguration {
func getUserPoolConfiguration() -> UserPoolConfigurationData? {
switch self {
case .userPools(let userPoolConfigurationData),
.userPoolsAndIdentityPools(let userPoolConfigurationData, _):
return userPoolConfigurationData
case .identityPools: return nil
}
}
func getIdentityPoolConfiguration() -> IdentityPoolConfigurationData? {
switch self {
case .identityPools(let identityPoolConfigurationData),
.userPoolsAndIdentityPools( _, let identityPoolConfigurationData):
return identityPoolConfigurationData
case .userPools: return nil
}
}
}
extension AuthConfiguration: CustomDebugDictionaryConvertible {
var debugDictionary: [String: Any] {
switch self {
case .userPools(let userPoolConfigurationData):
return [
"AuthenticationConfiguration": "userPools",
"- UserPoolConfigurationData": userPoolConfigurationData.debugDictionary
]
case .identityPools(let identityPoolConfigurationData):
return [
"AuthenticationConfiguration": "identityPools",
"- IdentityPoolConfigurationData": identityPoolConfigurationData.debugDictionary
]
case .userPoolsAndIdentityPools(let userPoolConfigurationData, let identityPoolConfigurationData):
return [
"AuthenticationConfiguration": "userPoolsAndIdentityPools",
"- UserPoolConfigurationData": userPoolConfigurationData.debugDictionary,
"- IdentityPoolConfigurationData": identityPoolConfigurationData.debugDictionary
]
}
}
}