// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /// Indexes a list of `enum` values by simple name. /// /// In Dart enum names are prefixed with enum class name. For example, for /// `enum Vote { yea, nay }`, `Vote.yea.toString()` produces `"Vote.yea"` /// rather than just `"yea"` - the simple name. This class provides methods for /// getting and looking up by simple names. /// /// Example: /// /// enum Vote { yea, nay } /// final index = new EnumIndex(Vote.values); /// index.lookupBySimpleName('yea'); // returns Vote.yea /// index.toSimpleName(Vote.nay); // returns 'nay' class EnumIndex<E> { /// Creates an index of [enumValues]. EnumIndex(List<E> enumValues) : _nameToValue = new Map<String, E>.fromIterable( enumValues, key: _getSimpleName ), _valueToName = new Map<E, String>.fromIterable( enumValues, value: _getSimpleName ); final Map<String, E> _nameToValue; final Map<E, String> _valueToName; /// Given a [simpleName] finds the corresponding enum value. E lookupBySimpleName(String simpleName) => _nameToValue[simpleName]; /// Returns the simple name for [enumValue]. String toSimpleName(E enumValue) => _valueToName[enumValue]; } String _getSimpleName(dynamic enumValue) { return enumValue.toString().split('.').last; }