I installed the protocol buffers package from source.
Downloaded the gtfs-realtime protobuf definition.
Followed the instructions Go protobuf instructions and ran:
protoc --go_out=. gtfs-realtime.proto
which generated gtfs-realtime.pb.go.
I installed the protocol buffers package from source.
Downloaded the gtfs-realtime protobuf definition.
Followed the instructions Go protobuf instructions and ran:
protoc --go_out=. gtfs-realtime.proto
which generated gtfs-realtime.pb.go.
| package main | |
| import ( | |
| "github.com/golang/protobuf/proto" | |
| "io/ioutil" | |
| "net/http" | |
| ) | |
| func FetchVehicles() ([]byte, error) { | |
| res, err := http.Get("https://data.texas.gov/api/file_data/PlHJDxPVnJinHu1jh-eQr-1YSYPLnxH6AjP1iFvz_IA?filename=VehLoc.pb") | |
| if err != nil { | |
| return nil, err | |
| } | |
| defer res.Body.Close() | |
| return ioutil.ReadAll(res.Body) | |
| } | |
| type Vehicle struct { | |
| VehicleID string | |
| Time uint64 | |
| Speed float32 | |
| Route string | |
| Trip string | |
| Latitude float32 | |
| Longitude float32 | |
| } | |
| func ParseVehiclesResponse(b []byte) ([]Vehicle, error) { | |
| fm := new(FeedMessage) | |
| err := proto.Unmarshal(b, fm) | |
| var vehicles []Vehicle | |
| for _, entity := range fm.GetEntity() { | |
| var vehPos *VehiclePosition = entity.GetVehicle() | |
| var trip *TripDescriptor = vehPos.GetTrip() | |
| var pos *Position = vehPos.GetPosition() | |
| veh := Vehicle{ | |
| VehicleID: vehPos.GetVehicle().GetId(), | |
| Time: vehPos.GetTimestamp(), | |
| Speed: pos.GetSpeed(), | |
| Route: trip.GetRouteId(), | |
| Trip: trip.GetTripId(), | |
| Latitude: pos.GetLatitude(), | |
| Longitude: pos.GetLongitude(), | |
| } | |
| vehicles = append(vehicles, veh) | |
| } | |
| return vehicles, err | |
| } |
| // Code generated by protoc-gen-go. | |
| // source: gtfs-realtime.proto | |
| // DO NOT EDIT! | |
| /* | |
| Package main is a generated protocol buffer package. | |
| It is generated from these files: | |
| gtfs-realtime.proto | |
| It has these top-level messages: | |
| FeedMessage | |
| FeedHeader | |
| FeedEntity | |
| TripUpdate | |
| VehiclePosition | |
| Alert | |
| TimeRange | |
| Position | |
| TripDescriptor | |
| VehicleDescriptor | |
| EntitySelector | |
| TranslatedString | |
| */ | |
| package gtfs_realtime | |
| import proto "github.com/golang/protobuf/proto" | |
| import math "math" | |
| // Reference imports to suppress errors if they are not otherwise used. | |
| var _ = proto.Marshal | |
| var _ = math.Inf | |
| // Determines whether the current fetch is incremental. Currently, | |
| // DIFFERENTIAL mode is unsupported and behavior is unspecified for feeds | |
| // that use this mode. There are discussions on the GTFS-realtime mailing | |
| // list around fully specifying the behavior of DIFFERENTIAL mode and the | |
| // documentation will be updated when those discussions are finalized. | |
| type FeedHeader_Incrementality int32 | |
| const ( | |
| FeedHeader_FULL_DATASET FeedHeader_Incrementality = 0 | |
| FeedHeader_DIFFERENTIAL FeedHeader_Incrementality = 1 | |
| ) | |
| var FeedHeader_Incrementality_name = map[int32]string{ | |
| 0: "FULL_DATASET", | |
| 1: "DIFFERENTIAL", | |
| } | |
| var FeedHeader_Incrementality_value = map[string]int32{ | |
| "FULL_DATASET": 0, | |
| "DIFFERENTIAL": 1, | |
| } | |
| func (x FeedHeader_Incrementality) Enum() *FeedHeader_Incrementality { | |
| p := new(FeedHeader_Incrementality) | |
| *p = x | |
| return p | |
| } | |
| func (x FeedHeader_Incrementality) String() string { | |
| return proto.EnumName(FeedHeader_Incrementality_name, int32(x)) | |
| } | |
| func (x *FeedHeader_Incrementality) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(FeedHeader_Incrementality_value, data, "FeedHeader_Incrementality") | |
| if err != nil { | |
| return err | |
| } | |
| *x = FeedHeader_Incrementality(value) | |
| return nil | |
| } | |
| // The relation between this StopTime and the static schedule. | |
| type TripUpdate_StopTimeUpdate_ScheduleRelationship int32 | |
| const ( | |
| // The vehicle is proceeding in accordance with its static schedule of | |
| // stops, although not necessarily according to the times of the schedule. | |
| // At least one of arrival and departure must be provided. If the schedule | |
| // for this stop contains both arrival and departure times then so must | |
| // this update. | |
| TripUpdate_StopTimeUpdate_SCHEDULED TripUpdate_StopTimeUpdate_ScheduleRelationship = 0 | |
| // The stop is skipped, i.e., the vehicle will not stop at this stop. | |
| // Arrival and departure are optional. | |
| TripUpdate_StopTimeUpdate_SKIPPED TripUpdate_StopTimeUpdate_ScheduleRelationship = 1 | |
| // No data is given for this stop. The main intention for this value is to | |
| // give the predictions only for part of a trip, i.e., if the last update | |
| // for a trip has a NO_DATA specifier, then StopTimes for the rest of the | |
| // stops in the trip are considered to be unspecified as well. | |
| // Neither arrival nor departure should be supplied. | |
| TripUpdate_StopTimeUpdate_NO_DATA TripUpdate_StopTimeUpdate_ScheduleRelationship = 2 | |
| ) | |
| var TripUpdate_StopTimeUpdate_ScheduleRelationship_name = map[int32]string{ | |
| 0: "SCHEDULED", | |
| 1: "SKIPPED", | |
| 2: "NO_DATA", | |
| } | |
| var TripUpdate_StopTimeUpdate_ScheduleRelationship_value = map[string]int32{ | |
| "SCHEDULED": 0, | |
| "SKIPPED": 1, | |
| "NO_DATA": 2, | |
| } | |
| func (x TripUpdate_StopTimeUpdate_ScheduleRelationship) Enum() *TripUpdate_StopTimeUpdate_ScheduleRelationship { | |
| p := new(TripUpdate_StopTimeUpdate_ScheduleRelationship) | |
| *p = x | |
| return p | |
| } | |
| func (x TripUpdate_StopTimeUpdate_ScheduleRelationship) String() string { | |
| return proto.EnumName(TripUpdate_StopTimeUpdate_ScheduleRelationship_name, int32(x)) | |
| } | |
| func (x *TripUpdate_StopTimeUpdate_ScheduleRelationship) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(TripUpdate_StopTimeUpdate_ScheduleRelationship_value, data, "TripUpdate_StopTimeUpdate_ScheduleRelationship") | |
| if err != nil { | |
| return err | |
| } | |
| *x = TripUpdate_StopTimeUpdate_ScheduleRelationship(value) | |
| return nil | |
| } | |
| type VehiclePosition_VehicleStopStatus int32 | |
| const ( | |
| // The vehicle is just about to arrive at the stop (on a stop | |
| // display, the vehicle symbol typically flashes). | |
| VehiclePosition_INCOMING_AT VehiclePosition_VehicleStopStatus = 0 | |
| // The vehicle is standing at the stop. | |
| VehiclePosition_STOPPED_AT VehiclePosition_VehicleStopStatus = 1 | |
| // The vehicle has departed and is in transit to the next stop. | |
| VehiclePosition_IN_TRANSIT_TO VehiclePosition_VehicleStopStatus = 2 | |
| ) | |
| var VehiclePosition_VehicleStopStatus_name = map[int32]string{ | |
| 0: "INCOMING_AT", | |
| 1: "STOPPED_AT", | |
| 2: "IN_TRANSIT_TO", | |
| } | |
| var VehiclePosition_VehicleStopStatus_value = map[string]int32{ | |
| "INCOMING_AT": 0, | |
| "STOPPED_AT": 1, | |
| "IN_TRANSIT_TO": 2, | |
| } | |
| func (x VehiclePosition_VehicleStopStatus) Enum() *VehiclePosition_VehicleStopStatus { | |
| p := new(VehiclePosition_VehicleStopStatus) | |
| *p = x | |
| return p | |
| } | |
| func (x VehiclePosition_VehicleStopStatus) String() string { | |
| return proto.EnumName(VehiclePosition_VehicleStopStatus_name, int32(x)) | |
| } | |
| func (x *VehiclePosition_VehicleStopStatus) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(VehiclePosition_VehicleStopStatus_value, data, "VehiclePosition_VehicleStopStatus") | |
| if err != nil { | |
| return err | |
| } | |
| *x = VehiclePosition_VehicleStopStatus(value) | |
| return nil | |
| } | |
| // Congestion level that is affecting this vehicle. | |
| type VehiclePosition_CongestionLevel int32 | |
| const ( | |
| VehiclePosition_UNKNOWN_CONGESTION_LEVEL VehiclePosition_CongestionLevel = 0 | |
| VehiclePosition_RUNNING_SMOOTHLY VehiclePosition_CongestionLevel = 1 | |
| VehiclePosition_STOP_AND_GO VehiclePosition_CongestionLevel = 2 | |
| VehiclePosition_CONGESTION VehiclePosition_CongestionLevel = 3 | |
| VehiclePosition_SEVERE_CONGESTION VehiclePosition_CongestionLevel = 4 | |
| ) | |
| var VehiclePosition_CongestionLevel_name = map[int32]string{ | |
| 0: "UNKNOWN_CONGESTION_LEVEL", | |
| 1: "RUNNING_SMOOTHLY", | |
| 2: "STOP_AND_GO", | |
| 3: "CONGESTION", | |
| 4: "SEVERE_CONGESTION", | |
| } | |
| var VehiclePosition_CongestionLevel_value = map[string]int32{ | |
| "UNKNOWN_CONGESTION_LEVEL": 0, | |
| "RUNNING_SMOOTHLY": 1, | |
| "STOP_AND_GO": 2, | |
| "CONGESTION": 3, | |
| "SEVERE_CONGESTION": 4, | |
| } | |
| func (x VehiclePosition_CongestionLevel) Enum() *VehiclePosition_CongestionLevel { | |
| p := new(VehiclePosition_CongestionLevel) | |
| *p = x | |
| return p | |
| } | |
| func (x VehiclePosition_CongestionLevel) String() string { | |
| return proto.EnumName(VehiclePosition_CongestionLevel_name, int32(x)) | |
| } | |
| func (x *VehiclePosition_CongestionLevel) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(VehiclePosition_CongestionLevel_value, data, "VehiclePosition_CongestionLevel") | |
| if err != nil { | |
| return err | |
| } | |
| *x = VehiclePosition_CongestionLevel(value) | |
| return nil | |
| } | |
| // The degree of passenger occupancy of the vehicle. This field is still | |
| // experimental, and subject to change. It may be formally adopted in the | |
| // future. | |
| type VehiclePosition_OccupancyStatus int32 | |
| const ( | |
| // The vehicle is considered empty by most measures, and has few or no | |
| // passengers onboard, but is still accepting passengers. | |
| VehiclePosition_EMPTY VehiclePosition_OccupancyStatus = 0 | |
| // The vehicle has a relatively large percentage of seats available. | |
| // What percentage of free seats out of the total seats available is to be | |
| // considered large enough to fall into this category is determined at the | |
| // discretion of the producer. | |
| VehiclePosition_MANY_SEATS_AVAILABLE VehiclePosition_OccupancyStatus = 1 | |
| // The vehicle has a relatively small percentage of seats available. | |
| // What percentage of free seats out of the total seats available is to be | |
| // considered small enough to fall into this category is determined at the | |
| // discretion of the feed producer. | |
| VehiclePosition_FEW_SEATS_AVAILABLE VehiclePosition_OccupancyStatus = 2 | |
| // The vehicle can currently accommodate only standing passengers. | |
| VehiclePosition_STANDING_ROOM_ONLY VehiclePosition_OccupancyStatus = 3 | |
| // The vehicle can currently accommodate only standing passengers | |
| // and has limited space for them. | |
| VehiclePosition_CRUSHED_STANDING_ROOM_ONLY VehiclePosition_OccupancyStatus = 4 | |
| // The vehicle is considered full by most measures, but may still be | |
| // allowing passengers to board. | |
| VehiclePosition_FULL VehiclePosition_OccupancyStatus = 5 | |
| // The vehicle is not accepting additional passengers. | |
| VehiclePosition_NOT_ACCEPTING_PASSENGERS VehiclePosition_OccupancyStatus = 6 | |
| ) | |
| var VehiclePosition_OccupancyStatus_name = map[int32]string{ | |
| 0: "EMPTY", | |
| 1: "MANY_SEATS_AVAILABLE", | |
| 2: "FEW_SEATS_AVAILABLE", | |
| 3: "STANDING_ROOM_ONLY", | |
| 4: "CRUSHED_STANDING_ROOM_ONLY", | |
| 5: "FULL", | |
| 6: "NOT_ACCEPTING_PASSENGERS", | |
| } | |
| var VehiclePosition_OccupancyStatus_value = map[string]int32{ | |
| "EMPTY": 0, | |
| "MANY_SEATS_AVAILABLE": 1, | |
| "FEW_SEATS_AVAILABLE": 2, | |
| "STANDING_ROOM_ONLY": 3, | |
| "CRUSHED_STANDING_ROOM_ONLY": 4, | |
| "FULL": 5, | |
| "NOT_ACCEPTING_PASSENGERS": 6, | |
| } | |
| func (x VehiclePosition_OccupancyStatus) Enum() *VehiclePosition_OccupancyStatus { | |
| p := new(VehiclePosition_OccupancyStatus) | |
| *p = x | |
| return p | |
| } | |
| func (x VehiclePosition_OccupancyStatus) String() string { | |
| return proto.EnumName(VehiclePosition_OccupancyStatus_name, int32(x)) | |
| } | |
| func (x *VehiclePosition_OccupancyStatus) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(VehiclePosition_OccupancyStatus_value, data, "VehiclePosition_OccupancyStatus") | |
| if err != nil { | |
| return err | |
| } | |
| *x = VehiclePosition_OccupancyStatus(value) | |
| return nil | |
| } | |
| // Cause of this alert. | |
| type Alert_Cause int32 | |
| const ( | |
| Alert_UNKNOWN_CAUSE Alert_Cause = 1 | |
| Alert_OTHER_CAUSE Alert_Cause = 2 | |
| Alert_TECHNICAL_PROBLEM Alert_Cause = 3 | |
| Alert_STRIKE Alert_Cause = 4 | |
| Alert_DEMONSTRATION Alert_Cause = 5 | |
| Alert_ACCIDENT Alert_Cause = 6 | |
| Alert_HOLIDAY Alert_Cause = 7 | |
| Alert_WEATHER Alert_Cause = 8 | |
| Alert_MAINTENANCE Alert_Cause = 9 | |
| Alert_CONSTRUCTION Alert_Cause = 10 | |
| Alert_POLICE_ACTIVITY Alert_Cause = 11 | |
| Alert_MEDICAL_EMERGENCY Alert_Cause = 12 | |
| ) | |
| var Alert_Cause_name = map[int32]string{ | |
| 1: "UNKNOWN_CAUSE", | |
| 2: "OTHER_CAUSE", | |
| 3: "TECHNICAL_PROBLEM", | |
| 4: "STRIKE", | |
| 5: "DEMONSTRATION", | |
| 6: "ACCIDENT", | |
| 7: "HOLIDAY", | |
| 8: "WEATHER", | |
| 9: "MAINTENANCE", | |
| 10: "CONSTRUCTION", | |
| 11: "POLICE_ACTIVITY", | |
| 12: "MEDICAL_EMERGENCY", | |
| } | |
| var Alert_Cause_value = map[string]int32{ | |
| "UNKNOWN_CAUSE": 1, | |
| "OTHER_CAUSE": 2, | |
| "TECHNICAL_PROBLEM": 3, | |
| "STRIKE": 4, | |
| "DEMONSTRATION": 5, | |
| "ACCIDENT": 6, | |
| "HOLIDAY": 7, | |
| "WEATHER": 8, | |
| "MAINTENANCE": 9, | |
| "CONSTRUCTION": 10, | |
| "POLICE_ACTIVITY": 11, | |
| "MEDICAL_EMERGENCY": 12, | |
| } | |
| func (x Alert_Cause) Enum() *Alert_Cause { | |
| p := new(Alert_Cause) | |
| *p = x | |
| return p | |
| } | |
| func (x Alert_Cause) String() string { | |
| return proto.EnumName(Alert_Cause_name, int32(x)) | |
| } | |
| func (x *Alert_Cause) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(Alert_Cause_value, data, "Alert_Cause") | |
| if err != nil { | |
| return err | |
| } | |
| *x = Alert_Cause(value) | |
| return nil | |
| } | |
| // What is the effect of this problem on the affected entity. | |
| type Alert_Effect int32 | |
| const ( | |
| Alert_NO_SERVICE Alert_Effect = 1 | |
| Alert_REDUCED_SERVICE Alert_Effect = 2 | |
| // We don't care about INsignificant delays: they are hard to detect, have | |
| // little impact on the user, and would clutter the results as they are too | |
| // frequent. | |
| Alert_SIGNIFICANT_DELAYS Alert_Effect = 3 | |
| Alert_DETOUR Alert_Effect = 4 | |
| Alert_ADDITIONAL_SERVICE Alert_Effect = 5 | |
| Alert_MODIFIED_SERVICE Alert_Effect = 6 | |
| Alert_OTHER_EFFECT Alert_Effect = 7 | |
| Alert_UNKNOWN_EFFECT Alert_Effect = 8 | |
| Alert_STOP_MOVED Alert_Effect = 9 | |
| ) | |
| var Alert_Effect_name = map[int32]string{ | |
| 1: "NO_SERVICE", | |
| 2: "REDUCED_SERVICE", | |
| 3: "SIGNIFICANT_DELAYS", | |
| 4: "DETOUR", | |
| 5: "ADDITIONAL_SERVICE", | |
| 6: "MODIFIED_SERVICE", | |
| 7: "OTHER_EFFECT", | |
| 8: "UNKNOWN_EFFECT", | |
| 9: "STOP_MOVED", | |
| } | |
| var Alert_Effect_value = map[string]int32{ | |
| "NO_SERVICE": 1, | |
| "REDUCED_SERVICE": 2, | |
| "SIGNIFICANT_DELAYS": 3, | |
| "DETOUR": 4, | |
| "ADDITIONAL_SERVICE": 5, | |
| "MODIFIED_SERVICE": 6, | |
| "OTHER_EFFECT": 7, | |
| "UNKNOWN_EFFECT": 8, | |
| "STOP_MOVED": 9, | |
| } | |
| func (x Alert_Effect) Enum() *Alert_Effect { | |
| p := new(Alert_Effect) | |
| *p = x | |
| return p | |
| } | |
| func (x Alert_Effect) String() string { | |
| return proto.EnumName(Alert_Effect_name, int32(x)) | |
| } | |
| func (x *Alert_Effect) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(Alert_Effect_value, data, "Alert_Effect") | |
| if err != nil { | |
| return err | |
| } | |
| *x = Alert_Effect(value) | |
| return nil | |
| } | |
| // The relation between this trip and the static schedule. If a trip is done | |
| // in accordance with temporary schedule, not reflected in GTFS, then it | |
| // shouldn't be marked as SCHEDULED, but likely as ADDED. | |
| type TripDescriptor_ScheduleRelationship int32 | |
| const ( | |
| // Trip that is running in accordance with its GTFS schedule, or is close | |
| // enough to the scheduled trip to be associated with it. | |
| TripDescriptor_SCHEDULED TripDescriptor_ScheduleRelationship = 0 | |
| // An extra trip that was added in addition to a running schedule, for | |
| // example, to replace a broken vehicle or to respond to sudden passenger | |
| // load. | |
| TripDescriptor_ADDED TripDescriptor_ScheduleRelationship = 1 | |
| // A trip that is running with no schedule associated to it, for example, if | |
| // there is no schedule at all. | |
| TripDescriptor_UNSCHEDULED TripDescriptor_ScheduleRelationship = 2 | |
| // A trip that existed in the schedule but was removed. | |
| TripDescriptor_CANCELED TripDescriptor_ScheduleRelationship = 3 | |
| ) | |
| var TripDescriptor_ScheduleRelationship_name = map[int32]string{ | |
| 0: "SCHEDULED", | |
| 1: "ADDED", | |
| 2: "UNSCHEDULED", | |
| 3: "CANCELED", | |
| } | |
| var TripDescriptor_ScheduleRelationship_value = map[string]int32{ | |
| "SCHEDULED": 0, | |
| "ADDED": 1, | |
| "UNSCHEDULED": 2, | |
| "CANCELED": 3, | |
| } | |
| func (x TripDescriptor_ScheduleRelationship) Enum() *TripDescriptor_ScheduleRelationship { | |
| p := new(TripDescriptor_ScheduleRelationship) | |
| *p = x | |
| return p | |
| } | |
| func (x TripDescriptor_ScheduleRelationship) String() string { | |
| return proto.EnumName(TripDescriptor_ScheduleRelationship_name, int32(x)) | |
| } | |
| func (x *TripDescriptor_ScheduleRelationship) UnmarshalJSON(data []byte) error { | |
| value, err := proto.UnmarshalJSONEnum(TripDescriptor_ScheduleRelationship_value, data, "TripDescriptor_ScheduleRelationship") | |
| if err != nil { | |
| return err | |
| } | |
| *x = TripDescriptor_ScheduleRelationship(value) | |
| return nil | |
| } | |
| // The contents of a feed message. | |
| // A feed is a continuous stream of feed messages. Each message in the stream is | |
| // obtained as a response to an appropriate HTTP GET request. | |
| // A realtime feed is always defined with relation to an existing GTFS feed. | |
| // All the entity ids are resolved with respect to the GTFS feed. | |
| // | |
| // A feed depends on some external configuration: | |
| // - The corresponding GTFS feed. | |
| // - Feed application (updates, positions or alerts). A feed should contain only | |
| // items of one specified application; all the other entities will be ignored. | |
| // - Polling frequency | |
| type FeedMessage struct { | |
| // Metadata about this feed and feed message. | |
| Header *FeedHeader `protobuf:"bytes,1,req,name=header" json:"header,omitempty"` | |
| // Contents of the feed. | |
| Entity []*FeedEntity `protobuf:"bytes,2,rep,name=entity" json:"entity,omitempty"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *FeedMessage) Reset() { *m = FeedMessage{} } | |
| func (m *FeedMessage) String() string { return proto.CompactTextString(m) } | |
| func (*FeedMessage) ProtoMessage() {} | |
| func (m *FeedMessage) GetHeader() *FeedHeader { | |
| if m != nil { | |
| return m.Header | |
| } | |
| return nil | |
| } | |
| func (m *FeedMessage) GetEntity() []*FeedEntity { | |
| if m != nil { | |
| return m.Entity | |
| } | |
| return nil | |
| } | |
| // Metadata about a feed, included in feed messages. | |
| type FeedHeader struct { | |
| // Version of the feed specification. | |
| // The current version is 1.0. | |
| GtfsRealtimeVersion *string `protobuf:"bytes,1,req,name=gtfs_realtime_version" json:"gtfs_realtime_version,omitempty"` | |
| Incrementality *FeedHeader_Incrementality `protobuf:"varint,2,opt,name=incrementality,enum=main.FeedHeader_Incrementality,def=0" json:"incrementality,omitempty"` | |
| // This timestamp identifies the moment when the content of this feed has been | |
| // created (in server time). In POSIX time (i.e., number of seconds since | |
| // January 1st 1970 00:00:00 UTC). | |
| Timestamp *uint64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *FeedHeader) Reset() { *m = FeedHeader{} } | |
| func (m *FeedHeader) String() string { return proto.CompactTextString(m) } | |
| func (*FeedHeader) ProtoMessage() {} | |
| var extRange_FeedHeader = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*FeedHeader) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_FeedHeader | |
| } | |
| func (m *FeedHeader) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| const Default_FeedHeader_Incrementality FeedHeader_Incrementality = FeedHeader_FULL_DATASET | |
| func (m *FeedHeader) GetGtfsRealtimeVersion() string { | |
| if m != nil && m.GtfsRealtimeVersion != nil { | |
| return *m.GtfsRealtimeVersion | |
| } | |
| return "" | |
| } | |
| func (m *FeedHeader) GetIncrementality() FeedHeader_Incrementality { | |
| if m != nil && m.Incrementality != nil { | |
| return *m.Incrementality | |
| } | |
| return Default_FeedHeader_Incrementality | |
| } | |
| func (m *FeedHeader) GetTimestamp() uint64 { | |
| if m != nil && m.Timestamp != nil { | |
| return *m.Timestamp | |
| } | |
| return 0 | |
| } | |
| // A definition (or update) of an entity in the transit feed. | |
| type FeedEntity struct { | |
| // The ids are used only to provide incrementality support. The id should be | |
| // unique within a FeedMessage. Consequent FeedMessages may contain | |
| // FeedEntities with the same id. In case of a DIFFERENTIAL update the new | |
| // FeedEntity with some id will replace the old FeedEntity with the same id | |
| // (or delete it - see is_deleted below). | |
| // The actual GTFS entities (e.g. stations, routes, trips) referenced by the | |
| // feed must be specified by explicit selectors (see EntitySelector below for | |
| // more info). | |
| Id *string `protobuf:"bytes,1,req,name=id" json:"id,omitempty"` | |
| // Whether this entity is to be deleted. Relevant only for incremental | |
| // fetches. | |
| IsDeleted *bool `protobuf:"varint,2,opt,name=is_deleted,def=0" json:"is_deleted,omitempty"` | |
| // Data about the entity itself. Exactly one of the following fields must be | |
| // present (unless the entity is being deleted). | |
| TripUpdate *TripUpdate `protobuf:"bytes,3,opt,name=trip_update" json:"trip_update,omitempty"` | |
| Vehicle *VehiclePosition `protobuf:"bytes,4,opt,name=vehicle" json:"vehicle,omitempty"` | |
| Alert *Alert `protobuf:"bytes,5,opt,name=alert" json:"alert,omitempty"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *FeedEntity) Reset() { *m = FeedEntity{} } | |
| func (m *FeedEntity) String() string { return proto.CompactTextString(m) } | |
| func (*FeedEntity) ProtoMessage() {} | |
| const Default_FeedEntity_IsDeleted bool = false | |
| func (m *FeedEntity) GetId() string { | |
| if m != nil && m.Id != nil { | |
| return *m.Id | |
| } | |
| return "" | |
| } | |
| func (m *FeedEntity) GetIsDeleted() bool { | |
| if m != nil && m.IsDeleted != nil { | |
| return *m.IsDeleted | |
| } | |
| return Default_FeedEntity_IsDeleted | |
| } | |
| func (m *FeedEntity) GetTripUpdate() *TripUpdate { | |
| if m != nil { | |
| return m.TripUpdate | |
| } | |
| return nil | |
| } | |
| func (m *FeedEntity) GetVehicle() *VehiclePosition { | |
| if m != nil { | |
| return m.Vehicle | |
| } | |
| return nil | |
| } | |
| func (m *FeedEntity) GetAlert() *Alert { | |
| if m != nil { | |
| return m.Alert | |
| } | |
| return nil | |
| } | |
| // Realtime update of the progress of a vehicle along a trip. | |
| // Depending on the value of ScheduleRelationship, a TripUpdate can specify: | |
| // - A trip that proceeds along the schedule. | |
| // - A trip that proceeds along a route but has no fixed schedule. | |
| // - A trip that have been added or removed with regard to schedule. | |
| // | |
| // The updates can be for future, predicted arrival/departure events, or for | |
| // past events that already occurred. | |
| // Normally, updates should get more precise and more certain (see | |
| // uncertainty below) as the events gets closer to current time. | |
| // Even if that is not possible, the information for past events should be | |
| // precise and certain. In particular, if an update points to time in the past | |
| // but its update's uncertainty is not 0, the client should conclude that the | |
| // update is a (wrong) prediction and that the trip has not completed yet. | |
| // | |
| // Note that the update can describe a trip that is already completed. | |
| // To this end, it is enough to provide an update for the last stop of the trip. | |
| // If the time of that is in the past, the client will conclude from that that | |
| // the whole trip is in the past (it is possible, although inconsequential, to | |
| // also provide updates for preceding stops). | |
| // This option is most relevant for a trip that has completed ahead of schedule, | |
| // but according to the schedule, the trip is still proceeding at the current | |
| // time. Removing the updates for this trip could make the client assume | |
| // that the trip is still proceeding. | |
| // Note that the feed provider is allowed, but not required, to purge past | |
| // updates - this is one case where this would be practically useful. | |
| type TripUpdate struct { | |
| // The Trip that this message applies to. There can be at most one | |
| // TripUpdate entity for each actual trip instance. | |
| // If there is none, that means there is no prediction information available. | |
| // It does *not* mean that the trip is progressing according to schedule. | |
| Trip *TripDescriptor `protobuf:"bytes,1,req,name=trip" json:"trip,omitempty"` | |
| // Additional information on the vehicle that is serving this trip. | |
| Vehicle *VehicleDescriptor `protobuf:"bytes,3,opt,name=vehicle" json:"vehicle,omitempty"` | |
| // Updates to StopTimes for the trip (both future, i.e., predictions, and in | |
| // some cases, past ones, i.e., those that already happened). | |
| // The updates must be sorted by stop_sequence, and apply for all the | |
| // following stops of the trip up to the next specified one. | |
| // | |
| // Example 1: | |
| // For a trip with 20 stops, a StopTimeUpdate with arrival delay and departure | |
| // delay of 0 for stop_sequence of the current stop means that the trip is | |
| // exactly on time. | |
| // | |
| // Example 2: | |
| // For the same trip instance, 3 StopTimeUpdates are provided: | |
| // - delay of 5 min for stop_sequence 3 | |
| // - delay of 1 min for stop_sequence 8 | |
| // - delay of unspecified duration for stop_sequence 10 | |
| // This will be interpreted as: | |
| // - stop_sequences 3,4,5,6,7 have delay of 5 min. | |
| // - stop_sequences 8,9 have delay of 1 min. | |
| // - stop_sequences 10,... have unknown delay. | |
| StopTimeUpdate []*TripUpdate_StopTimeUpdate `protobuf:"bytes,2,rep,name=stop_time_update" json:"stop_time_update,omitempty"` | |
| // Moment at which the vehicle's real-time progress was measured. In POSIX | |
| // time (i.e., the number of seconds since January 1st 1970 00:00:00 UTC). | |
| Timestamp *uint64 `protobuf:"varint,4,opt,name=timestamp" json:"timestamp,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TripUpdate) Reset() { *m = TripUpdate{} } | |
| func (m *TripUpdate) String() string { return proto.CompactTextString(m) } | |
| func (*TripUpdate) ProtoMessage() {} | |
| var extRange_TripUpdate = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*TripUpdate) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_TripUpdate | |
| } | |
| func (m *TripUpdate) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| func (m *TripUpdate) GetTrip() *TripDescriptor { | |
| if m != nil { | |
| return m.Trip | |
| } | |
| return nil | |
| } | |
| func (m *TripUpdate) GetVehicle() *VehicleDescriptor { | |
| if m != nil { | |
| return m.Vehicle | |
| } | |
| return nil | |
| } | |
| func (m *TripUpdate) GetStopTimeUpdate() []*TripUpdate_StopTimeUpdate { | |
| if m != nil { | |
| return m.StopTimeUpdate | |
| } | |
| return nil | |
| } | |
| func (m *TripUpdate) GetTimestamp() uint64 { | |
| if m != nil && m.Timestamp != nil { | |
| return *m.Timestamp | |
| } | |
| return 0 | |
| } | |
| // Timing information for a single predicted event (either arrival or | |
| // departure). | |
| // Timing consists of delay and/or estimated time, and uncertainty. | |
| // - delay should be used when the prediction is given relative to some | |
| // existing schedule in GTFS. | |
| // - time should be given whether there is a predicted schedule or not. If | |
| // both time and delay are specified, time will take precedence | |
| // (although normally, time, if given for a scheduled trip, should be | |
| // equal to scheduled time in GTFS + delay). | |
| // | |
| // Uncertainty applies equally to both time and delay. | |
| // The uncertainty roughly specifies the expected error in true delay (but | |
| // note, we don't yet define its precise statistical meaning). It's possible | |
| // for the uncertainty to be 0, for example for trains that are driven under | |
| // computer timing control. | |
| type TripUpdate_StopTimeEvent struct { | |
| // Delay (in seconds) can be positive (meaning that the vehicle is late) or | |
| // negative (meaning that the vehicle is ahead of schedule). Delay of 0 | |
| // means that the vehicle is exactly on time. | |
| Delay *int32 `protobuf:"varint,1,opt,name=delay" json:"delay,omitempty"` | |
| // Event as absolute time. | |
| // In Unix time (i.e., number of seconds since January 1st 1970 00:00:00 | |
| // UTC). | |
| Time *int64 `protobuf:"varint,2,opt,name=time" json:"time,omitempty"` | |
| // If uncertainty is omitted, it is interpreted as unknown. | |
| // If the prediction is unknown or too uncertain, the delay (or time) field | |
| // should be empty. In such case, the uncertainty field is ignored. | |
| // To specify a completely certain prediction, set its uncertainty to 0. | |
| Uncertainty *int32 `protobuf:"varint,3,opt,name=uncertainty" json:"uncertainty,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TripUpdate_StopTimeEvent) Reset() { *m = TripUpdate_StopTimeEvent{} } | |
| func (m *TripUpdate_StopTimeEvent) String() string { return proto.CompactTextString(m) } | |
| func (*TripUpdate_StopTimeEvent) ProtoMessage() {} | |
| var extRange_TripUpdate_StopTimeEvent = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*TripUpdate_StopTimeEvent) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_TripUpdate_StopTimeEvent | |
| } | |
| func (m *TripUpdate_StopTimeEvent) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| func (m *TripUpdate_StopTimeEvent) GetDelay() int32 { | |
| if m != nil && m.Delay != nil { | |
| return *m.Delay | |
| } | |
| return 0 | |
| } | |
| func (m *TripUpdate_StopTimeEvent) GetTime() int64 { | |
| if m != nil && m.Time != nil { | |
| return *m.Time | |
| } | |
| return 0 | |
| } | |
| func (m *TripUpdate_StopTimeEvent) GetUncertainty() int32 { | |
| if m != nil && m.Uncertainty != nil { | |
| return *m.Uncertainty | |
| } | |
| return 0 | |
| } | |
| // Realtime update for arrival and/or departure events for a given stop on a | |
| // trip. Updates can be supplied for both past and future events. | |
| // The producer is allowed, although not required, to drop past events. | |
| type TripUpdate_StopTimeUpdate struct { | |
| // Must be the same as in stop_times.txt in the corresponding GTFS feed. | |
| StopSequence *uint32 `protobuf:"varint,1,opt,name=stop_sequence" json:"stop_sequence,omitempty"` | |
| // Must be the same as in stops.txt in the corresponding GTFS feed. | |
| StopId *string `protobuf:"bytes,4,opt,name=stop_id" json:"stop_id,omitempty"` | |
| Arrival *TripUpdate_StopTimeEvent `protobuf:"bytes,2,opt,name=arrival" json:"arrival,omitempty"` | |
| Departure *TripUpdate_StopTimeEvent `protobuf:"bytes,3,opt,name=departure" json:"departure,omitempty"` | |
| ScheduleRelationship *TripUpdate_StopTimeUpdate_ScheduleRelationship `protobuf:"varint,5,opt,name=schedule_relationship,enum=main.TripUpdate_StopTimeUpdate_ScheduleRelationship,def=0" json:"schedule_relationship,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TripUpdate_StopTimeUpdate) Reset() { *m = TripUpdate_StopTimeUpdate{} } | |
| func (m *TripUpdate_StopTimeUpdate) String() string { return proto.CompactTextString(m) } | |
| func (*TripUpdate_StopTimeUpdate) ProtoMessage() {} | |
| var extRange_TripUpdate_StopTimeUpdate = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*TripUpdate_StopTimeUpdate) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_TripUpdate_StopTimeUpdate | |
| } | |
| func (m *TripUpdate_StopTimeUpdate) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| const Default_TripUpdate_StopTimeUpdate_ScheduleRelationship TripUpdate_StopTimeUpdate_ScheduleRelationship = TripUpdate_StopTimeUpdate_SCHEDULED | |
| func (m *TripUpdate_StopTimeUpdate) GetStopSequence() uint32 { | |
| if m != nil && m.StopSequence != nil { | |
| return *m.StopSequence | |
| } | |
| return 0 | |
| } | |
| func (m *TripUpdate_StopTimeUpdate) GetStopId() string { | |
| if m != nil && m.StopId != nil { | |
| return *m.StopId | |
| } | |
| return "" | |
| } | |
| func (m *TripUpdate_StopTimeUpdate) GetArrival() *TripUpdate_StopTimeEvent { | |
| if m != nil { | |
| return m.Arrival | |
| } | |
| return nil | |
| } | |
| func (m *TripUpdate_StopTimeUpdate) GetDeparture() *TripUpdate_StopTimeEvent { | |
| if m != nil { | |
| return m.Departure | |
| } | |
| return nil | |
| } | |
| func (m *TripUpdate_StopTimeUpdate) GetScheduleRelationship() TripUpdate_StopTimeUpdate_ScheduleRelationship { | |
| if m != nil && m.ScheduleRelationship != nil { | |
| return *m.ScheduleRelationship | |
| } | |
| return Default_TripUpdate_StopTimeUpdate_ScheduleRelationship | |
| } | |
| // Realtime positioning information for a given vehicle. | |
| type VehiclePosition struct { | |
| // The Trip that this vehicle is serving. | |
| // Can be empty or partial if the vehicle can not be identified with a given | |
| // trip instance. | |
| Trip *TripDescriptor `protobuf:"bytes,1,opt,name=trip" json:"trip,omitempty"` | |
| // Additional information on the vehicle that is serving this trip. | |
| Vehicle *VehicleDescriptor `protobuf:"bytes,8,opt,name=vehicle" json:"vehicle,omitempty"` | |
| // Current position of this vehicle. | |
| Position *Position `protobuf:"bytes,2,opt,name=position" json:"position,omitempty"` | |
| // The stop sequence index of the current stop. The meaning of | |
| // current_stop_sequence (i.e., the stop that it refers to) is determined by | |
| // current_status. | |
| // If current_status is missing IN_TRANSIT_TO is assumed. | |
| CurrentStopSequence *uint32 `protobuf:"varint,3,opt,name=current_stop_sequence" json:"current_stop_sequence,omitempty"` | |
| // Identifies the current stop. The value must be the same as in stops.txt in | |
| // the corresponding GTFS feed. | |
| StopId *string `protobuf:"bytes,7,opt,name=stop_id" json:"stop_id,omitempty"` | |
| // The exact status of the vehicle with respect to the current stop. | |
| // Ignored if current_stop_sequence is missing. | |
| CurrentStatus *VehiclePosition_VehicleStopStatus `protobuf:"varint,4,opt,name=current_status,enum=main.VehiclePosition_VehicleStopStatus,def=2" json:"current_status,omitempty"` | |
| // Moment at which the vehicle's position was measured. In POSIX time | |
| // (i.e., number of seconds since January 1st 1970 00:00:00 UTC). | |
| Timestamp *uint64 `protobuf:"varint,5,opt,name=timestamp" json:"timestamp,omitempty"` | |
| CongestionLevel *VehiclePosition_CongestionLevel `protobuf:"varint,6,opt,name=congestion_level,enum=main.VehiclePosition_CongestionLevel" json:"congestion_level,omitempty"` | |
| OccupancyStatus *VehiclePosition_OccupancyStatus `protobuf:"varint,9,opt,name=occupancy_status,enum=main.VehiclePosition_OccupancyStatus" json:"occupancy_status,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *VehiclePosition) Reset() { *m = VehiclePosition{} } | |
| func (m *VehiclePosition) String() string { return proto.CompactTextString(m) } | |
| func (*VehiclePosition) ProtoMessage() {} | |
| var extRange_VehiclePosition = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*VehiclePosition) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_VehiclePosition | |
| } | |
| func (m *VehiclePosition) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| const Default_VehiclePosition_CurrentStatus VehiclePosition_VehicleStopStatus = VehiclePosition_IN_TRANSIT_TO | |
| func (m *VehiclePosition) GetTrip() *TripDescriptor { | |
| if m != nil { | |
| return m.Trip | |
| } | |
| return nil | |
| } | |
| func (m *VehiclePosition) GetVehicle() *VehicleDescriptor { | |
| if m != nil { | |
| return m.Vehicle | |
| } | |
| return nil | |
| } | |
| func (m *VehiclePosition) GetPosition() *Position { | |
| if m != nil { | |
| return m.Position | |
| } | |
| return nil | |
| } | |
| func (m *VehiclePosition) GetCurrentStopSequence() uint32 { | |
| if m != nil && m.CurrentStopSequence != nil { | |
| return *m.CurrentStopSequence | |
| } | |
| return 0 | |
| } | |
| func (m *VehiclePosition) GetStopId() string { | |
| if m != nil && m.StopId != nil { | |
| return *m.StopId | |
| } | |
| return "" | |
| } | |
| func (m *VehiclePosition) GetCurrentStatus() VehiclePosition_VehicleStopStatus { | |
| if m != nil && m.CurrentStatus != nil { | |
| return *m.CurrentStatus | |
| } | |
| return Default_VehiclePosition_CurrentStatus | |
| } | |
| func (m *VehiclePosition) GetTimestamp() uint64 { | |
| if m != nil && m.Timestamp != nil { | |
| return *m.Timestamp | |
| } | |
| return 0 | |
| } | |
| func (m *VehiclePosition) GetCongestionLevel() VehiclePosition_CongestionLevel { | |
| if m != nil && m.CongestionLevel != nil { | |
| return *m.CongestionLevel | |
| } | |
| return VehiclePosition_UNKNOWN_CONGESTION_LEVEL | |
| } | |
| func (m *VehiclePosition) GetOccupancyStatus() VehiclePosition_OccupancyStatus { | |
| if m != nil && m.OccupancyStatus != nil { | |
| return *m.OccupancyStatus | |
| } | |
| return VehiclePosition_EMPTY | |
| } | |
| // An alert, indicating some sort of incident in the public transit network. | |
| type Alert struct { | |
| // Time when the alert should be shown to the user. If missing, the | |
| // alert will be shown as long as it appears in the feed. | |
| // If multiple ranges are given, the alert will be shown during all of them. | |
| ActivePeriod []*TimeRange `protobuf:"bytes,1,rep,name=active_period" json:"active_period,omitempty"` | |
| // Entities whose users we should notify of this alert. | |
| InformedEntity []*EntitySelector `protobuf:"bytes,5,rep,name=informed_entity" json:"informed_entity,omitempty"` | |
| Cause *Alert_Cause `protobuf:"varint,6,opt,name=cause,enum=main.Alert_Cause,def=1" json:"cause,omitempty"` | |
| Effect *Alert_Effect `protobuf:"varint,7,opt,name=effect,enum=main.Alert_Effect,def=8" json:"effect,omitempty"` | |
| // The URL which provides additional information about the alert. | |
| Url *TranslatedString `protobuf:"bytes,8,opt,name=url" json:"url,omitempty"` | |
| // Alert header. Contains a short summary of the alert text as plain-text. | |
| HeaderText *TranslatedString `protobuf:"bytes,10,opt,name=header_text" json:"header_text,omitempty"` | |
| // Full description for the alert as plain-text. The information in the | |
| // description should add to the information of the header. | |
| DescriptionText *TranslatedString `protobuf:"bytes,11,opt,name=description_text" json:"description_text,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *Alert) Reset() { *m = Alert{} } | |
| func (m *Alert) String() string { return proto.CompactTextString(m) } | |
| func (*Alert) ProtoMessage() {} | |
| var extRange_Alert = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*Alert) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_Alert | |
| } | |
| func (m *Alert) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| const Default_Alert_Cause Alert_Cause = Alert_UNKNOWN_CAUSE | |
| const Default_Alert_Effect Alert_Effect = Alert_UNKNOWN_EFFECT | |
| func (m *Alert) GetActivePeriod() []*TimeRange { | |
| if m != nil { | |
| return m.ActivePeriod | |
| } | |
| return nil | |
| } | |
| func (m *Alert) GetInformedEntity() []*EntitySelector { | |
| if m != nil { | |
| return m.InformedEntity | |
| } | |
| return nil | |
| } | |
| func (m *Alert) GetCause() Alert_Cause { | |
| if m != nil && m.Cause != nil { | |
| return *m.Cause | |
| } | |
| return Default_Alert_Cause | |
| } | |
| func (m *Alert) GetEffect() Alert_Effect { | |
| if m != nil && m.Effect != nil { | |
| return *m.Effect | |
| } | |
| return Default_Alert_Effect | |
| } | |
| func (m *Alert) GetUrl() *TranslatedString { | |
| if m != nil { | |
| return m.Url | |
| } | |
| return nil | |
| } | |
| func (m *Alert) GetHeaderText() *TranslatedString { | |
| if m != nil { | |
| return m.HeaderText | |
| } | |
| return nil | |
| } | |
| func (m *Alert) GetDescriptionText() *TranslatedString { | |
| if m != nil { | |
| return m.DescriptionText | |
| } | |
| return nil | |
| } | |
| // A time interval. The interval is considered active at time 't' if 't' is | |
| // greater than or equal to the start time and less than the end time. | |
| type TimeRange struct { | |
| // Start time, in POSIX time (i.e., number of seconds since January 1st 1970 | |
| // 00:00:00 UTC). | |
| // If missing, the interval starts at minus infinity. | |
| Start *uint64 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` | |
| // End time, in POSIX time (i.e., number of seconds since January 1st 1970 | |
| // 00:00:00 UTC). | |
| // If missing, the interval ends at plus infinity. | |
| End *uint64 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TimeRange) Reset() { *m = TimeRange{} } | |
| func (m *TimeRange) String() string { return proto.CompactTextString(m) } | |
| func (*TimeRange) ProtoMessage() {} | |
| func (m *TimeRange) GetStart() uint64 { | |
| if m != nil && m.Start != nil { | |
| return *m.Start | |
| } | |
| return 0 | |
| } | |
| func (m *TimeRange) GetEnd() uint64 { | |
| if m != nil && m.End != nil { | |
| return *m.End | |
| } | |
| return 0 | |
| } | |
| // A position. | |
| type Position struct { | |
| // Degrees North, in the WGS-84 coordinate system. | |
| Latitude *float32 `protobuf:"fixed32,1,req,name=latitude" json:"latitude,omitempty"` | |
| // Degrees East, in the WGS-84 coordinate system. | |
| Longitude *float32 `protobuf:"fixed32,2,req,name=longitude" json:"longitude,omitempty"` | |
| // Bearing, in degrees, clockwise from North, i.e., 0 is North and 90 is East. | |
| // This can be the compass bearing, or the direction towards the next stop | |
| // or intermediate location. | |
| // This should not be direction deduced from the sequence of previous | |
| // positions, which can be computed from previous data. | |
| Bearing *float32 `protobuf:"fixed32,3,opt,name=bearing" json:"bearing,omitempty"` | |
| // Odometer value, in meters. | |
| Odometer *float64 `protobuf:"fixed64,4,opt,name=odometer" json:"odometer,omitempty"` | |
| // Momentary speed measured by the vehicle, in meters per second. | |
| Speed *float32 `protobuf:"fixed32,5,opt,name=speed" json:"speed,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *Position) Reset() { *m = Position{} } | |
| func (m *Position) String() string { return proto.CompactTextString(m) } | |
| func (*Position) ProtoMessage() {} | |
| var extRange_Position = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*Position) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_Position | |
| } | |
| func (m *Position) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| func (m *Position) GetLatitude() float32 { | |
| if m != nil && m.Latitude != nil { | |
| return *m.Latitude | |
| } | |
| return 0 | |
| } | |
| func (m *Position) GetLongitude() float32 { | |
| if m != nil && m.Longitude != nil { | |
| return *m.Longitude | |
| } | |
| return 0 | |
| } | |
| func (m *Position) GetBearing() float32 { | |
| if m != nil && m.Bearing != nil { | |
| return *m.Bearing | |
| } | |
| return 0 | |
| } | |
| func (m *Position) GetOdometer() float64 { | |
| if m != nil && m.Odometer != nil { | |
| return *m.Odometer | |
| } | |
| return 0 | |
| } | |
| func (m *Position) GetSpeed() float32 { | |
| if m != nil && m.Speed != nil { | |
| return *m.Speed | |
| } | |
| return 0 | |
| } | |
| // A descriptor that identifies an instance of a GTFS trip, or all instances of | |
| // a trip along a route. | |
| // - To specify a single trip instance, the trip_id (and if necessary, | |
| // start_time) is set. If route_id is also set, then it should be same as one | |
| // that the given trip corresponds to. | |
| // - To specify all the trips along a given route, only the route_id should be | |
| // set. Note that if the trip_id is not known, then stop sequence ids in | |
| // TripUpdate are not sufficient, and stop_ids must be provided as well. In | |
| // addition, absolute arrival/departure times must be provided. | |
| type TripDescriptor struct { | |
| // The trip_id from the GTFS feed that this selector refers to. | |
| // For non frequency expanded trips, this field is enough to uniquely identify | |
| // the trip. For frequency expanded, start_time and start_date might also be | |
| // necessary. | |
| TripId *string `protobuf:"bytes,1,opt,name=trip_id" json:"trip_id,omitempty"` | |
| // The route_id from the GTFS that this selector refers to. | |
| RouteId *string `protobuf:"bytes,5,opt,name=route_id" json:"route_id,omitempty"` | |
| // The scheduled start time of this trip instance. | |
| // This field should be given only if the trip is frequency-expanded in the | |
| // GTFS feed. The value must precisely correspond to start_time specified for | |
| // the route in the GTFS feed plus some multiple of headway_secs. | |
| // Format of the field is same as that of GTFS/frequencies.txt/start_time, | |
| // e.g., 11:15:35 or 25:15:35. | |
| StartTime *string `protobuf:"bytes,2,opt,name=start_time" json:"start_time,omitempty"` | |
| // The scheduled start date of this trip instance. | |
| // Must be provided to disambiguate trips that are so late as to collide with | |
| // a scheduled trip on a next day. For example, for a train that departs 8:00 | |
| // and 20:00 every day, and is 12 hours late, there would be two distinct | |
| // trips on the same time. | |
| // This field can be provided but is not mandatory for schedules in which such | |
| // collisions are impossible - for example, a service running on hourly | |
| // schedule where a vehicle that is one hour late is not considered to be | |
| // related to schedule anymore. | |
| // In YYYYMMDD format. | |
| StartDate *string `protobuf:"bytes,3,opt,name=start_date" json:"start_date,omitempty"` | |
| ScheduleRelationship *TripDescriptor_ScheduleRelationship `protobuf:"varint,4,opt,name=schedule_relationship,enum=main.TripDescriptor_ScheduleRelationship" json:"schedule_relationship,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TripDescriptor) Reset() { *m = TripDescriptor{} } | |
| func (m *TripDescriptor) String() string { return proto.CompactTextString(m) } | |
| func (*TripDescriptor) ProtoMessage() {} | |
| var extRange_TripDescriptor = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*TripDescriptor) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_TripDescriptor | |
| } | |
| func (m *TripDescriptor) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| func (m *TripDescriptor) GetTripId() string { | |
| if m != nil && m.TripId != nil { | |
| return *m.TripId | |
| } | |
| return "" | |
| } | |
| func (m *TripDescriptor) GetRouteId() string { | |
| if m != nil && m.RouteId != nil { | |
| return *m.RouteId | |
| } | |
| return "" | |
| } | |
| func (m *TripDescriptor) GetStartTime() string { | |
| if m != nil && m.StartTime != nil { | |
| return *m.StartTime | |
| } | |
| return "" | |
| } | |
| func (m *TripDescriptor) GetStartDate() string { | |
| if m != nil && m.StartDate != nil { | |
| return *m.StartDate | |
| } | |
| return "" | |
| } | |
| func (m *TripDescriptor) GetScheduleRelationship() TripDescriptor_ScheduleRelationship { | |
| if m != nil && m.ScheduleRelationship != nil { | |
| return *m.ScheduleRelationship | |
| } | |
| return TripDescriptor_SCHEDULED | |
| } | |
| // Identification information for the vehicle performing the trip. | |
| type VehicleDescriptor struct { | |
| // Internal system identification of the vehicle. Should be unique per | |
| // vehicle, and can be used for tracking the vehicle as it proceeds through | |
| // the system. | |
| Id *string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` | |
| // User visible label, i.e., something that must be shown to the passenger to | |
| // help identify the correct vehicle. | |
| Label *string `protobuf:"bytes,2,opt,name=label" json:"label,omitempty"` | |
| // The license plate of the vehicle. | |
| LicensePlate *string `protobuf:"bytes,3,opt,name=license_plate" json:"license_plate,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *VehicleDescriptor) Reset() { *m = VehicleDescriptor{} } | |
| func (m *VehicleDescriptor) String() string { return proto.CompactTextString(m) } | |
| func (*VehicleDescriptor) ProtoMessage() {} | |
| var extRange_VehicleDescriptor = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*VehicleDescriptor) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_VehicleDescriptor | |
| } | |
| func (m *VehicleDescriptor) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| func (m *VehicleDescriptor) GetId() string { | |
| if m != nil && m.Id != nil { | |
| return *m.Id | |
| } | |
| return "" | |
| } | |
| func (m *VehicleDescriptor) GetLabel() string { | |
| if m != nil && m.Label != nil { | |
| return *m.Label | |
| } | |
| return "" | |
| } | |
| func (m *VehicleDescriptor) GetLicensePlate() string { | |
| if m != nil && m.LicensePlate != nil { | |
| return *m.LicensePlate | |
| } | |
| return "" | |
| } | |
| // A selector for an entity in a GTFS feed. | |
| type EntitySelector struct { | |
| // The values of the fields should correspond to the appropriate fields in the | |
| // GTFS feed. | |
| // At least one specifier must be given. If several are given, then the | |
| // matching has to apply to all the given specifiers. | |
| AgencyId *string `protobuf:"bytes,1,opt,name=agency_id" json:"agency_id,omitempty"` | |
| RouteId *string `protobuf:"bytes,2,opt,name=route_id" json:"route_id,omitempty"` | |
| // corresponds to route_type in GTFS. | |
| RouteType *int32 `protobuf:"varint,3,opt,name=route_type" json:"route_type,omitempty"` | |
| Trip *TripDescriptor `protobuf:"bytes,4,opt,name=trip" json:"trip,omitempty"` | |
| StopId *string `protobuf:"bytes,5,opt,name=stop_id" json:"stop_id,omitempty"` | |
| XXX_extensions map[int32]proto.Extension `json:"-"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *EntitySelector) Reset() { *m = EntitySelector{} } | |
| func (m *EntitySelector) String() string { return proto.CompactTextString(m) } | |
| func (*EntitySelector) ProtoMessage() {} | |
| var extRange_EntitySelector = []proto.ExtensionRange{ | |
| {1000, 1999}, | |
| } | |
| func (*EntitySelector) ExtensionRangeArray() []proto.ExtensionRange { | |
| return extRange_EntitySelector | |
| } | |
| func (m *EntitySelector) ExtensionMap() map[int32]proto.Extension { | |
| if m.XXX_extensions == nil { | |
| m.XXX_extensions = make(map[int32]proto.Extension) | |
| } | |
| return m.XXX_extensions | |
| } | |
| func (m *EntitySelector) GetAgencyId() string { | |
| if m != nil && m.AgencyId != nil { | |
| return *m.AgencyId | |
| } | |
| return "" | |
| } | |
| func (m *EntitySelector) GetRouteId() string { | |
| if m != nil && m.RouteId != nil { | |
| return *m.RouteId | |
| } | |
| return "" | |
| } | |
| func (m *EntitySelector) GetRouteType() int32 { | |
| if m != nil && m.RouteType != nil { | |
| return *m.RouteType | |
| } | |
| return 0 | |
| } | |
| func (m *EntitySelector) GetTrip() *TripDescriptor { | |
| if m != nil { | |
| return m.Trip | |
| } | |
| return nil | |
| } | |
| func (m *EntitySelector) GetStopId() string { | |
| if m != nil && m.StopId != nil { | |
| return *m.StopId | |
| } | |
| return "" | |
| } | |
| // An internationalized message containing per-language versions of a snippet of | |
| // text or a URL. | |
| // One of the strings from a message will be picked up. The resolution proceeds | |
| // as follows: | |
| // 1. If the UI language matches the language code of a translation, | |
| // the first matching translation is picked. | |
| // 2. If a default UI language (e.g., English) matches the language code of a | |
| // translation, the first matching translation is picked. | |
| // 3. If some translation has an unspecified language code, that translation is | |
| // picked. | |
| type TranslatedString struct { | |
| // At least one translation must be provided. | |
| Translation []*TranslatedString_Translation `protobuf:"bytes,1,rep,name=translation" json:"translation,omitempty"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TranslatedString) Reset() { *m = TranslatedString{} } | |
| func (m *TranslatedString) String() string { return proto.CompactTextString(m) } | |
| func (*TranslatedString) ProtoMessage() {} | |
| func (m *TranslatedString) GetTranslation() []*TranslatedString_Translation { | |
| if m != nil { | |
| return m.Translation | |
| } | |
| return nil | |
| } | |
| type TranslatedString_Translation struct { | |
| // A UTF-8 string containing the message. | |
| Text *string `protobuf:"bytes,1,req,name=text" json:"text,omitempty"` | |
| // BCP-47 language code. Can be omitted if the language is unknown or if | |
| // no i18n is done at all for the feed. At most one translation is | |
| // allowed to have an unspecified language tag. | |
| Language *string `protobuf:"bytes,2,opt,name=language" json:"language,omitempty"` | |
| XXX_unrecognized []byte `json:"-"` | |
| } | |
| func (m *TranslatedString_Translation) Reset() { *m = TranslatedString_Translation{} } | |
| func (m *TranslatedString_Translation) String() string { return proto.CompactTextString(m) } | |
| func (*TranslatedString_Translation) ProtoMessage() {} | |
| func (m *TranslatedString_Translation) GetText() string { | |
| if m != nil && m.Text != nil { | |
| return *m.Text | |
| } | |
| return "" | |
| } | |
| func (m *TranslatedString_Translation) GetLanguage() string { | |
| if m != nil && m.Language != nil { | |
| return *m.Language | |
| } | |
| return "" | |
| } | |
| func init() { | |
| proto.RegisterEnum("main.FeedHeader_Incrementality", FeedHeader_Incrementality_name, FeedHeader_Incrementality_value) | |
| proto.RegisterEnum("main.TripUpdate_StopTimeUpdate_ScheduleRelationship", TripUpdate_StopTimeUpdate_ScheduleRelationship_name, TripUpdate_StopTimeUpdate_ScheduleRelationship_value) | |
| proto.RegisterEnum("main.VehiclePosition_VehicleStopStatus", VehiclePosition_VehicleStopStatus_name, VehiclePosition_VehicleStopStatus_value) | |
| proto.RegisterEnum("main.VehiclePosition_CongestionLevel", VehiclePosition_CongestionLevel_name, VehiclePosition_CongestionLevel_value) | |
| proto.RegisterEnum("main.VehiclePosition_OccupancyStatus", VehiclePosition_OccupancyStatus_name, VehiclePosition_OccupancyStatus_value) | |
| proto.RegisterEnum("main.Alert_Cause", Alert_Cause_name, Alert_Cause_value) | |
| proto.RegisterEnum("main.Alert_Effect", Alert_Effect_name, Alert_Effect_value) | |
| proto.RegisterEnum("main.TripDescriptor_ScheduleRelationship", TripDescriptor_ScheduleRelationship_name, TripDescriptor_ScheduleRelationship_value) | |
| } |