Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions Sources/AnalyticsGen/Generators/Event/DefaultEventGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,20 @@ final class DefaultEventGenerator: EventGenerator {
return parameters
}

private func resolveEventProtocol(event: ExternalEvent) -> String {
let protocolName: String
switch event.tracker {
case .appsFlyer:
protocolName = "AppsFlyerEvent"
case .appMetrica:
protocolName = "AppMetricaEvent"
case .none:
protocolName = "AllExternalAnalyticsEvent"
}

return protocolName
}

private func generate(
parameters: GenerationParameters,
event: Event,
Expand Down Expand Up @@ -165,6 +179,7 @@ final class DefaultEventGenerator: EventGenerator {
oneOf: label.oneOf
)
},
eventProtocol: resolveEventProtocol(event: externalEvent),
initialisationParameters: resolveExternalEventInitialisationParameters(event: externalEvent)
)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,5 +53,6 @@ struct ExternalEventContext: Encodable {
let schemePath: String
let action: Action
let label: Label?
let eventProtocol: String
let initialisationParameters: [Parameter]
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ struct ExternalEvent: Decodable {
let forContractor: Bool?
let label: ExternalEventLabel?
let platform: EventPlatform?
let tracker: ExternalEventTracker?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import Foundation

enum ExternalEventTracker: Decodable {
case appsFlyer
case appMetrica

init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let rawValue = try container.decode(String.self).lowercased()

switch rawValue {
case "appsflyer":
self = .appsFlyer
case "appmetrica":
self = .appMetrica
default:
throw DecodingError.dataCorruptedError(
in: container,
debugDescription: "Unknown tracker value: \(rawValue)"
)
}
}
}