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.typeBool:
      return _getDefaultAsBoolExpr(null);
    case FieldDescriptorProto_Type.typeFloat:
    case FieldDescriptorProto_Type.typeDouble:
      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.typeInt32:
    case FieldDescriptorProto_Type.typeUint32:
    case FieldDescriptorProto_Type.typeSint32:
    case FieldDescriptorProto_Type.typeFixed32:
    case FieldDescriptorProto_Type.typeSfixed32:
      return _getDefaultAsInt32Expr(null);
    case FieldDescriptorProto_Type.typeInt64:
    case FieldDescriptorProto_Type.typeUint64:
    case FieldDescriptorProto_Type.typeSint64:
    case FieldDescriptorProto_Type.typeFixed64:
    case FieldDescriptorProto_Type.typeSfixed64:
      var value = '0';
      if (descriptor.hasDefaultValue()) value = descriptor.defaultValue;
      if (value == '0') return '$_fixnumImportPrefix.Int64.ZERO';
      return "$protobufImportPrefix.parseLongInt('$value')";
    case FieldDescriptorProto_Type.typeString:
      return _getDefaultAsStringExpr(null);
    case FieldDescriptorProto_Type.typeBytes:
      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.typeGroup:
    case FieldDescriptorProto_Type.typeMessage:
      return '${baseType.getDartType(parent.fileGen!)}.getDefault';
    case FieldDescriptorProto_Type.typeEnum:
      final className = baseType.getDartType(parent.fileGen!);
      final gen = baseType.generator as EnumGenerator;
      if (descriptor.hasDefaultValue() &&
          descriptor.defaultValue.isNotEmpty) {
        return '$className.${gen.dartNames[descriptor.defaultValue]}';
      } else if (gen._canonicalValues.isNotEmpty) {
        return '$className.${gen.dartNames[gen._canonicalValues[0].name]}';
      }
      return null;
    default:
      throw _typeNotImplemented('generatedDefaultFunction');
  }
}