instantiateAdaptor<C extends Object, A extends DBAdapter<C>> static method

FutureOr<A> instantiateAdaptor<C extends Object, A extends DBAdapter<C>>(
  1. List<MapEntry<DBAdapterInstantiator<C, A>, Map<String, dynamic>>> instantiators,
  2. Map<String, dynamic> config, {
  3. int minConnections = 1,
  4. int maxConnections = 3,
  5. EntityRepositoryProvider? parentRepositoryProvider,
  6. String? workingPath,
})

Implementation

static FutureOr<A>
    instantiateAdaptor<C extends Object, A extends DBAdapter<C>>(
        List<MapEntry<DBAdapterInstantiator<C, A>, Map<String, dynamic>>>
            instantiators,
        Map<String, dynamic> config,
        {int minConnections = 1,
        int maxConnections = 3,
        EntityRepositoryProvider? parentRepositoryProvider,
        String? workingPath}) {
  if (instantiators.isEmpty) {
    throw StateError(
        "No `$A` instantiator for `config` keys: ${config.keys.toList()}");
  }

  var asyncInstantiators = <Future<A>>[];

  for (var e in instantiators) {
    var f = e.key;
    var conf = e.value;

    var ret = f(conf,
        minConnections: minConnections,
        maxConnections: maxConnections,
        parentRepositoryProvider: parentRepositoryProvider,
        workingPath: workingPath);

    if (ret == null) {
      continue;
    } else if (ret is A) {
      return ret;
    } else if (ret is Future<A>) {
      asyncInstantiators.add(ret);
    }
  }

  if (asyncInstantiators.isNotEmpty) {
    return asyncInstantiators.resolveAll().then((l) {
      for (var e in l) {
        return e;
      }

      throw StateError(
          "Can't async instantiate an `$A` for `config`: $config");
    });
  }

  throw StateError("Can't instantiate an `$A` for `config`: $config");
}