matchTypeByName static method
Matches expected type to an actual type.
expectedType
an expected type name to match.actualType
an actual type to match defined by type code.actualValue
an optional value to match its type to the expected one. Returns true if types are matching and false if they don't.
Implementation
static bool matchTypeByName(String? expectedType, TypeCode actualType,
[actualValue]) {
if (expectedType == null) return true;
// if (actualType == null) throw Exception('Actual type cannot be null');
expectedType = expectedType.toLowerCase();
if (expectedType == 'object') {
return true;
} else if (expectedType == 'int' || expectedType == 'integer') {
return actualType == TypeCode.Integer
// Special provisions for dynamic data
||
actualType == TypeCode.Long;
} else if (expectedType == 'long') {
return actualType == TypeCode.Long
// Special provisions for dynamic data
||
actualType == TypeCode.Integer;
} else if (expectedType == 'float') {
return actualType == TypeCode.Float
// Special provisions for dynamic data
||
actualType == TypeCode.Double ||
actualType == TypeCode.Integer ||
actualType == TypeCode.Long;
} else if (expectedType == 'double') {
return actualType == TypeCode.Double
// Special provisions for dynamic data
||
actualType == TypeCode.Float;
} else if (expectedType == 'string') {
return actualType == TypeCode.String;
} else if (expectedType == 'bool' || expectedType == 'boolean') {
return actualType == TypeCode.Boolean;
} else if (expectedType == 'date' || expectedType == 'datetime') {
return actualType == TypeCode.DateTime
// Special provisions for dynamic data
||
(actualType == TypeCode.String &&
DateTimeConverter.toNullableDateTime(actualValue) != null);
} else if (expectedType == 'timespan' || expectedType == 'duration') {
return actualType == TypeCode.Duration
// Special provisions for dynamic data
||
actualType == TypeCode.Integer ||
actualType == TypeCode.Long;
} else if (expectedType == 'enum') {
return actualType == TypeCode.Integer || actualType == TypeCode.String;
} else if (expectedType == 'map' ||
expectedType == 'dict' ||
expectedType == 'dictionary') {
return actualType == TypeCode.Map;
} else if (expectedType == 'array' || expectedType == 'list') {
return actualType == TypeCode.Array;
} else if (expectedType.endsWith('[]')) {
// Todo: Check subtype
return actualType == TypeCode.Array;
} else {
return false;
}
}