invokeRequest<T> function

void invokeRequest<T>(
  1. ZipRequest<T> zipRequest,
  2. Success<T> internalSuccess,
  3. Failure internalFailure,
  4. Completed internalCompleted,
)

Invokes a request method with internal callbacks and user parameters merged. Internal callbacks take precedence over user parameters.

Implementation

void invokeRequest<T>(
  ZipRequest<T> zipRequest,
  Success<T> internalSuccess,
  Failure internalFailure,
  Completed internalCompleted,
) {
  // If params are provided, use Function.apply
  if (zipRequest.params != null) {
    // Merge user parameters with internal callbacks
    final namedArgs = <Symbol, dynamic>{
      #success: internalSuccess,
      #failure: internalFailure,
      #completed: internalCompleted,
    };

    // Add user parameters (internal callbacks take precedence)
    zipRequest.params!.forEach((key, value) {
      // Only add if not already present (callbacks have priority)
      if (!namedArgs.containsKey(key)) {
        namedArgs[key] = value;
      }
    });

    // Invoke the request method
    Function.apply(zipRequest.request, [], namedArgs);
  } else {
    // No params, invoke as a closure with named parameters
    // Use Function.apply for consistent behavior
    Function.apply(zipRequest.request, [], {
      #success: internalSuccess,
      #failure: internalFailure,
      #completed: internalCompleted,
    });
  }
}