write method

  1. @override
Future<void> write(
  1. AlphaXCacheEntry entry
)
override

Stores entry, including its variant key and response metadata.

Implementation

@override
Future<void> write(AlphaXCacheEntry entry) async {
  if (entry.bodyBytes.length > maxBytes) {
    return;
  }

  final sameIdentity = _entries
      .where((existing) => _sameIdentityResource(existing.key, entry.key))
      .toList(growable: false);
  final incomingVary = entry.vary.toSet();
  if (sameIdentity.any(
    (existing) =>
        existing.vary.toSet().difference(incomingVary).isNotEmpty ||
        incomingVary.difference(existing.vary.toSet()).isNotEmpty,
  )) {
    _entries.removeWhere((existing) => _sameIdentityResource(existing.key, entry.key));
  } else {
    _entries.removeWhere(
      (existing) =>
          _sameIdentityResource(existing.key, entry.key) &&
          existing.vary.toSet().containsAll(incomingVary) &&
          incomingVary.containsAll(existing.vary) &&
          _sameHeaders(existing.key.requestHeaders, entry.key.requestHeaders),
    );
  }

  _entries.add(entry);
  while (_entries.length > maxEntries || totalBytes > maxBytes) {
    _entries.removeAt(0);
  }
}