isDefaultValue function
Returns true if value is the proto3 default for the given field type.
Proto3 defaults:
- Numeric types (int32, int64, uint32, uint64, sint32, sint64, fixed32, fixed64, sfixed32, sfixed64, float, double): 0 or 0.0
- bool: false
- string: ""
- bytes: empty list
- enum: 0
- message: null
- repeated / map: empty list or empty map
Implementation
bool isDefaultValue(Object? value, String type) {
if (value == null) return true;
switch (type) {
case 'TYPE_INT32':
case 'TYPE_INT64':
case 'TYPE_UINT32':
case 'TYPE_UINT64':
case 'TYPE_SINT32':
case 'TYPE_SINT64':
case 'TYPE_FIXED32':
case 'TYPE_FIXED64':
case 'TYPE_SFIXED32':
case 'TYPE_SFIXED64':
return value is num && value == 0;
case 'TYPE_FLOAT':
case 'TYPE_DOUBLE':
return value is num && value == 0.0;
case 'TYPE_BOOL':
return value is bool && !value;
case 'TYPE_STRING':
return value is String && value.isEmpty;
case 'TYPE_BYTES':
return value is List && value.isEmpty;
case 'TYPE_ENUM':
return value is int && value == 0;
case 'TYPE_MESSAGE':
return false; // null is already handled above; a non-null message is never default.
default:
return false;
}
}