processMultiple<Parameter extends Enum> function

Map<Parameter, WeatherParameterData>? processMultiple<Parameter extends Enum>(
  1. VariablesWithTime? data,
  2. Parameter? converter(
    1. VariableWithValues
    )
)

Implementation

Map<Parameter, WeatherParameterData>? processMultiple<Parameter extends Enum>(
  VariablesWithTime? data,
  Parameter? Function(VariableWithValues) converter,
) {
  if (data == null) return null;
  List<VariableWithValues>? variables = data.variables;
  if (variables == null) return null;

  DateTime startTime = DateTime.fromMillisecondsSinceEpoch(data.time * 1000);
  DateTime endTime = DateTime.fromMillisecondsSinceEpoch(data.timeEnd * 1000);
  Duration interval = Duration(seconds: data.interval);
  List<DateTime> timestamps = [
    for (DateTime time = startTime;
        time.isBefore(endTime);
        time = time.add(interval))
      time
  ];

  return Map.fromEntries(variables.map((v) {
    Parameter? variable = converter(v);
    if (variable == null) return null;
    List<double>? values = v.values;
    if (values == null || values.nonNulls.isEmpty) return null;

    return MapEntry(
      variable,
      WeatherParameterData._(
        unit: unitsMap[v.unit],
        data: {
          for (int i = 0; i < timestamps.length && i < values.length; i++)
            timestamps[i]: values[i]
        },
      ),
    );
  }).nonNulls);
}