Skip to content

Commit 247d0eb

Browse files
Merge branch 'muzahid/holdout-FSSDK-11371' into muzahid/FSSDK-11372
2 parents 99eea3d + d1cc64d commit 247d0eb

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

Sources/Data Model/Experiment.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import Foundation
1818

19-
struct Experiment: Codable, OptimizelyExperiment, ExperimentCore {
19+
struct Experiment: Codable, ExperimentCore {
2020
enum Status: String, Codable {
2121
case running = "Running"
2222
case launched = "Launched"

Sources/Data Model/Holdout.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,32 @@ struct Holdout: Codable, ExperimentCore {
3232
var trafficAllocation: [TrafficAllocation]
3333
var audienceIds: [String]
3434
var audienceConditions: ConditionHolder?
35-
var includedFlags: [String]?
36-
var excludedFlags: [String]?
35+
var includedFlags: [String]
36+
var excludedFlags: [String]
3737

3838
enum CodingKeys: String, CodingKey {
3939
case id, key, status, layerId, variations, trafficAllocation, audienceIds, audienceConditions, includedFlags, excludedFlags
4040
}
4141

4242
// replace with serialized string representation with audience names when ProjectConfig is ready
4343
var audiences: String = ""
44+
45+
46+
init(from decoder: Decoder) throws {
47+
let container = try decoder.container(keyedBy: CodingKeys.self)
48+
49+
id = try container.decode(String.self, forKey: .id)
50+
key = try container.decode(String.self, forKey: .key)
51+
status = try container.decode(Status.self, forKey: .status)
52+
layerId = try container.decode(String.self, forKey: .layerId)
53+
variations = try container.decode([Variation].self, forKey: .variations)
54+
trafficAllocation = try container.decode([TrafficAllocation].self, forKey: .trafficAllocation)
55+
audienceIds = try container.decode([String].self, forKey: .audienceIds)
56+
audienceConditions = try container.decodeIfPresent(ConditionHolder.self, forKey: .audienceConditions)
57+
58+
includedFlags = try container.decodeIfPresent([String].self, forKey: .includedFlags) ?? []
59+
excludedFlags = try container.decodeIfPresent([String].self, forKey: .excludedFlags) ?? []
60+
}
4461
}
4562

4663
extension Holdout: Equatable {

Sources/Optimizely/OptimizelyConfig.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ public protocol OptimizelyExperiment {
4242
var variationsMap: [String: OptimizelyVariation] { get }
4343
}
4444

45+
// Experiment compliances OptimizelyExperiment
46+
extension Experiment: OptimizelyExperiment { }
47+
4548
public protocol OptimizelyFeature {
4649
var id: String { get }
4750
var key: String { get }

0 commit comments

Comments
 (0)