when<TResult extends Object?> method

  1. @optionalTypeArgs
TResult when<TResult extends Object?>(
  1. TResult $default(
    1. int totalUsers,
    2. int todayNewUsers,
    3. int activeUsers,
    4. int hourlyActiveUsers,
    5. DateTime statsUpdatedAt,
    6. bool statsStale,
    7. int totalApiKeys,
    8. int activeApiKeys,
    9. int totalAccounts,
    10. int normalAccounts,
    11. int errorAccounts,
    12. int rateLimitAccounts,
    13. int overloadAccounts,
    14. int totalRequests,
    15. int totalInputTokens,
    16. int totalOutputTokens,
    17. int totalCacheCreationTokens,
    18. int totalCacheReadTokens,
    19. int totalTokens,
    20. Sub2ApiDecimal totalCost,
    21. Sub2ApiDecimal totalActualCost,
    22. int todayRequests,
    23. int todayInputTokens,
    24. int todayOutputTokens,
    25. int todayCacheCreationTokens,
    26. int todayCacheReadTokens,
    27. int todayTokens,
    28. Sub2ApiDecimal todayCost,
    29. Sub2ApiDecimal todayActualCost,
    30. Sub2ApiDecimal averageDurationMs,
    31. int uptime,
    32. int rpm,
    33. int tpm,
    )
)

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?>(
  TResult Function(
    int totalUsers,
    int todayNewUsers,
    int activeUsers,
    int hourlyActiveUsers,
    DateTime statsUpdatedAt,
    bool statsStale,
    int totalApiKeys,
    int activeApiKeys,
    int totalAccounts,
    int normalAccounts,
    int errorAccounts,
    int rateLimitAccounts,
    int overloadAccounts,
    int totalRequests,
    int totalInputTokens,
    int totalOutputTokens,
    int totalCacheCreationTokens,
    int totalCacheReadTokens,
    int totalTokens,
    Sub2ApiDecimal totalCost,
    Sub2ApiDecimal totalActualCost,
    int todayRequests,
    int todayInputTokens,
    int todayOutputTokens,
    int todayCacheCreationTokens,
    int todayCacheReadTokens,
    int todayTokens,
    Sub2ApiDecimal todayCost,
    Sub2ApiDecimal todayActualCost,
    Sub2ApiDecimal averageDurationMs,
    int uptime,
    int rpm,
    int tpm,
  )
  $default,
) {
  final _that = this;
  switch (_that) {
    case _Sub2ApiAdminDashboardStats():
      return $default(
        _that.totalUsers,
        _that.todayNewUsers,
        _that.activeUsers,
        _that.hourlyActiveUsers,
        _that.statsUpdatedAt,
        _that.statsStale,
        _that.totalApiKeys,
        _that.activeApiKeys,
        _that.totalAccounts,
        _that.normalAccounts,
        _that.errorAccounts,
        _that.rateLimitAccounts,
        _that.overloadAccounts,
        _that.totalRequests,
        _that.totalInputTokens,
        _that.totalOutputTokens,
        _that.totalCacheCreationTokens,
        _that.totalCacheReadTokens,
        _that.totalTokens,
        _that.totalCost,
        _that.totalActualCost,
        _that.todayRequests,
        _that.todayInputTokens,
        _that.todayOutputTokens,
        _that.todayCacheCreationTokens,
        _that.todayCacheReadTokens,
        _that.todayTokens,
        _that.todayCost,
        _that.todayActualCost,
        _that.averageDurationMs,
        _that.uptime,
        _that.rpm,
        _that.tpm,
      );
    case _:
      throw StateError('Unexpected subclass');
  }
}