toValue<T> method
dynamic
toValue<
T>( - T value
)
override
Implementation
@override
dynamic toValue<T>(T value) {
if (value == null) return null;
var element = _mapperFor(value)?.createElement(this);
if (element != null) {
try {
try {
Type type = T;
String? typeId;
if (value.runtimeType != type.nonNull &&
value.runtimeType.base != UnresolvedType) {
if (value is! Map && value is! Iterable) {
if (element.mapper.implType == element.mapper.type ||
value.runtimeType != element.mapper.implType) {
typeId = value.runtimeType.id;
type = value.runtimeType;
}
}
}
var typeArgs = type.args;
var fallback = element.mapper.type.base.args;
if (typeArgs.length != fallback.length) {
typeArgs = fallback;
}
var result = element.encoder
.callWith(parameters: [value], typeArguments: typeArgs);
if (result is Map<String, dynamic> && typeId != null) {
result['__type'] = typeId;
}
return result;
} on ArgumentError catch (e, stacktrace) {
Error.throwWithStackTrace(
ArgumentError('Failed to call [encoder] function '
'of ${element.runtimeType}: ${e.message}'),
stacktrace,
);
}
} catch (e, stacktrace) {
Error.throwWithStackTrace(
MapperException.chain(
MapperMethod.encode, '(${value.runtimeType})', e),
stacktrace,
);
}
} else {
throw MapperException.chain(
MapperMethod.encode,
'[$value]',
MapperException.unknownType(value.runtimeType),
);
}
}