serializeProperties function
dynamic
serializeProperties(})
Recursively normalizes response data by transforming keys to camelCase and optionally casting specified properties to numbers or booleans.
Implementation
dynamic serializeProperties(
dynamic originalData, {
List<String>? shouldCastToNumbers,
List<String>? shouldMapToBooleans,
}) {
if (originalData is List) {
return originalData
.map(
(entity) => serializeProperties(
entity,
shouldCastToNumbers: shouldCastToNumbers,
shouldMapToBooleans: shouldMapToBooleans,
),
)
.toList();
}
if (originalData is Map) {
final cleanedObject = <String, dynamic>{};
for (final entry in originalData.entries) {
final originalKey = entry.key.toString();
dynamic sanitizedValue = entry.value;
if (shouldCastToNumbers != null &&
shouldCastToNumbers.contains(originalKey)) {
if (sanitizedValue != null) {
if (sanitizedValue is num) {
// Already numeric
} else {
final str = sanitizedValue.toString();
sanitizedValue = num.tryParse(str) ?? sanitizedValue;
}
}
}
if (shouldMapToBooleans != null &&
shouldMapToBooleans.contains(originalKey)) {
if (sanitizedValue != null) {
final str = sanitizedValue.toString().toLowerCase();
sanitizedValue = (str == '1' || str == 'true');
}
}
cleanedObject[naiveCamelCase(originalKey)] = serializeProperties(
sanitizedValue,
shouldCastToNumbers: shouldCastToNumbers,
shouldMapToBooleans: shouldMapToBooleans,
);
}
return cleanedObject;
}
return originalData;
}