resolveValueByType<T> method

FutureOr<T?> resolveValueByType<T>(
  1. TypeInfo? type,
  2. Object? value, {
  3. EntityProvider? entityProvider,
  4. EntityCache? entityCache,
  5. EntityHandlerProvider? entityHandlerProvider,
  6. EntityRepositoryProvider? entityRepositoryProvider,
  7. EntityResolutionRules? resolutionRules,
})

Implementation

FutureOr<T?> resolveValueByType<T>(TypeInfo? type, Object? value,
    {EntityProvider? entityProvider,
    EntityCache? entityCache,
    EntityHandlerProvider? entityHandlerProvider,
    EntityRepositoryProvider? entityRepositoryProvider,
    EntityResolutionRules? resolutionRules}) {
  if (type == null) {
    return value as T?;
  }

  if (type.isPrimitiveType) {
    return type.parse(value) as T?;
  } else if (type.equalsType(_typeInfoTime)) {
    return Time.from(value) as T?;
  } else if (type.equalsType(_typeInfoDateTime)) {
    return TypeParser.parseDateTime(value) as T?;
  } else if (type.equalsType(_typeInfoDecimal)) {
    return Decimal.from(value) as T?;
  } else if (type.equalsType(_typeInfoDynamicInt)) {
    return DynamicInt.from(value) as T?;
  }

  var tType = TypeInfo.from(T);
  var valueType = value != null ? TypeInfo.from(value) : null;

  if (type.equalsTypeOrEntityType(valueType) &&
      value is T &&
      (!tType.isAnyType && type.equalsType(tType) && !type.hasArguments)) {
    return value;
  }

  final resolutionRulesResolved =
      resolveEntityResolutionRules(resolutionRules);

  if (type.equalsType(_typeInfoUint8List)) {
    return _resolveValueAsUInt8List(value, resolutionRulesResolved) as T?;
  }

  entityCache ??= JsonEntityCacheSimple();

  if (value is String &&
      (type.isListEntity || type.isEntityReferenceListType) &&
      _regExpStringList.hasMatch(value)) {
    var list = TypeParser.parseList(value);
    if (list != null) {
      value = list;
    }
  }

  if (value is List<Object?>) {
    return _resolveListByType<T>(
        type,
        value,
        entityProvider,
        entityHandlerProvider,
        entityRepositoryProvider,
        entityCache,
        resolutionRulesResolved);
  } else if (value is Map<String, Object?>) {
    return _resolveMapByType<T>(
        type,
        value,
        entityProvider,
        entityHandlerProvider,
        entityRepositoryProvider,
        entityCache,
        resolutionRulesResolved);
  } else {
    return _resolveEntityByType<T>(
        type,
        value,
        entityProvider,
        entityHandlerProvider,
        entityRepositoryProvider,
        entityCache,
        resolutionRulesResolved);
  }
}