when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>({
  1. required TResult cancel(
    1. Object? error,
    2. RequestOptions? options
    ),
  2. required TResult connectionTimeout(),
  3. required TResult sendTimeout(),
  4. required TResult receiveTimeout(),
  5. required TResult badCertificate(),
  6. required TResult connectionError(),
  7. required TResult badResponse(
    1. Response? response,
    2. int? statusCode
    ),
  8. required TResult businessException(
    1. String message,
    2. Object? error,
    3. StackTrace? stackTrace
    ),
})

A switch-like method, using callbacks.

As opposed to map, this offers destructuring. It is equivalent to doing:

switch (sealedClass) {
  case Subclass(:final field):
    return ...;
  case Subclass2(:final field2):
    return ...;
}

Implementation

@optionalTypeArgs
TResult when<TResult extends Object?>({
  required TResult Function(@igFreezedJson Object? error,
          @igFreezedJson RequestOptions? options)
      cancel,
  required TResult Function() connectionTimeout,
  required TResult Function() sendTimeout,
  required TResult Function() receiveTimeout,
  required TResult Function() badCertificate,
  required TResult Function() connectionError,
  required TResult Function(
          @igFreezedJson Response? response, int? statusCode)
      badResponse,
  required TResult Function(String message, @igFreezedJson Object? error,
          @igFreezedJson StackTrace? stackTrace)
      businessException,
}) {
  final _that = this;
  switch (_that) {
    case BaseApiCancelException():
      return cancel(_that.error, _that.options);
    case BaseApiConnectionTimeoutException():
      return connectionTimeout();
    case BaseApiSendTimeoutException():
      return sendTimeout();
    case BaseApiReceiveTimeoutException():
      return receiveTimeout();
    case BaseApiBadCertificateException():
      return badCertificate();
    case BaseApiConnectionErrorException():
      return connectionError();
    case BaseApiBadResponseException():
      return badResponse(_that.response, _that.statusCode);
    case BaseApiBusinessException():
      return businessException(_that.message, _that.error, _that.stackTrace);
  }
}