deserialize method

  1. @override
AnyOf deserialize(
  1. Serializers serializers,
  2. Object serialized, {
  3. FullType specifiedType = FullType.unspecified,
})
override

Deserializes serialized.

serialized is a boolean, an integer, a double or a String.

Use serializers as needed for nested deserialization. Information about the type being deserialized is provided in specifiedType.

Implementation

@override
AnyOf deserialize(Serializers serializers, Object serialized,
    {FullType specifiedType = FullType.unspecified}) {
  //deserialize the object without knowing the type
  final types = specifiedType.parameters.map((e) => e.root!).toList();
  if (specifiedType.parameters.isEmpty) {
    throw UnsupportedError('Provide possible types in parameters');
  }

  final values = <int, Object?>{};

  for (var i = 0; i < specifiedType.parameters.length; i++) {
    final type = specifiedType.parameters[i];
    try {
      final _v = serializers.deserialize(serialized, specifiedType: type);
      values[i] = _v;
    } catch (e) {
      continue;
    }
  }

  if (values.isEmpty) {
    throw UnsupportedError(
        'failed to deserialize to any of the provided types: $specifiedType');
  }
  return AnyOfDynamic(
    types: types,
    values: values,
  );
}