Author: Adam <git@apiote.xyz>
move structures to traffic and finalise clockworkOrange
api/structs_gen.go | 113 ++++++++++++++++++++--- traffic/realtime.go | 75 --------------- traffic/realtime_lua.go | 12 -- traffic/structs_gen.go | 203 ++++++++++++++++++++++++++++++++++++++++++
diff --git a/api/structs_gen.go b/api/structs_gen.go index 783f116ec9e066b41e619c57de0c73a71dabe25d..64aec6e11ae8b12c13a5c9fc03f8ec5834082444 100644 --- a/api/structs_gen.go +++ b/api/structs_gen.go @@ -19,6 +19,18 @@ func (t *LineResponseDev) Encode() ([]byte, error) { return bare.Marshal(t) } +type LineResponseV2 struct { + Line LineV2 `bare:"line"` +} + +func (t *LineResponseV2) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *LineResponseV2) Encode() ([]byte, error) { + return bare.Marshal(t) +} + type LineResponseV1 struct { Line LineV1 `bare:"line"` } @@ -40,6 +52,18 @@ return bare.Unmarshal(data, t) } func (t *FeedsResponseDev) Encode() ([]byte, error) { + return bare.Marshal(t) +} + +type FeedsResponseV2 struct { + Feeds []FeedInfoV2 `bare:"feeds"` +} + +func (t *FeedsResponseV2) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *FeedsResponseV2) Encode() ([]byte, error) { return bare.Marshal(t) } @@ -104,15 +128,15 @@ func (t *QueryablesResponseDev) Encode() ([]byte, error) { return bare.Marshal(t) } -type QueryablesResponseV1 struct { - Queryables []QueryableV1 `bare:"queryables"` +type QueryablesResponseV3 struct { + Queryables []QueryableV3 `bare:"queryables"` } -func (t *QueryablesResponseV1) Decode(data []byte) error { +func (t *QueryablesResponseV3) Decode(data []byte) error { return bare.Unmarshal(data, t) } -func (t *QueryablesResponseV1) Encode() ([]byte, error) { +func (t *QueryablesResponseV3) Encode() ([]byte, error) { return bare.Marshal(t) } @@ -125,6 +149,18 @@ return bare.Unmarshal(data, t) } func (t *QueryablesResponseV2) Encode() ([]byte, error) { + return bare.Marshal(t) +} + +type QueryablesResponseV1 struct { + Queryables []QueryableV1 `bare:"queryables"` +} + +func (t *QueryablesResponseV1) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *QueryablesResponseV1) Encode() ([]byte, error) { return bare.Marshal(t) } @@ -263,15 +299,15 @@ func (t *LocatablesResponseDev) Encode() ([]byte, error) { return bare.Marshal(t) } -type LocatablesResponseV1 struct { - Locatables []LocatableV1 `bare:"locatables"` +type LocatablesResponseV3 struct { + Locatables []LocatableV3 `bare:"locatables"` } -func (t *LocatablesResponseV1) Decode(data []byte) error { +func (t *LocatablesResponseV3) Decode(data []byte) error { return bare.Unmarshal(data, t) } -func (t *LocatablesResponseV1) Encode() ([]byte, error) { +func (t *LocatablesResponseV3) Encode() ([]byte, error) { return bare.Marshal(t) } @@ -287,6 +323,18 @@ func (t *LocatablesResponseV2) Encode() ([]byte, error) { return bare.Marshal(t) } +type LocatablesResponseV1 struct { + Locatables []LocatableV1 `bare:"locatables"` +} + +func (t *LocatablesResponseV1) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *LocatablesResponseV1) Encode() ([]byte, error) { + return bare.Marshal(t) +} + type VehicleV1 struct { Id string `bare:"id"` Position PositionV1 `bare:"position"` @@ -414,17 +462,17 @@ func (t *DeparturesResponseDev) Encode() ([]byte, error) { return bare.Marshal(t) } -type DeparturesResponseV1 struct { +type DeparturesResponseV3 struct { Alerts []AlertV1 `bare:"alerts"` - Departures []DepartureV1 `bare:"departures"` - Stop StopV1 `bare:"stop"` + Departures []DepartureV3 `bare:"departures"` + Stop StopV2 `bare:"stop"` } -func (t *DeparturesResponseV1) Decode(data []byte) error { +func (t *DeparturesResponseV3) Decode(data []byte) error { return bare.Unmarshal(data, t) } -func (t *DeparturesResponseV1) Encode() ([]byte, error) { +func (t *DeparturesResponseV3) Encode() ([]byte, error) { return bare.Marshal(t) } @@ -439,6 +487,20 @@ return bare.Unmarshal(data, t) } func (t *DeparturesResponseV2) Encode() ([]byte, error) { + return bare.Marshal(t) +} + +type DeparturesResponseV1 struct { + Alerts []AlertV1 `bare:"alerts"` + Departures []DepartureV1 `bare:"departures"` + Stop StopV1 `bare:"stop"` +} + +func (t *DeparturesResponseV1) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *DeparturesResponseV1) Encode() ([]byte, error) { return bare.Marshal(t) } @@ -863,6 +925,8 @@ func (_ LineResponseDev) IsUnion() {} func (_ LineResponseV1) IsUnion() {} +func (_ LineResponseV2) IsUnion() {} + type FeedsResponse interface { bare.Union } @@ -871,6 +935,8 @@ func (_ FeedsResponseDev) IsUnion() {} func (_ FeedsResponseV1) IsUnion() {} +func (_ FeedsResponseV2) IsUnion() {} + type QueryablesResponse interface { bare.Union } @@ -880,6 +946,8 @@ func (_ QueryablesResponseV1) IsUnion() {} func (_ QueryablesResponseV2) IsUnion() {} + +func (_ QueryablesResponseV3) IsUnion() {} type QueryableV1 interface { bare.Union @@ -912,6 +980,8 @@ func (_ LocatablesResponseV1) IsUnion() {} func (_ LocatablesResponseV2) IsUnion() {} +func (_ LocatablesResponseV3) IsUnion() {} + type LocatableV1 interface { bare.Union } @@ -943,19 +1013,24 @@ func (_ DeparturesResponseV1) IsUnion() {} func (_ DeparturesResponseV2) IsUnion() {} +func (_ DeparturesResponseV3) IsUnion() {} + func init() { bare.RegisterUnion((*LineResponse)(nil)). Member(*new(LineResponseDev), 0). - Member(*new(LineResponseV1), 1) + Member(*new(LineResponseV1), 1). + Member(*new(LineResponseV2), 2) bare.RegisterUnion((*FeedsResponse)(nil)). Member(*new(FeedsResponseDev), 0). - Member(*new(FeedsResponseV1), 1) + Member(*new(FeedsResponseV1), 1). + Member(*new(FeedsResponseV2), 2) bare.RegisterUnion((*QueryablesResponse)(nil)). Member(*new(QueryablesResponseDev), 0). Member(*new(QueryablesResponseV1), 1). - Member(*new(QueryablesResponseV2), 2) + Member(*new(QueryablesResponseV2), 2). + Member(*new(QueryablesResponseV3), 3) bare.RegisterUnion((*QueryableV1)(nil)). Member(*new(StopV1), 0) @@ -971,7 +1046,8 @@ bare.RegisterUnion((*LocatablesResponse)(nil)). Member(*new(LocatablesResponseDev), 0). Member(*new(LocatablesResponseV1), 1). - Member(*new(LocatablesResponseV2), 2) + Member(*new(LocatablesResponseV2), 2). + Member(*new(LocatablesResponseV3), 3) bare.RegisterUnion((*LocatableV1)(nil)). Member(*new(StopV1), 0). @@ -988,6 +1064,7 @@ bare.RegisterUnion((*DeparturesResponse)(nil)). Member(*new(DeparturesResponseDev), 0). Member(*new(DeparturesResponseV1), 1). - Member(*new(DeparturesResponseV2), 2) + Member(*new(DeparturesResponseV2), 2). + Member(*new(DeparturesResponseV3), 3) } diff --git a/traffic/realtime.go b/traffic/realtime.go index b32b909cb97a7a6b3d38ac85f6c55913a39596ac..d30d0a3cae45e4311f024db114b7eb9320489359 100644 --- a/traffic/realtime.go +++ b/traffic/realtime.go @@ -12,81 +12,6 @@ "git.sr.ht/~sircmpwn/go-bare" "golang.org/x/text/language" ) -type TimetableRelationship uint - -const ( - NOT_REALTIME TimetableRelationship = iota - TRIP_SCHEDULED - TRIP_CANCELED - TRIP_DELETED - TRIP_ADDED - STOP_SKIPPED - NO_TRIP_DATA -) - -type Update struct { - Time string // "HHmmss" - StopSequence uint32 - StopID string - Delay int32 // seconds - TimetableRelationship TimetableRelationship // TODO better name - VehicleStatus VehicleStatus -} -type VehicleStatus struct { - Status DepartureStatus - CongestionLevel CongestionLevel - OccupancyStatus OccupancyStatus - VehicleID string - Latitude float64 - Longitude float64 - Speed float32 // m/s - Bearing float64 // radians clockwise from north // TODO maybe (-π, π) - LineName string - Headsign string - TripID string - WheelchairAccessibility WheelchairAccessibility -} - -type CongestionLevel uint - -const ( - CONGESTION_UNKNOWN CongestionLevel = iota - CONGESTION_SMOOTH - CONGESTION_STOP_AND_GO - CONGESTION_SIGNIFICANT - CONGESTION_SEVERE -) - -type OccupancyStatus uint - -const ( - OCCUPANCY_UNKNOWN OccupancyStatus = iota - OCCUPANCY_EMPTY - OCCUPANCY_MANY_AVAILABLE - OCCUPANCY_FEW_AVAILABLE - OCCUPANCY_STANDING_ONLY - OCCUPANCY_CRUSHED - OCCUPANCY_FULL - OCCUPANCY_NOT_ACCEPTING -) - -type WheelchairAccessibility uint - -const ( - WHEELCHAIR_NO_DATA WheelchairAccessibility = iota - WHEELCHAIR_UNKNOWN - WHHELCHAIR_ACCESSIBLE - WHEELCHAIR_INACCESSIBLE -) - -type DepartureStatus uint - -const ( - IN_TRANSIT DepartureStatus = iota - AT_STOP - INCOMING -) - type BlockingError struct { cause error } diff --git a/traffic/realtime_lua.go b/traffic/realtime_lua.go index e1ac5d5e07d071685eb0032c7cc705ece0bd5830..4218419a4e805a2f3cdf03909475bdf9460498b2 100644 --- a/traffic/realtime_lua.go +++ b/traffic/realtime_lua.go @@ -16,18 +16,6 @@ // ..................... feedID stopID var lastUpdatedLua = map[string]map[RealtimeFeedType]map[string]uint64{} -type LuaUpdates struct { - AreTripsInTimetable bool - Updates map[string]Update - // TODO Alerts -} - -type LuaError struct { - HttpResponseCode int - Message string - WillNextRequestFail bool -} - func (e LuaError) Error() string { return e.Message } diff --git a/traffic/structs_gen.go b/traffic/structs_gen.go index 8dc02eb74541f35ccb516be8aec3899c142bf651..f4acab726f09c9297265cccc18fc9ebaba49d946 100644 --- a/traffic/structs_gen.go +++ b/traffic/structs_gen.go @@ -274,6 +274,73 @@ func (t *DateRange) Encode() ([]byte, error) { return bare.Marshal(t) } +type LuaUpdates struct { + AreTripsInTimetable bool `bare:"areTripsInTimetable"` + Updates map[string]Update `bare:"updates"` +} + +func (t *LuaUpdates) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *LuaUpdates) Encode() ([]byte, error) { + return bare.Marshal(t) +} + +type LuaError struct { + HttpResponseCode int `bare:"httpResponseCode"` + Message string `bare:"message"` + WillNextRequestFail bool `bare:"willNextRequestFail"` +} + +func (t *LuaError) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *LuaError) Encode() ([]byte, error) { + return bare.Marshal(t) +} + +type Update struct { + Time string `bare:"time"` + StopSequence uint32 `bare:"stopSequence"` + StopID string `bare:"stopID"` + Delay int32 `bare:"delay"` + TimetableRelationship TimetableRelationship `bare:"timetableRelationship"` + VehicleStatus VehicleStatus `bare:"vehicleStatus"` +} + +func (t *Update) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *Update) Encode() ([]byte, error) { + return bare.Marshal(t) +} + +type VehicleStatus struct { + Status DepartureStatus `bare:"status"` + CongestionLevel CongestionLevel `bare:"congestionLevel"` + OccupancyStatus OccupancyStatus `bare:"occupancyStatus"` + VehicleID string `bare:"vehicleID"` + Latitude float64 `bare:"latitude"` + Longitude float64 `bare:"longitude"` + Speed float32 `bare:"speed"` + Bearing float64 `bare:"bearing"` + LineName string `bare:"lineName"` + Headsign string `bare:"headsign"` + TripID string `bare:"tripID"` + WheelchairAccessibility WheelchairAccessibility `bare:"wheelchairAccessibility"` +} + +func (t *VehicleStatus) Decode(data []byte) error { + return bare.Unmarshal(data, t) +} + +func (t *VehicleStatus) Encode() ([]byte, error) { + return bare.Marshal(t) +} + type Direction uint const ( @@ -435,3 +502,139 @@ return "QRLocationQuery" } panic(errors.New("Invalid QRLocation value")) } + +type TimetableRelationship uint + +const ( + NOT_REALTIME TimetableRelationship = 0 + TRIP_SCHEDULED TimetableRelationship = 1 + TRIP_CANCELED TimetableRelationship = 2 + TRIP_DELETED TimetableRelationship = 3 + TRIP_ADDED TimetableRelationship = 4 + STOP_SKIPPED TimetableRelationship = 5 + NO_TRIP_DATA TimetableRelationship = 6 +) + +func (t TimetableRelationship) String() string { + switch t { + case NOT_REALTIME: + return "NOT_REALTIME" + case TRIP_SCHEDULED: + return "TRIP_SCHEDULED" + case TRIP_CANCELED: + return "TRIP_CANCELED" + case TRIP_DELETED: + return "TRIP_DELETED" + case TRIP_ADDED: + return "TRIP_ADDED" + case STOP_SKIPPED: + return "STOP_SKIPPED" + case NO_TRIP_DATA: + return "NO_TRIP_DATA" + } + panic(errors.New("Invalid TimetableRelationship value")) +} + +type CongestionLevel uint + +const ( + CONGESTION_UNKNOWN CongestionLevel = 0 + CONGESTION_SMOOTH CongestionLevel = 1 + CONGESTION_STOP_AND_GO CongestionLevel = 2 + CONGESTION_SIGNIFICANT CongestionLevel = 3 + CONGESTION_SEVERE CongestionLevel = 4 +) + +func (t CongestionLevel) String() string { + switch t { + case CONGESTION_UNKNOWN: + return "CONGESTION_UNKNOWN" + case CONGESTION_SMOOTH: + return "CONGESTION_SMOOTH" + case CONGESTION_STOP_AND_GO: + return "CONGESTION_STOP_AND_GO" + case CONGESTION_SIGNIFICANT: + return "CONGESTION_SIGNIFICANT" + case CONGESTION_SEVERE: + return "CONGESTION_SEVERE" + } + panic(errors.New("Invalid CongestionLevel value")) +} + +type OccupancyStatus uint + +const ( + OCCUPANCY_UNKNOWN OccupancyStatus = 0 + OCCUPANCY_EMPTY OccupancyStatus = 1 + OCCUPANCY_MANY_AVAILABLE OccupancyStatus = 2 + OCCUPANCY_FEW_AVAILABLE OccupancyStatus = 3 + OCCUPANCY_STANDING_ONLY OccupancyStatus = 4 + OCCUPANCY_CRUSHED OccupancyStatus = 5 + OCCUPANCY_FULL OccupancyStatus = 6 + OCCUPANCY_NOT_ACCEPTING OccupancyStatus = 7 +) + +func (t OccupancyStatus) String() string { + switch t { + case OCCUPANCY_UNKNOWN: + return "OCCUPANCY_UNKNOWN" + case OCCUPANCY_EMPTY: + return "OCCUPANCY_EMPTY" + case OCCUPANCY_MANY_AVAILABLE: + return "OCCUPANCY_MANY_AVAILABLE" + case OCCUPANCY_FEW_AVAILABLE: + return "OCCUPANCY_FEW_AVAILABLE" + case OCCUPANCY_STANDING_ONLY: + return "OCCUPANCY_STANDING_ONLY" + case OCCUPANCY_CRUSHED: + return "OCCUPANCY_CRUSHED" + case OCCUPANCY_FULL: + return "OCCUPANCY_FULL" + case OCCUPANCY_NOT_ACCEPTING: + return "OCCUPANCY_NOT_ACCEPTING" + } + panic(errors.New("Invalid OccupancyStatus value")) +} + +type WheelchairAccessibility uint + +const ( + WHEELCHAIR_NO_DATA WheelchairAccessibility = 0 + WHEELCHAIR_UNKNOWN WheelchairAccessibility = 1 + WHHELCHAIR_ACCESSIBLE WheelchairAccessibility = 2 + WHEELCHAIR_INACCESSIBLE WheelchairAccessibility = 3 +) + +func (t WheelchairAccessibility) String() string { + switch t { + case WHEELCHAIR_NO_DATA: + return "WHEELCHAIR_NO_DATA" + case WHEELCHAIR_UNKNOWN: + return "WHEELCHAIR_UNKNOWN" + case WHHELCHAIR_ACCESSIBLE: + return "WHHELCHAIR_ACCESSIBLE" + case WHEELCHAIR_INACCESSIBLE: + return "WHEELCHAIR_INACCESSIBLE" + } + panic(errors.New("Invalid WheelchairAccessibility value")) +} + +type DepartureStatus uint + +const ( + IN_TRANSIT DepartureStatus = 0 + AT_STOP DepartureStatus = 1 + INCOMING DepartureStatus = 2 +) + +func (t DepartureStatus) String() string { + switch t { + case IN_TRANSIT: + return "IN_TRANSIT" + case AT_STOP: + return "AT_STOP" + case INCOMING: + return "INCOMING" + } + panic(errors.New("Invalid DepartureStatus value")) +}