generateDefaultFunction method
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');
}
}