from<T> static method

DataSourceHttp<T>? from<T>(
  1. Object? config
)

Implementation

static DataSourceHttp<T>? from<T>(Object? config) {
  if (config == null) return null;

  if (config is DataSourceHttp) return config as DataSourceHttp<T>;

  if (config is String) {
    config = parseJSON(config);
  }

  if (config is Map) {
    config.removeWhere((key, value) => value == null);

    var id = parseString(findKeyValue(config, ['id'], true));

    String? domain;
    String? name;

    if (id != null) {
      var parts = DataHandler.splitID(id);
      if (parts != null) {
        domain = parts[0];
        name = parts[1];
      }
    }

    domain = parseString(findKeyValue(config, ['domain'], true), domain);
    name = parseString(findKeyValue(config, ['name'], true), name);

    if (domain == null || name == null) return null;

    var baseURL = parseString(findKeyValue(config, ['baseurl', 'url'], true));
    if (baseURL != null) baseURL = resolveDataSourceBaseURL(baseURL);

    var baseURLProxy =
        parseString(findKeyValue(config, ['baseurlproxy', 'urlproxy'], true));
    if (baseURLProxy != null) {
      baseURLProxy = resolveDataSourceBaseURL(baseURLProxy);
    }

    var parameters =
        findKeyValue(config, ['parameters', 'args', 'properties'], true);

    var opGet = DataSourceOperationHttp.from(
        findKeyValue(config, ['opGet', 'get'], true));
    var opFind = DataSourceOperationHttp.from(
        findKeyValue(config, ['opFind', 'find'], true));
    var opFindByID = DataSourceOperationHttp.from(
        findKeyValue(config, ['opFindByID', 'findByID'], true));
    var opFindByIDRange = DataSourceOperationHttp.from(
        findKeyValue(config, ['opFindByIDRange', 'findByIDRange'], true));

    return DataSourceHttp(domain, name,
        baseURL: baseURL,
        baseURLProxy: baseURLProxy,
        parameters: parameters,
        opGet: opGet,
        opFind: opFind,
        opFindByID: opFindByID,
        opFindByIDRange: opFindByIDRange);
  }

  return null;
}