Skip to content

Commit 0fd1772

Browse files
authored
CaseInsensitiveMap: added constructor fromEntries. (dart-archive/http_parser#99)
1 parent d3b2a69 commit 0fd1772

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

pkgs/http_parser/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
## 4.0.3-wip
22

3+
* `CaseInsensitiveMap`: added constructor `fromEntries`.
4+
35
* Require Dart 3.4
46

7+
* collection: ^1.19.0
8+
59
## 4.0.2
610

711
* Remove `package:charcode` from dev_dependencies.

pkgs/http_parser/lib/src/case_insensitive_map.dart

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,18 @@ import 'package:collection/collection.dart';
88
///
99
/// Much of HTTP is case-insensitive, so this is useful to have pre-defined.
1010
class CaseInsensitiveMap<V> extends CanonicalizedMap<String, String, V> {
11-
CaseInsensitiveMap() : super((key) => key.toLowerCase());
11+
/// Creates an empty case-insensitive map.
12+
CaseInsensitiveMap() : super(_canonicalizer);
1213

14+
/// Creates a case-insensitive map that is initialized with the key/value
15+
/// pairs of [other].
1316
CaseInsensitiveMap.from(Map<String, V> other)
14-
: super.from(other, (key) => key.toLowerCase());
17+
: super.from(other, _canonicalizer);
18+
19+
/// Creates a case-insensitive map that is initialized with the key/value
20+
/// pairs of [entries].
21+
CaseInsensitiveMap.fromEntries(Iterable<MapEntry<String, V>> entries)
22+
: super.fromEntries(entries, _canonicalizer);
23+
24+
static String _canonicalizer(String key) => key.toLowerCase();
1525
}

pkgs/http_parser/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ environment:
88
sdk: ^3.4.0
99

1010
dependencies:
11-
collection: ^1.15.0
11+
collection: ^1.19.0
1212
source_span: ^1.8.0
1313
string_scanner: ^1.1.0
1414
typed_data: ^1.3.0

pkgs/http_parser/test/case_insensitive_map_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,10 @@ void main() {
2626
expect(map, containsPair('FoO', 'bAr'));
2727
expect(map, equals({'fOo': 'bAr'}));
2828
});
29+
30+
test('.fromEntries() converts an existing map', () {
31+
final map = CaseInsensitiveMap.fromEntries({'fOo': 'bAr'}.entries);
32+
expect(map, containsPair('FoO', 'bAr'));
33+
expect(map, equals({'fOo': 'bAr'}));
34+
});
2935
}

0 commit comments

Comments
 (0)