ProjectionType<R, O extends ProjectionOutput> constructor

ProjectionType<R, O extends ProjectionOutput>({
  1. required List<Slot<Object?>> slots,
  2. required R assemble(
    1. List<Object?> values
    ),
  3. required O fields(
    1. ProjectionFields fields
    ),
})

Implementation

ProjectionType({
  required List<Slot<Object?>> slots,
  required this.assemble,
  required this.fields,
}) : slots = List.unmodifiable(slots) {
  if (this.slots.isEmpty) {
    throw const OrmException(
      'PROJECTION.EMPTY',
      'Declare at least one slot.',
    );
  }
  final keys = Set<Slot<Object?>>.identity();
  final names = <String>{};
  for (final slot in this.slots) {
    if (!keys.add(slot) || !names.add(slot.name)) {
      throw const OrmException(
        'PROJECTION.SLOT',
        'Projection slots must have distinct identities and names.',
      );
    }
  }
}