generateDefaultFunction method

String? generateDefaultFunction()

Returns a function expression that returns the field's default value.

Implementation

String? generateDefaultFunction() {
  assert(!isRepeated);
  switch (descriptor.type) {
    case FieldDescriptorProto_Type.TYPE_BOOL:
      return _getDefaultAsBoolExpr(null);
    case FieldDescriptorProto_Type.TYPE_FLOAT:
    case FieldDescriptorProto_Type.TYPE_DOUBLE:
      if (!descriptor.hasDefaultValue()) {
        return null;
      } else if ('0.0' == descriptor.defaultValue ||
          '0' == descriptor.defaultValue) {
        return null;
      } else if (descriptor.defaultValue == 'inf') {
        return '$coreImportPrefix.double.infinity';
      } else if (descriptor.defaultValue == '-inf') {
        return '$coreImportPrefix.double.negativeInfinity';
      } else if (descriptor.defaultValue == 'nan') {
        return '$coreImportPrefix.double.nan';
      } else if (_hexLiteralRegex.hasMatch(descriptor.defaultValue)) {
        return '(${descriptor.defaultValue}).toDouble()';
      } else if (_integerLiteralRegex.hasMatch(descriptor.defaultValue)) {
        return '${descriptor.defaultValue}.0';
      } else if (_decimalLiteralRegexA.hasMatch(descriptor.defaultValue) ||
          _decimalLiteralRegexB.hasMatch(descriptor.defaultValue)) {
        return descriptor.defaultValue;
      }
      throw _invalidDefaultValue;
    case FieldDescriptorProto_Type.TYPE_INT32:
    case FieldDescriptorProto_Type.TYPE_UINT32:
    case FieldDescriptorProto_Type.TYPE_SINT32:
    case FieldDescriptorProto_Type.TYPE_FIXED32:
    case FieldDescriptorProto_Type.TYPE_SFIXED32:
      return _getDefaultAsInt32Expr(null);
    case FieldDescriptorProto_Type.TYPE_INT64:
    case FieldDescriptorProto_Type.TYPE_UINT64:
    case FieldDescriptorProto_Type.TYPE_SINT64:
    case FieldDescriptorProto_Type.TYPE_FIXED64:
    case FieldDescriptorProto_Type.TYPE_SFIXED64:
      var value = '0';
      if (descriptor.hasDefaultValue()) value = descriptor.defaultValue;
      if (value == '0') return '$_fixnumImportPrefix.Int64.ZERO';
      return "$protobufImportPrefix.parseLongInt('$value')";
    case FieldDescriptorProto_Type.TYPE_STRING:
      return _getDefaultAsStringExpr(null);
    case FieldDescriptorProto_Type.TYPE_BYTES:
      if (!descriptor.hasDefaultValue() || descriptor.defaultValue.isEmpty) {
        return null;
      }
      final byteList = descriptor.defaultValue.codeUnits
          .map((b) => '0x${b.toRadixString(16)}')
          .join(',');
      return '() => <$coreImportPrefix.int>[$byteList]';
    case FieldDescriptorProto_Type.TYPE_GROUP:
    case FieldDescriptorProto_Type.TYPE_MESSAGE:
      return '${baseType.getDartType(parent.fileGen!)}.getDefault';
    case FieldDescriptorProto_Type.TYPE_ENUM:
      final className = baseType.getDartType(parent.fileGen!);
      final gen = baseType.generator as EnumGenerator;
      if (descriptor.hasDefaultValue() &&
          descriptor.defaultValue.isNotEmpty) {
        return '$className.${descriptor.defaultValue}';
      } else if (gen._canonicalValues.isNotEmpty) {
        return '$className.${gen.dartNames[gen._canonicalValues[0].name]}';
      }
      return null;
    default:
      throw _typeNotImplemented('generatedDefaultFunction');
  }
}