| Index: mojo/public/dart/third_party/shelf/lib/src/shelf_unmodifiable_map.dart
|
| diff --git a/mojo/public/dart/third_party/shelf/lib/src/shelf_unmodifiable_map.dart b/mojo/public/dart/third_party/shelf/lib/src/shelf_unmodifiable_map.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d07ebfd59635248f2e1dc74623d3daeb3d7174cc
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/shelf/lib/src/shelf_unmodifiable_map.dart
|
| @@ -0,0 +1,52 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library shelf.shelf_unmodifiable_map;
|
| +
|
| +import 'dart:collection';
|
| +
|
| +import 'package:collection/wrappers.dart' as pc;
|
| +
|
| +/// A simple wrapper over [pc.UnmodifiableMapView] which avoids re-wrapping
|
| +/// itself.
|
| +class ShelfUnmodifiableMap<V> extends UnmodifiableMapView<String, V> {
|
| + /// If [source] is a [ShelfUnmodifiableMap] with matching [ignoreKeyCase],
|
| + /// then [source] is returned.
|
| + ///
|
| + /// If [source] is `null` it is treated like an empty map.
|
| + ///
|
| + /// If [ignoreKeyCase] is `true`, the keys will have case-insensitive access.
|
| + ///
|
| + /// [source] is copied to a new [Map] to ensure changes to the parameter value
|
| + /// after constructions are not reflected.
|
| + factory ShelfUnmodifiableMap(Map<String, V> source,
|
| + {bool ignoreKeyCase: false}) {
|
| + if (source is ShelfUnmodifiableMap<V>) {
|
| + return source;
|
| + }
|
| +
|
| + if (source == null || source.isEmpty) {
|
| + return const _EmptyShelfUnmodifiableMap();
|
| + }
|
| +
|
| + if (ignoreKeyCase) {
|
| + source = new pc.CanonicalizedMap<String, String, V>.from(
|
| + source, (key) => key.toLowerCase(), isValidKey: (key) => key != null);
|
| + } else {
|
| + source = new Map<String, V>.from(source);
|
| + }
|
| +
|
| + return new ShelfUnmodifiableMap<V>._(source);
|
| + }
|
| +
|
| + ShelfUnmodifiableMap._(Map<String, V> source) : super(source);
|
| +}
|
| +
|
| +/// An const empty implementation of [ShelfUnmodifiableMap].
|
| +// TODO(kevmoo): Consider using MapView from dart:collection which has a const
|
| +// ctor. Would require updating min SDK to 1.5.
|
| +class _EmptyShelfUnmodifiableMap<V> extends pc.DelegatingMap<String, V>
|
| + implements ShelfUnmodifiableMap<V> {
|
| + const _EmptyShelfUnmodifiableMap() : super(const {});
|
| +}
|
|
|