class PhoneType extends $pb.ProtobufEnum {
  static const PhoneType MOBILE = PhoneType._(0, _omitEnumNames ? '' : 'MOBILE');
  static const PhoneType HOME = PhoneType._(1, _omitEnumNames ? '' : 'HOME');
  static const PhoneType WORK = PhoneType._(2, _omitEnumNames ? '' : 'WORK');

  static const PhoneType BUSINESS = WORK;

  static const $core.List<PhoneType> values = <PhoneType> [
    MOBILE,
    HOME,
    WORK,
  ];

  static final $core.Map<$core.int, PhoneType> _byValue = $pb.ProtobufEnum.initByValue(values);
  static PhoneType? valueOf($core.int value) => _byValue[value];

  const PhoneType._(super.v, super.n);
}


const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');
