fromValue<T> method
T
fromValue<
T>( - dynamic value
)
override
Implementation
@override
T fromValue<T>(dynamic value) {
if (value == null) {
return value as T;
}
var type = T;
if (value is Map<String, dynamic> && value['__type'] != null) {
type = TypePlus.fromId(value['__type'] as String);
if (type == UnresolvedType) {
var e = MapperException.unresolvedType(value['__type'] as String);
throw MapperException.chain(MapperMethod.decode, '($T)', e);
}
} else if (value is T) {
return value;
}
var element = _mapperForType(type)?.createElement(this);
if (element != null) {
try {
try {
return element.decoder
.callWith(parameters: [value], typeArguments: type.args) as T;
} on ArgumentError catch (e, stacktrace) {
Error.throwWithStackTrace(
ArgumentError(
'Failed to call [decoder] function of ${element.runtimeType}: ${e.message}'),
stacktrace,
);
}
} catch (e, stacktrace) {
Error.throwWithStackTrace(
MapperException.chain(MapperMethod.decode, '($type)', e),
stacktrace,
);
}
} else {
throw MapperException.chain(
MapperMethod.decode, '($type)', MapperException.unknownType(type));
}
}