// Generated by Create API
// https://github.com/CreateAPI/CreateAPI

import Foundation

/// Feature row for API response
public struct FeatureRowResponse: Codable, Equatable {
    /// LocalizedTextResponse
    ///
    /// Localized text for API response (no key field)
    public var featureName: LocalizedTextResponse
    public var values: [Value]

    public enum Value: Codable, Equatable {
        case iconFeatureValueResponse(IconFeatureValueResponse)
        case textFeatureValueResponse(TextFeatureValueResponse)

        public init(from decoder: Decoder) throws {
            let container = try decoder.singleValueContainer()
            if let value = try? container.decode(IconFeatureValueResponse.self) {
                self = .iconFeatureValueResponse(value)
            } else if let value = try? container.decode(TextFeatureValueResponse.self) {
                self = .textFeatureValueResponse(value)
            } else {
                throw DecodingError.dataCorruptedError(
                    in: container,
                    debugDescription: "Data could not be decoded as any of the expected types (IconFeatureValueResponse, TextFeatureValueResponse)."
                )
            }
        }

        public func encode(to encoder: Encoder) throws {
            var container = encoder.singleValueContainer()
            switch self {
            case .iconFeatureValueResponse(let value): try container.encode(value)
            case .textFeatureValueResponse(let value): try container.encode(value)
            }
        }
    }

    public init(featureName: LocalizedTextResponse, values: [Value]) {
        self.featureName = featureName
        self.values = values
    }
}
