blob: 8b1b19d072b2c1f5820343b4a9a15eb45b20692a [file] [log] [blame]
// Copyright (c) 2011, 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.
part of protobuf;
/// A base class for all Protocol Buffer enum types.
///
/// All Protocol Buffer [:enum:] classes inherit from ProtobufEnum. For
/// example, given the following enum defined in a .proto file:
///
/// message MyMessage {
/// enum Color {
/// RED = 0;
/// GREEN = 1;
/// BLUE = 2;
/// };
/// // ...
/// }
///
/// the generated Dart file will include a [:MyMessage_Color:] class that
/// [:extends ProtobufEnum:]. It will also include a [:const MyMessage_Color:]
/// for each of the three values defined. Here are some examples:
///
/// MyMessage_Color.RED // => a MyMessage_Color instance
/// MyMessage_Color.GREEN.value // => 1
/// MyMessage_Color.GREEN.name // => "GREEN"
class ProtobufEnum {
/// This enum's integer value, as specified in the .proto file.
final int value;
/// This enum's name, as specified in the .proto file.
final String name;
/// Returns a new constant ProtobufEnum using [value] and [name].
const ProtobufEnum(this.value, this.name);
/// Returns a Map for all of the [ProtobufEnum]s in [byIndex], mapping each
/// [ProtobufEnum]'s [value] to the [ProtobufEnum].
static Map<int, T> initByValue<T extends ProtobufEnum>(List<T> byIndex) {
var byValue = <int, T>{};
for (var v in byIndex) {
byValue[v.value] = v;
}
return byValue;
}
// Subclasses will typically have a private constructor and a fixed set of
// instances, so `Object.operator==()` will work, and does not need to
// be overridden explicitly.
@override
bool operator ==(Object o);
@override
int get hashCode => value;
/// Returns this enum's [name].
@override
String toString() => name;
}