import 'package:freezed_annotation/freezed_annotation.dart'; import 'iso_duration.dart'; part 'rmv_models.freezed.dart'; part 'rmv_models.g.dart'; @freezed abstract class Product with _$Product { const factory Product({ String? name, String? line, String? displayNumber, String? category, String? categoryCode, String? operator, }) = _Product; factory Product.fromJson(Map json) => _$ProductFromJson(json); } @freezed abstract class StopLocation with _$StopLocation { const factory StopLocation({ required String id, String? extId, required String name, String? description, double? lat, double? lon, int? products, int? distanceMeters, }) = _StopLocation; factory StopLocation.fromJson(Map json) => _$StopLocationFromJson(json); } @freezed abstract class Departure with _$Departure { const factory Departure({ required String stopId, String? stopExtId, required String stopName, required String name, required String direction, String? directionFlag, required DateTime scheduledTime, DateTime? realTime, int? delayMinutes, String? track, String? realTrack, @Default(false) bool cancelled, @Default(true) bool reachable, Product? product, String? journeyRef, }) = _Departure; factory Departure.fromJson(Map json) => _$DepartureFromJson(json); } @freezed abstract class Arrival with _$Arrival { const factory Arrival({ required String stopId, String? stopExtId, required String stopName, required String name, required String origin, required DateTime scheduledTime, DateTime? realTime, int? delayMinutes, String? track, String? realTrack, @Default(false) bool cancelled, Product? product, String? journeyRef, }) = _Arrival; factory Arrival.fromJson(Map json) => _$ArrivalFromJson(json); } @freezed abstract class TripEndpoint with _$TripEndpoint { const factory TripEndpoint({ required String stopId, String? stopExtId, required String name, double? lat, double? lon, required DateTime scheduledTime, DateTime? realTime, int? delayMinutes, String? track, String? realTrack, String? type, }) = _TripEndpoint; factory TripEndpoint.fromJson(Map json) => _$TripEndpointFromJson(json); } @freezed abstract class JourneyStop with _$JourneyStop { const factory JourneyStop({ required String id, String? extId, required String name, double? lat, double? lon, int? routeIdx, DateTime? scheduledArrival, DateTime? scheduledDeparture, DateTime? realArrival, DateTime? realDeparture, String? arrTrack, String? depTrack, String? realArrTrack, String? realDepTrack, @Default(false) bool cancelled, @Default(false) bool cancelledArrival, @Default(false) bool cancelledDeparture, }) = _JourneyStop; factory JourneyStop.fromJson(Map json) => _$JourneyStopFromJson(json); } enum LegType { @JsonValue('JOURNEY') journey, @JsonValue('WALK') walk, @JsonValue('TRANSFER') transfer, @JsonValue('BIKE') bike, @JsonValue('CAR') car, @JsonValue('PARK_RIDE') parkRide, @JsonValue('TAXI') taxi, @JsonValue('CHECK_IN') checkIn, @JsonValue('CHECK_OUT') checkOut, @JsonValue('DUMMY') dummy, @JsonValue('UNKNOWN') unknown, } @freezed abstract class Leg with _$Leg { const factory Leg({ required String id, required int idx, @Default(LegType.unknown) LegType type, String? name, String? category, String? number, String? direction, required TripEndpoint origin, required TripEndpoint destination, @JsonKey(fromJson: IsoDuration.fromJson, toJson: IsoDuration.toJson) Duration? duration, @Default(false) bool cancelled, @Default(false) bool partCancelled, @Default(true) bool reachable, Product? product, String? journeyRef, @Default([]) List stops, }) = _Leg; factory Leg.fromJson(Map json) => _$LegFromJson(json); } @freezed abstract class Trip with _$Trip { const factory Trip({ String? tripId, String? ctxRecon, String? checksum, @JsonKey(fromJson: IsoDuration.fromJson, toJson: IsoDuration.toJson) Duration? duration, @JsonKey(fromJson: IsoDuration.fromJson, toJson: IsoDuration.toJson) Duration? realDuration, int? transferCount, @Default([]) List legs, }) = _Trip; factory Trip.fromJson(Map json) => _$TripFromJson(json); } @freezed abstract class TripSearchResult with _$TripSearchResult { const factory TripSearchResult({ @Default([]) List trips, String? scrollContextLater, String? scrollContextEarlier, }) = _TripSearchResult; factory TripSearchResult.fromJson(Map json) => _$TripSearchResultFromJson(json); } @freezed abstract class JourneyDetail with _$JourneyDetail { const factory JourneyDetail({ String? journeyId, Product? product, String? direction, @Default([]) List stops, }) = _JourneyDetail; factory JourneyDetail.fromJson(Map json) => _$JourneyDetailFromJson(json); } @freezed abstract class HimMessage with _$HimMessage { const factory HimMessage({ required String id, String? externalId, String? head, String? lead, String? text, String? category, String? company, int? priority, int? products, DateTime? startValidity, DateTime? endValidity, DateTime? modified, }) = _HimMessage; factory HimMessage.fromJson(Map json) => _$HimMessageFromJson(json); }