bind method

List<SlotBinding> bind({
  1. required List<SlotDefinition> slots,
  2. required List<String> deviceIds,
  3. Map<String, Map<String, dynamic>> deviceMetadata = const {},
})

Implementation

List<SlotBinding> bind({
  required List<SlotDefinition> slots,
  required List<String> deviceIds,
  Map<String, Map<String, dynamic>> deviceMetadata = const {},
}) {
  final result = <SlotBinding>[];
  final used = <String>{};

  for (final slot in slots) {
    final deviceId = _match(
      slot.binding,
      deviceIds,
      deviceMetadata,
      used,
    );
    if (deviceId == null) {
      throw SlotBindingException(slot.slotId, 'No matching device');
    }
    _logger.debug('Bound slot',
        {'slotId': slot.slotId, 'deviceId': deviceId});
    result.add(SlotBinding(slotId: slot.slotId, deviceId: deviceId));
    used.add(deviceId);
  }

  return result;
}