KnotEvent.fromJson constructor

KnotEvent.fromJson(
  1. dynamic json
)

Factory method to create a KnotEvent from a json map.

Implementation

factory KnotEvent.fromJson(dynamic json) {
  // Ensure json is a Map and safely cast it
  if (json is! Map) {
    throw ArgumentError('Expected a Map<String, dynamic>, got ${json.runtimeType}');
  }

  final Map<String, Object?> jsonMap = json.cast<String, Object?>();

  String? merchant = jsonMap["merchant"] as String?;
  String event = jsonMap["event"] as String;
  String? taskId = jsonMap["taskId"] as String?;
  dynamic rawMetaData = jsonMap["metaData"];
  String? productName = jsonMap["product"] as String?;
  Map<String, Object?> metaData;

  if (rawMetaData is Map) {
    metaData = rawMetaData.cast<String, Object?>();
  } else {
    metaData = {};
  }

  // Map to a product
  Product? product;

  switch (productName) {
    case "transaction_link":
      product = Product.transactionLink;
      break;
    case "card_switcher":
      product = Product.cardSwitcher;
      break;
  }

  // Map to environment
  Environment environment = Environment.development;

  switch (jsonMap["environment"]) {
    case "development":
      environment = Environment.development;
      break;
    case "production":
      environment = Environment.production;
      break;
  }

  return KnotEvent(
      merchant: merchant,
      environment: environment,
      event: event,
      product: product ?? Product.transactionLink,
      taskId: taskId,
      metaData: metaData
  );
}