fromJson static method
Parses the campaign-level frequency block, or null when it is absent or
carries no recognised constraint (mirrors Android's parsePolicy).
Implementation
static FrequencyPolicy? fromJson(Map<String, dynamic>? json) {
if (json == null) return null;
final maxTotalRaw = json['maxTotal'];
final maxTotal = maxTotalRaw is num ? maxTotalRaw.toInt() : null;
FrequencyWindow? maxPerWindow;
final windowRaw = json['maxPerWindow'];
if (windowRaw is Map) {
final countRaw = windowRaw['count'];
final windowName = windowRaw['window'];
if (countRaw is num &&
windowName is String &&
windowName.trim().isNotEmpty) {
maxPerWindow =
FrequencyWindow(count: countRaw.toInt(), window: windowName);
}
}
final stopOnRaw = json['stopOn'];
final stopOn =
stopOnRaw is String && stopOnRaw.trim().isNotEmpty ? stopOnRaw : null;
final policy = FrequencyPolicy(
maxTotal: maxTotal,
maxPerWindow: maxPerWindow,
stopOn: stopOn,
);
return policy.hasConstraint ? policy : null;
}