36 lines
1.2 KiB
Dart
36 lines
1.2 KiB
Dart
import '../../../../api/connect/rmv/rmv_models.dart';
|
|
import '../../../../api/mhsl/custom_timetable_event/custom_timetable_event.dart';
|
|
import '../../../../api/webuntis/queries/get_timetable/get_timetable_response.dart';
|
|
import 'commute_direction.dart';
|
|
|
|
sealed class ArbitraryAppointment {
|
|
const ArbitraryAppointment();
|
|
|
|
T when<T>({
|
|
required T Function(GetTimetableResponseObject lesson) webuntis,
|
|
required T Function(CustomTimetableEvent event) custom,
|
|
required T Function(Trip trip, CommuteDirection direction) commute,
|
|
}) => switch (this) {
|
|
WebuntisAppointment(:final lesson) => webuntis(lesson),
|
|
CustomAppointment(:final event) => custom(event),
|
|
CommuteAppointment(:final trip, :final direction) =>
|
|
commute(trip, direction),
|
|
};
|
|
}
|
|
|
|
class WebuntisAppointment extends ArbitraryAppointment {
|
|
final GetTimetableResponseObject lesson;
|
|
const WebuntisAppointment(this.lesson);
|
|
}
|
|
|
|
class CustomAppointment extends ArbitraryAppointment {
|
|
final CustomTimetableEvent event;
|
|
const CustomAppointment(this.event);
|
|
}
|
|
|
|
class CommuteAppointment extends ArbitraryAppointment {
|
|
final Trip trip;
|
|
final CommuteDirection direction;
|
|
const CommuteAppointment(this.trip, this.direction);
|
|
}
|