diff --git a/models/golang/tests/gbfsv31-rc2_test.go b/models/golang/tests/gbfsv31-rc2_test.go new file mode 100644 index 0000000..3401b0f --- /dev/null +++ b/models/golang/tests/gbfsv31-rc2_test.go @@ -0,0 +1,195 @@ +package tests + +import ( + "encoding/json" + "fmt" + "os" + "testing" + + gbfs "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/gbfs" + gbfsversions "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/gbfs_versions" + geofencingzones "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/geofencing_zones" + manifest "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/manifest" + stationinformation "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/station_information" + stationstatus "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/station_status" + systemalerts "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/system_alerts" + systeminformation "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/system_information" + systempricingplans "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/system_pricing_plans" + systemregions "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/system_regions" + vehicleavailability "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/vehicle_availability" + vehiclestatus "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/vehicle_status" + vehicletypes "github.com/MobilityData/gbfs-json-schema/models/golang/v3.1-RC2/vehicle_types" + + "github.com/xeipuuv/gojsonschema" +) + +const pathToTestFixturesV31RC2 = "./../../../testFixtures/v3.1-RC2/" + +func LoadSchemaAndFixtureV31RC2(t *testing.T, fileName string) (gojsonschema.JSONLoader, []byte) { + + pathToSchema := "./../../../v3.1-RC2/" + schemaDataBytes, schemaErr := os.ReadFile(pathToSchema + fileName) + if schemaErr != nil { + t.Error("Error opening JSON file:", schemaErr) + return nil, nil + } + var schemaData map[string]interface{} + schemaErr = json.Unmarshal(schemaDataBytes, &schemaData) + if schemaErr != nil { + t.Error("Error opening JSON file:", schemaErr) + return nil, nil + } + schemaLoader := gojsonschema.NewGoLoader(schemaData) + jsonData, err2 := os.ReadFile(pathToTestFixturesV31RC2 + fileName) + if err2 != nil { + t.Error("Error opening JSON file:", err2) + return nil, nil + } + return schemaLoader, jsonData +} + +func ValidateSchemaToUnmarshalV31RC2(t *testing.T, schemaLoader gojsonschema.JSONLoader, gbfsData interface{}) { + loader := gojsonschema.NewGoLoader(gbfsData) + result, err3 := gojsonschema.Validate(schemaLoader, loader) + if err3 != nil { + t.Error("Error validating JSON file:", err3) + return + } + + if !result.Valid() { + t.Error("The JSON is NOT valid:") + for _, desc := range result.Errors() { + fmt.Printf("- %s\n", desc) + } + } +} + +func TestGbfsV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "gbfs.json") + gbfsData, err := gbfs.UnmarshalGbfs(jsonData) + if err != nil { + t.Error("Error With Unmarshal:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestGbfsVersionsV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "gbfs_versions.json") + gbfsData, err := gbfsversions.UnmarshalGbfsVersions(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestGeofencingZonesV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "geofencing_zones.json") + gbfsData, err := geofencingzones.UnmarshalGeofencingZones(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestManifestV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "manifest.json") + gbfsData, err := manifest.UnmarshalManifest(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestStationInformationV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "station_information.json") + gbfsData, err := stationinformation.UnmarshalStationInformation(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestStationStatusV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "station_status.json") + gbfsData, err := stationstatus.UnmarshalStationStatus(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestSystemAlertsV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "system_alerts.json") + gbfsData, err := systemalerts.UnmarshalSystemAlerts(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestSystemInformationV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "system_information.json") + gbfsData, err := systeminformation.UnmarshalSystemInformation(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestSystemPricingPlanV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "system_pricing_plans.json") + gbfsData, err := systempricingplans.UnmarshalSystemPricingPlans(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestSystemRegionsV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "system_regions.json") + gbfsData, err := systemregions.UnmarshalSystemRegions(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestVehicleStatusV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "vehicle_status.json") + gbfsData, err := vehiclestatus.UnmarshalVehicleStatus(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestVehicleTypesV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "vehicle_types.json") + gbfsData, err := vehicletypes.UnmarshalVehicleTypes(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} + +func TestVehicleAvailabilityV31RC2(t *testing.T) { + schemaLoader, jsonData := LoadSchemaAndFixtureV31RC2(t, "vehicle_availability.json") + gbfsData, err := vehicleavailability.UnmarshalVehicleAvailability(jsonData) + if err != nil { + t.Error("Error UnmarshalGbfs:", err) + return + } + ValidateSchemaToUnmarshalV31RC2(t, schemaLoader, gbfsData) +} diff --git a/models/golang/v3.1-RC2/gbfs/gbfs.go b/models/golang/v3.1-RC2/gbfs/gbfs.go new file mode 100644 index 0000000..6bf6bce --- /dev/null +++ b/models/golang/v3.1-RC2/gbfs/gbfs.go @@ -0,0 +1,87 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// gbfs, err := UnmarshalGbfs(bytes) +// bytes, err = gbfs.Marshal() + +package gbfs + + + +import "encoding/json" + +func UnmarshalGbfs(data []byte) (Gbfs, error) { + var r Gbfs + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *Gbfs) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Auto-discovery file that links to all of the other files published by the system. +type Gbfs struct { + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +type Data struct { + // An array of all of the feeds that are published by the auto-discovery file. Each element + // in the array is an object with the keys below. + Feeds []Feed `json:"feeds"` +} + +type Feed struct { + // Key identifying the type of feed this is. The key must be the base file name defined in + // the spec for the corresponding feed type. + Name Name `json:"name"` + // URL for the feed. + URL string `json:"url"` +} + +// Key identifying the type of feed this is. The key must be the base file name defined in +// the spec for the corresponding feed type. +type Name string + +const ( + GbfsVersions Name = "gbfs_versions" + GeofencingZones Name = "geofencing_zones" + NameGbfs Name = "gbfs" + StationInformation Name = "station_information" + StationStatus Name = "station_status" + SystemAlerts Name = "system_alerts" + SystemInformation Name = "system_information" + SystemPricingPlans Name = "system_pricing_plans" + SystemRegions Name = "system_regions" + VehicleAvailability Name = "vehicle_availability" + VehicleStatus Name = "vehicle_status" + VehicleTypes Name = "vehicle_types" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/gbfs_versions/gbfs_versions.go b/models/golang/v3.1-RC2/gbfs_versions/gbfs_versions.go new file mode 100644 index 0000000..317b657 --- /dev/null +++ b/models/golang/v3.1-RC2/gbfs_versions/gbfs_versions.go @@ -0,0 +1,83 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// gbfsVersions, err := UnmarshalGbfsVersions(bytes) +// bytes, err = gbfsVersions.Marshal() + +package gbfs_versions + + + +import "encoding/json" + +func UnmarshalGbfsVersions(data []byte) (GbfsVersions, error) { + var r GbfsVersions + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *GbfsVersions) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Lists all feed endpoints published according to version sof the GBFS documentation. +// (added in v1.1) +type GbfsVersions struct { + // Response data in the form of name:value pairs. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework. + Version GbfsVersionsVersion `json:"version"` +} + +// Response data in the form of name:value pairs. +type Data struct { + // Contains one object, as defined below, for each of the available versions of a feed. The + // array must be sorted by increasing MAJOR and MINOR version number. + Versions []VersionElement `json:"versions"` +} + +type VersionElement struct { + // URL of the corresponding gbfs.json endpoint + URL string `json:"url"` + // The semantic version of the feed in the form X.Y + Version VersionVersion `json:"version"` +} + +// The semantic version of the feed in the form X.Y +type VersionVersion string + +const ( + Purple31RC2 VersionVersion = "3.1-RC2" + The10 VersionVersion = "1.0" + The11 VersionVersion = "1.1" + The20 VersionVersion = "2.0" + The21 VersionVersion = "2.1" + The22 VersionVersion = "2.2" + The23 VersionVersion = "2.3" + The30 VersionVersion = "3.0" +) + +type GbfsVersionsVersion string + +const ( + Fluffy31RC2 GbfsVersionsVersion = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/geofencing_zones/geofencing_zones.go b/models/golang/v3.1-RC2/geofencing_zones/geofencing_zones.go new file mode 100644 index 0000000..89fe86e --- /dev/null +++ b/models/golang/v3.1-RC2/geofencing_zones/geofencing_zones.go @@ -0,0 +1,159 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// geofencingZones, err := UnmarshalGeofencingZones(bytes) +// bytes, err = geofencingZones.Marshal() + +package geofencing_zones + + + +import "encoding/json" + +func UnmarshalGeofencingZones(data []byte) (GeofencingZones, error) { + var r GeofencingZones + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *GeofencingZones) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes geofencing zones and their associated rules and attributes (added in v2.1-RC). +type GeofencingZones struct { + // Array that contains geofencing information for the system. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework. + Version Version `json:"version"` +} + +// Array that contains geofencing information for the system. +type Data struct { + // Each geofenced zone and its associated rules and attributes is described as an object + // within the array of features. + GeofencingZones GeofencingZonesClass `json:"geofencing_zones"` + // Array of Rule objects defining restrictions that apply globally in all areas as the + // default restrictions, except where overridden with an explicit geofencing zone. + GlobalRules []GlobalRule `json:"global_rules"` +} + +// Each geofenced zone and its associated rules and attributes is described as an object +// within the array of features. +type GeofencingZonesClass struct { + // Array of objects. + Features []GeoJSONFeature `json:"features"` + // FeatureCollection as per IETF RFC 7946. + Type GeofencingZonesType `json:"type"` +} + +type GeoJSONFeature struct { + // A polygon that describes where rides might not be able to start, end, go through, or have + // other limitations. Must follow the right-hand rule. + Geometry GeoJSONMultiPolygon `json:"geometry"` + // Describing travel allowances and limitations. + Properties Properties `json:"properties"` + Type FeatureType `json:"type"` +} + +// A polygon that describes where rides might not be able to start, end, go through, or have +// other limitations. Must follow the right-hand rule. +type GeoJSONMultiPolygon struct { + Coordinates [][][][]float64 `json:"coordinates"` + Type GeometryType `json:"type"` +} + +// Describing travel allowances and limitations. +type Properties struct { + // End time of the geofencing zone in RFC3339 format. + End *string `json:"end,omitempty"` + // Public name of the geofencing zone. + Name []Name `json:"name,omitempty"` + // Array of Rule objects defining restrictions that apply within the area of the polygon. + Rules []Rule `json:"rules,omitempty"` + // Start time of the geofencing zone in RFC3339 format. + Start *string `json:"start,omitempty"` +} + +type Name struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Rule struct { + // What is the maximum speed allowed, in kilometers per hour? + MaximumSpeedKph *int64 `json:"maximum_speed_kph,omitempty"` + // Is the ride allowed to end in this zone? + RideEndAllowed bool `json:"ride_end_allowed"` + // Is the ride allowed to start in this zone? + RideStartAllowed bool `json:"ride_start_allowed"` + // Is the ride allowed to travel through this zone? + RideThroughAllowed bool `json:"ride_through_allowed"` + // Vehicle MUST be parked at stations defined in station_information.json within this + // geofence zone + StationParking *bool `json:"station_parking,omitempty"` + // Array of vehicle type IDs for which these restrictions apply. + VehicleTypeIDS []string `json:"vehicle_type_ids,omitempty"` +} + +type GlobalRule struct { + // What is the maximum speed allowed, in kilometers per hour? + MaximumSpeedKph *int64 `json:"maximum_speed_kph,omitempty"` + // Is the ride allowed to end in this zone? + RideEndAllowed bool `json:"ride_end_allowed"` + // Is the ride allowed to start in this zone? + RideStartAllowed bool `json:"ride_start_allowed"` + // Is the ride allowed to travel through this zone? + RideThroughAllowed bool `json:"ride_through_allowed"` + // Vehicle MUST be parked at stations defined in station_information.json within this + // geofence zone + StationParking *bool `json:"station_parking,omitempty"` + // Array of vehicle type IDs for which these restrictions apply. + VehicleTypeIDS []string `json:"vehicle_type_ids,omitempty"` +} + +type GeometryType string + +const ( + MultiPolygon GeometryType = "MultiPolygon" +) + +type FeatureType string + +const ( + Feature FeatureType = "Feature" +) + +// FeatureCollection as per IETF RFC 7946. +type GeofencingZonesType string + +const ( + FeatureCollection GeofencingZonesType = "FeatureCollection" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/manifest/manifest.go b/models/golang/v3.1-RC2/manifest/manifest.go new file mode 100644 index 0000000..1d4e55d --- /dev/null +++ b/models/golang/v3.1-RC2/manifest/manifest.go @@ -0,0 +1,106 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// manifest, err := UnmarshalManifest(bytes) +// bytes, err = manifest.Marshal() + +package manifest + + + +import "encoding/json" + +func UnmarshalManifest(data []byte) (Manifest, error) { + var r Manifest + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *Manifest) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// An index of gbfs.json URLs for each GBFS data set produced by a publisher. A single +// instance of this file should be published at a single stable URL, for example: +// https://example.com/gbfs/manifest.json. +type Manifest struct { + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version ManifestVersion `json:"version"` +} + +type Data struct { + // An array of objects, each containing the keys below. + Datasets []Dataset `json:"datasets"` +} + +type Dataset struct { + // A GeoJSON MultiPolygon that describes the operating area. + Area *Area `json:"area,omitempty"` + // The ISO 3166-1 alpha-2 country code of the operating area. + CountryCode *string `json:"country_code,omitempty"` + // The system_id from system_information.json for the corresponding data set(s). + SystemID string `json:"system_id"` + // Contains one object, as defined below, for each of the available versions of a feed. The + // array MUST be sorted by increasing MAJOR and MINOR version number. + Versions []VersionElement `json:"versions"` +} + +// A GeoJSON MultiPolygon that describes the operating area. +type Area struct { + Coordinates [][][][]float64 `json:"coordinates"` + Type Type `json:"type"` +} + +type VersionElement struct { + // URL of the corresponding gbfs.json endpoint + URL string `json:"url"` + // The semantic version of the feed in the form X.Y + Version VersionVersion `json:"version"` +} + +type Type string + +const ( + MultiPolygon Type = "MultiPolygon" +) + +// The semantic version of the feed in the form X.Y +type VersionVersion string + +const ( + Purple31RC2 VersionVersion = "3.1-RC2" + The10 VersionVersion = "1.0" + The11 VersionVersion = "1.1" + The20 VersionVersion = "2.0" + The21 VersionVersion = "2.1" + The22 VersionVersion = "2.2" + The23 VersionVersion = "2.3" + The30 VersionVersion = "3.0" +) + +type ManifestVersion string + +const ( + Fluffy31RC2 ManifestVersion = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/station_information/station_information.go b/models/golang/v3.1-RC2/station_information/station_information.go new file mode 100644 index 0000000..ffb7350 --- /dev/null +++ b/models/golang/v3.1-RC2/station_information/station_information.go @@ -0,0 +1,195 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// stationInformation, err := UnmarshalStationInformation(bytes) +// bytes, err = stationInformation.Marshal() + +package station_information + + + +import "encoding/json" + +func UnmarshalStationInformation(data []byte) (StationInformation, error) { + var r StationInformation + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *StationInformation) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// List of all stations, their capacities and locations. REQUIRED of systems utilizing docks. +type StationInformation struct { + // Array that contains one object per station as defined below. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Array that contains one object per station as defined below. +type Data struct { + Stations []Station `json:"stations"` +} + +type Station struct { + // Address where station is located. + Address *string `json:"address,omitempty"` + // Number of total docking points installed at this station, both available and unavailable. + Capacity *int64 `json:"capacity,omitempty"` + // City where station is located. (added in v3.1-RC2) + City *string `json:"city,omitempty"` + // Contact phone of the station. Added in v2.3 + ContactPhone *string `json:"contact_phone,omitempty"` + // Cross street or landmark where the station is located. + CrossStreet *string `json:"cross_street,omitempty"` + // Does the station support charging of electric vehicles? (added in v2.3-RC) + IsChargingStation *bool `json:"is_charging_station,omitempty"` + // Are valet services provided at this station? (added in v2.1-RC) + IsValetStation *bool `json:"is_valet_station,omitempty"` + // Is this station a location with or without physical infrastructure? (added in v2.1-RC) + IsVirtualStation *bool `json:"is_virtual_station,omitempty"` + // The latitude of the station. + Lat float64 `json:"lat"` + // The longitude fo the station. + Lon float64 `json:"lon"` + // Public name of the station. + Name []Name `json:"name"` + // Are parking hoops present at this station? Added in v2.3 + ParkingHoop *bool `json:"parking_hoop,omitempty"` + // Type of parking station. Added in v2.3 + ParkingType *ParkingType `json:"parking_type,omitempty"` + // Postal code where station is located. + PostCode *string `json:"post_code,omitempty"` + // Identifier of the region where the station is located. + RegionID *string `json:"region_id,omitempty"` + // Payment methods accepted at this station. + RentalMethods []RentalMethod `json:"rental_methods,omitempty"` + // Contains rental uris for Android, iOS, and web in the android, ios, and web fields (added + // in v1.1). + RentalUris *RentalUris `json:"rental_uris,omitempty"` + // Short name or other type of identifier. + ShortName []ShortName `json:"short_name,omitempty"` + // A multipolygon that describes the area of a virtual station (added in v2.1-RC). + StationArea *StationArea `json:"station_area,omitempty"` + // Identifier of a station. + StationID string `json:"station_id"` + // Hours of operation for the station in OSM opening_hours format. + StationOpeningHours *string `json:"station_opening_hours,omitempty"` + // This field's value is an array of objects containing the keys vehicle_type_ids and count + // defined below. These objects are used to model the total docking capacity of a station, + // both available and unavailable, for each type of vehicle that may dock at this station. + VehicleDocksCapacity []VehicleDocksCapacity `json:"vehicle_docks_capacity,omitempty"` + // This field's value is an array of objects containing the keys vehicle_type_ids and count + // defined below. These objects are used to model the parking capacity of virtual stations + // (defined using the is_virtual_station field) for each vehicle type that can be returned + // to this station. + VehicleTypesCapacity []VehicleTypesCapacity `json:"vehicle_types_capacity,omitempty"` +} + +type Name struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// Contains rental uris for Android, iOS, and web in the android, ios, and web fields (added +// in v1.1). +type RentalUris struct { + // URI that can be passed to an Android app with an intent (added in v1.1). + Android *string `json:"android,omitempty"` + // URI that can be used on iOS to launch the rental app for this station (added in v1.1). + Ios *string `json:"ios,omitempty"` + // URL that can be used by a web browser to show more information about renting a vehicle at + // this station (added in v1.1). + Web *string `json:"web,omitempty"` +} + +type ShortName struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// A multipolygon that describes the area of a virtual station (added in v2.1-RC). +type StationArea struct { + Coordinates [][][][]float64 `json:"coordinates"` + Type Type `json:"type"` +} + +type VehicleDocksCapacity struct { + // A number representing the total number of docks at the station, both available and + // unavailable, that may accept the vehicle types specified by vehicle_type_ids. + Count int64 `json:"count"` + // An array of strings where each string represents a vehicle_type_id that is able to use a + // particular type of dock at the station. + VehicleTypeIDS []string `json:"vehicle_type_ids"` +} + +type VehicleTypesCapacity struct { + // A number representing the total number of vehicles of the specified vehicle_type_ids that + // can park within the virtual station. + Count int64 `json:"count"` + // The vehicle_type_ids, as defined in vehicle_types.json, that may park at the virtual + // station. + VehicleTypeIDS []string `json:"vehicle_type_ids"` +} + +// Type of parking station. Added in v2.3 +type ParkingType string + +const ( + Other ParkingType = "other" + ParkingLot ParkingType = "parking_lot" + SidewalkParking ParkingType = "sidewalk_parking" + StreetParking ParkingType = "street_parking" + UndergroundParking ParkingType = "underground_parking" +) + +type RentalMethod string + +const ( + Accountnumber RentalMethod = "accountnumber" + Androidpay RentalMethod = "androidpay" + Applepay RentalMethod = "applepay" + Creditcard RentalMethod = "creditcard" + Key RentalMethod = "key" + Paypass RentalMethod = "paypass" + Phone RentalMethod = "phone" + Transitcard RentalMethod = "transitcard" +) + +type Type string + +const ( + MultiPolygon Type = "MultiPolygon" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/station_status/station_status.go b/models/golang/v3.1-RC2/station_status/station_status.go new file mode 100644 index 0000000..7bdf072 --- /dev/null +++ b/models/golang/v3.1-RC2/station_status/station_status.go @@ -0,0 +1,104 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// stationStatus, err := UnmarshalStationStatus(bytes) +// bytes, err = stationStatus.Marshal() + +package station_status + + + +import "encoding/json" + +func UnmarshalStationStatus(data []byte) (StationStatus, error) { + var r StationStatus + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *StationStatus) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes the capacity and rental availability of the station +type StationStatus struct { + // Array that contains one object per station as defined below. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Array that contains one object per station as defined below. +type Data struct { + Stations []Station `json:"stations"` +} + +type Station struct { + // Is the station currently on the street? + IsInstalled bool `json:"is_installed"` + // Is the station currently renting vehicles? + IsRenting bool `json:"is_renting"` + // Is the station accepting vehicle returns? + IsReturning bool `json:"is_returning"` + // The last time this station reported its status to the operator's backend in RFC3339 + // format. + LastReported string `json:"last_reported"` + // Number of functional docks physically at the station. + NumDocksAvailable *int64 `json:"num_docks_available,omitempty"` + // Number of empty but disabled docks at the station. + NumDocksDisabled *int64 `json:"num_docks_disabled,omitempty"` + // Number of vehicles of any type physically available for rental at the station. + NumVehiclesAvailable int64 `json:"num_vehicles_available"` + // Number of disabled vehicles of any type at the station. + NumVehiclesDisabled *int64 `json:"num_vehicles_disabled,omitempty"` + // Identifier of a station. + StationID string `json:"station_id"` + // Object displaying available docks by vehicle type (added in v2.1-RC). + VehicleDocksAvailable []VehicleDocksAvailable `json:"vehicle_docks_available,omitempty"` + // Array of objects displaying the total number of each vehicle type at the station (added + // in v2.1-RC). + VehicleTypesAvailable []VehicleTypesAvailable `json:"vehicle_types_available,omitempty"` +} + +type VehicleDocksAvailable struct { + // A number representing the total number of available docks for the defined vehicle type + // (added in v2.1-RC). + Count int64 `json:"count"` + // An array of strings where each string represents a vehicle_type_id that is able to use a + // particular type of dock at the station (added in v2.1-RC). + VehicleTypeIDS []string `json:"vehicle_type_ids"` +} + +type VehicleTypesAvailable struct { + // A number representing the total amount of this vehicle type at the station (added in + // v2.1-RC). + Count int64 `json:"count"` + // The vehicle_type_id of vehicle at the station (added in v2.1-RC). + VehicleTypeID string `json:"vehicle_type_id"` +} + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/system_alerts/system_alerts.go b/models/golang/v3.1-RC2/system_alerts/system_alerts.go new file mode 100644 index 0000000..ee0dd85 --- /dev/null +++ b/models/golang/v3.1-RC2/system_alerts/system_alerts.go @@ -0,0 +1,119 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// systemAlerts, err := UnmarshalSystemAlerts(bytes) +// bytes, err = systemAlerts.Marshal() + +package system_alerts + + + +import "encoding/json" + +func UnmarshalSystemAlerts(data []byte) (SystemAlerts, error) { + var r SystemAlerts + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *SystemAlerts) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes ad-hoc changes to the system. +type SystemAlerts struct { + // Array that contains ad-hoc alerts for the system. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Array that contains ad-hoc alerts for the system. +type Data struct { + Alerts []Alert `json:"alerts"` +} + +type Alert struct { + // Identifier for this alert. + AlertID string `json:"alert_id"` + // Detailed description of the alert. + Description []Description `json:"description,omitempty"` + // Indicates the last time the info for the alert was updated. + LastUpdated *string `json:"last_updated,omitempty"` + // Array of identifiers of the regions for which this alert applies. + RegionIDS []string `json:"region_ids,omitempty"` + // Array of identifiers of the stations for which this alert applies. + StationIDS []string `json:"station_ids,omitempty"` + // A short summary of this alert to be displayed to the customer. + Summary []Summary `json:"summary"` + // Array of objects indicating when the alert is in effect. + Times []Time `json:"times,omitempty"` + // Type of alert. + Type Type `json:"type"` + // URL where the customer can learn more information about this alert. + URL []URL `json:"url,omitempty"` +} + +type Description struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Summary struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Time struct { + // End time of the alert. + End *string `json:"end,omitempty"` + // Start time of the alert. + Start *string `json:"start,omitempty"` +} + +type URL struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// Type of alert. +type Type string + +const ( + Other Type = "other" + StationClosure Type = "station_closure" + StationMove Type = "station_move" + SystemClosure Type = "system_closure" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/system_information/system_information.go b/models/golang/v3.1-RC2/system_information/system_information.go new file mode 100644 index 0000000..b246cbe --- /dev/null +++ b/models/golang/v3.1-RC2/system_information/system_information.go @@ -0,0 +1,1339 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// systemInformation, err := UnmarshalSystemInformation(bytes) +// bytes, err = systemInformation.Marshal() + +package system_information + + + +import "encoding/json" + +func UnmarshalSystemInformation(data []byte) (SystemInformation, error) { + var r SystemInformation + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *SystemInformation) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Details including system operator, system location, year implemented, URL, contact info, +// time zone. +type SystemInformation struct { + // Response data in the form of name:value pairs. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Response data in the form of name:value pairs. +type Data struct { + // If the feed license requires attribution, name of the organization to which attribution + // should be provided. An array with one object per supported language with the following + // keys: + AttributionOrganizationName []AttributionOrganizationName `json:"attribution_organization_name,omitempty"` + // URL of the organization to which attribution should be provided. + AttributionURL *string `json:"attribution_url,omitempty"` + // An object where each key defines one of the items listed below (added in v2.3-RC). + BrandAssets *BrandAssets `json:"brand_assets,omitempty"` + // Email address actively monitored by the operator's customer service department. + Email *string `json:"email,omitempty"` + // A single contact email address for consumers of this feed to report technical issues + // (added in v1.1). + FeedContactEmail string `json:"feed_contact_email"` + // List of languages used in translated strings. Each element in the list must be of type + // Language. + Languages []string `json:"languages"` + // REQUIRED if the dataset is provided under a standard license. An identifier for a + // standard license from the SPDX License List. Provide license_id rather than license_url + // if the license is included in the SPDX License List. See the GBFS wiki for a comparison + // of a subset of standard licenses. If the license_id and license_url fields are blank or + // omitted, this indicates that the feed is provided under the Creative Commons Universal + // Public Domain Dedication. + LicenseID *LicenseID `json:"license_id,omitempty"` + // A fully qualified URL of a page that defines the license terms for the GBFS data for this + // system. + LicenseURL *string `json:"license_url,omitempty"` + // REQUIRED if the producer publishes datasets for more than one system geography, for + // example Berlin and Paris. A fully qualified URL pointing to the manifest.json file for + // the publisher. + ManifestURL *string `json:"manifest_url,omitempty"` + // Name of the system to be displayed to customers. An array with one object per supported + // language with the following keys: + Name []Name `json:"name"` + // Hours and dates of operation for the system in OSM opening_hours format. (added in v3.0) + OpeningHours string `json:"opening_hours"` + // Name of the system operator. An array with one object per supported language with the + // following keys: + Operator []Operator `json:"operator,omitempty"` + // This OPTIONAL field SHOULD contain a single voice telephone number for the specified + // system’s customer service department. MUST be in E.164 format as defined in Field Types. + PhoneNumber *string `json:"phone_number,omitempty"` + // The date that the privacy policy provided at privacy_url was last updated (added in + // v2.3-RC). + PrivacyLastUpdated *string `json:"privacy_last_updated,omitempty"` + // A fully qualified URL pointing to the privacy policy for the service. An array with one + // object per supported language with the following keys: + PrivacyURL []PrivacyURL `json:"privacy_url,omitempty"` + // URL where a customer can purchase a membership. + PurchaseURL *string `json:"purchase_url,omitempty"` + // Contains rental app information in the android and ios JSON objects (added in v1.1). + RentalApps *RentalApps `json:"rental_apps,omitempty"` + // Abbreviation for a system. An array with one object per supported language with the + // following keys: + ShortName []ShortName `json:"short_name,omitempty"` + // Date that the system began operations. + StartDate *string `json:"start_date,omitempty"` + // Identifier for this vehicle share system. This should be globally unique (even between + // different systems). + SystemID string `json:"system_id"` + // Date after which this data source will no longer be available to consuming applications. + TerminationDate *string `json:"termination_date,omitempty"` + // The date that the terms of service provided at terms_url were last updated (added in + // v2.3-RC) + TermsLastUpdated *string `json:"terms_last_updated,omitempty"` + // A fully qualified URL pointing to the terms of service (also often called "terms of use" + // or "terms and conditions") for the service. An array with one object per supported + // language with the following keys: + TermsURL []TermsURL `json:"terms_url,omitempty"` + // The time zone where the system is located. + Timezone Timezone `json:"timezone"` + // The URL of the vehicle share system. + URL *string `json:"url,omitempty"` +} + +type AttributionOrganizationName struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// An object where each key defines one of the items listed below (added in v2.3-RC). +type BrandAssets struct { + // A fully qualified URL pointing to the location of a graphic file representing the brand + // for the service (added in v2.3-RC). + BrandImageURL string `json:"brand_image_url"` + // A fully qualified URL pointing to the location of a graphic file representing the brand + // for the service for use in dark mode (added in v2.3-RC). + BrandImageURLDark *string `json:"brand_image_url_dark,omitempty"` + // Date that indicates the last time any included brand assets were updated (added in + // v2.3-RC). + BrandLastModified string `json:"brand_last_modified"` + // A fully qualified URL pointing to the location of a page that defines the license terms + // of brand icons, colors or other trademark information (added in v2.3-RC). + BrandTermsURL *string `json:"brand_terms_url,omitempty"` + // Color used to represent the brand for the service (added in v2.3-RC) + Color *string `json:"color,omitempty"` +} + +type Name struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Operator struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type PrivacyURL struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// Contains rental app information in the android and ios JSON objects (added in v1.1). +type RentalApps struct { + // Contains rental app download and app discovery information for the Android platform. + // (added in v1.1) + Android *Android `json:"android,omitempty"` + // Contains rental information for the iOS platform (added in v1.1). + Ios *Ios `json:"ios,omitempty"` +} + +// Contains rental app download and app discovery information for the Android platform. +// (added in v1.1) +type Android struct { + // URI that can be used to discover if the rental Android app is installed on the device + // (added in v1.1). + DiscoveryURI string `json:"discovery_uri"` + // URI where the rental Android app can be downloaded from (added in v1.1). + StoreURI string `json:"store_uri"` +} + +// Contains rental information for the iOS platform (added in v1.1). +type Ios struct { + // URI that can be used to discover if the rental iOS app is installed on the device (added + // in v1.1). + DiscoveryURI string `json:"discovery_uri"` + // URI where the rental iOS app can be downloaded from (added in v1.1). + StoreURI string `json:"store_uri"` +} + +type ShortName struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type TermsURL struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// REQUIRED if the dataset is provided under a standard license. An identifier for a +// standard license from the SPDX License List. Provide license_id rather than license_url +// if the license is included in the SPDX License List. See the GBFS wiki for a comparison +// of a subset of standard licenses. If the license_id and license_url fields are blank or +// omitted, this indicates that the feed is provided under the Creative Commons Universal +// Public Domain Dedication. +type LicenseID string + +const ( + AAL LicenseID = "AAL" + ADSL LicenseID = "ADSL" + AGPL10Only LicenseID = "AGPL-1.0-only" + AGPL10OrLater LicenseID = "AGPL-1.0-or-later" + AGPL30Only LicenseID = "AGPL-3.0-only" + AGPL30OrLater LicenseID = "AGPL-3.0-or-later" + ANTLRPDFallback LicenseID = "ANTLR-PD-fallback" + APL10 LicenseID = "APL-1.0" + Abstyles LicenseID = "Abstyles" + AdaCoreDoc LicenseID = "AdaCore-doc" + Adobe2006 LicenseID = "Adobe-2006" + AdobeGlyph LicenseID = "Adobe-Glyph" + Afl11 LicenseID = "AFL-1.1" + Afl12 LicenseID = "AFL-1.2" + Afl20 LicenseID = "AFL-2.0" + Afl21 LicenseID = "AFL-2.1" + Afl30 LicenseID = "AFL-3.0" + Afmparse LicenseID = "Afmparse" + Aladdin LicenseID = "Aladdin" + Amdplpa LicenseID = "AMDPLPA" + Aml LicenseID = "AML" + Ampas LicenseID = "AMPAS" + AntlrPD LicenseID = "ANTLR-PD" + Apache10 LicenseID = "Apache-1.0" + Apache11 LicenseID = "Apache-1.1" + Apache20 LicenseID = "Apache-2.0" + Apafml LicenseID = "APAFML" + AppS2P LicenseID = "App-s2p" + Apsl10 LicenseID = "APSL-1.0" + Apsl11 LicenseID = "APSL-1.1" + Apsl12 LicenseID = "APSL-1.2" + Apsl20 LicenseID = "APSL-2.0" + Arphic1999 LicenseID = "Arphic-1999" + Artistic10 LicenseID = "Artistic-1.0" + Artistic10Cl8 LicenseID = "Artistic-1.0-cl8" + Artistic10PERL LicenseID = "Artistic-1.0-Perl" + Artistic20 LicenseID = "Artistic-2.0" + BSD1Clause LicenseID = "BSD-1-Clause" + BSD2Clause LicenseID = "BSD-2-Clause" + BSD2ClausePatent LicenseID = "BSD-2-Clause-Patent" + BSD2ClauseViews LicenseID = "BSD-2-Clause-Views" + BSD3Clause LicenseID = "BSD-3-Clause" + BSD3ClauseAttribution LicenseID = "BSD-3-Clause-Attribution" + BSD3ClauseClear LicenseID = "BSD-3-Clause-Clear" + BSD3ClauseLBNL LicenseID = "BSD-3-Clause-LBNL" + BSD3ClauseModification LicenseID = "BSD-3-Clause-Modification" + BSD3ClauseNoMilitaryLicense LicenseID = "BSD-3-Clause-No-Military-License" + BSD3ClauseNoNuclearLicense LicenseID = "BSD-3-Clause-No-Nuclear-License" + BSD3ClauseNoNuclearLicense2014 LicenseID = "BSD-3-Clause-No-Nuclear-License-2014" + BSD3ClauseNoNuclearWarranty LicenseID = "BSD-3-Clause-No-Nuclear-Warranty" + BSD3ClauseOpenMPI LicenseID = "BSD-3-Clause-Open-MPI" + BSD43Reno LicenseID = "BSD-4.3RENO" + BSD43Tahoe LicenseID = "BSD-4.3TAHOE" + BSD4Clause LicenseID = "BSD-4-Clause" + BSD4ClauseShortened LicenseID = "BSD-4-Clause-Shortened" + BSD4ClauseUC LicenseID = "BSD-4-Clause-UC" + BSDAdvertisingAcknowledgement LicenseID = "BSD-Advertising-Acknowledgement" + BSDAttributionHPNDDisclaimer LicenseID = "BSD-Attribution-HPND-disclaimer" + BSDProtection LicenseID = "BSD-Protection" + BSDSourceCode LicenseID = "BSD-Source-Code" + Baekmuk LicenseID = "Baekmuk" + Bahyph LicenseID = "Bahyph" + Barr LicenseID = "Barr" + Beerware LicenseID = "Beerware" + BitTorrent10 LicenseID = "BitTorrent-1.0" + BitTorrent11 LicenseID = "BitTorrent-1.1" + BitstreamCharter LicenseID = "Bitstream-Charter" + BitstreamVera LicenseID = "Bitstream-Vera" + Blessing LicenseID = "blessing" + BlueOak100 LicenseID = "BlueOak-1.0.0" + Borceux LicenseID = "Borceux" + BrianGladman3Clause LicenseID = "Brian-Gladman-3-Clause" + Bsl10 LicenseID = "BSL-1.0" + Busl11 LicenseID = "BUSL-1.1" + Bzip2106 LicenseID = "bzip2-1.0.6" + CAL10CombinedWorkException LicenseID = "CAL-1.0-Combined-Work-Exception" + CDLAPermissive10 LicenseID = "CDLA-Permissive-1.0" + CDLAPermissive20 LicenseID = "CDLA-Permissive-2.0" + CDLASharing10 LicenseID = "CDLA-Sharing-1.0" + CMUMach LicenseID = "CMU-Mach" + CNRIJython LicenseID = "CNRI-Jython" + CNRIPython LicenseID = "CNRI-Python" + CNRIPythonGPLCompatible LicenseID = "CNRI-Python-GPL-Compatible" + CUAOpl10 LicenseID = "CUA-OPL-1.0" + CUda10 LicenseID = "C-UDA-1.0" + Cal10 LicenseID = "CAL-1.0" + Caldera LicenseID = "Caldera" + Catosl11 LicenseID = "CATOSL-1.1" + Cc010 LicenseID = "CC0-1.0" + CcBy10 LicenseID = "CC-BY-1.0" + CcBy20 LicenseID = "CC-BY-2.0" + CcBy25 LicenseID = "CC-BY-2.5" + CcBy25Au LicenseID = "CC-BY-2.5-AU" + CcBy30 LicenseID = "CC-BY-3.0" + CcBy30At LicenseID = "CC-BY-3.0-AT" + CcBy30De LicenseID = "CC-BY-3.0-DE" + CcBy30Igo LicenseID = "CC-BY-3.0-IGO" + CcBy30Nl LicenseID = "CC-BY-3.0-NL" + CcBy30Us LicenseID = "CC-BY-3.0-US" + CcBy40 LicenseID = "CC-BY-4.0" + CcByNc10 LicenseID = "CC-BY-NC-1.0" + CcByNc20 LicenseID = "CC-BY-NC-2.0" + CcByNc25 LicenseID = "CC-BY-NC-2.5" + CcByNc30 LicenseID = "CC-BY-NC-3.0" + CcByNc30De LicenseID = "CC-BY-NC-3.0-DE" + CcByNc40 LicenseID = "CC-BY-NC-4.0" + CcByNcNd10 LicenseID = "CC-BY-NC-ND-1.0" + CcByNcNd20 LicenseID = "CC-BY-NC-ND-2.0" + CcByNcNd25 LicenseID = "CC-BY-NC-ND-2.5" + CcByNcNd30 LicenseID = "CC-BY-NC-ND-3.0" + CcByNcNd30De LicenseID = "CC-BY-NC-ND-3.0-DE" + CcByNcNd30Igo LicenseID = "CC-BY-NC-ND-3.0-IGO" + CcByNcNd40 LicenseID = "CC-BY-NC-ND-4.0" + CcByNcSa10 LicenseID = "CC-BY-NC-SA-1.0" + CcByNcSa20 LicenseID = "CC-BY-NC-SA-2.0" + CcByNcSa20De LicenseID = "CC-BY-NC-SA-2.0-DE" + CcByNcSa20Fr LicenseID = "CC-BY-NC-SA-2.0-FR" + CcByNcSa20Uk LicenseID = "CC-BY-NC-SA-2.0-UK" + CcByNcSa25 LicenseID = "CC-BY-NC-SA-2.5" + CcByNcSa30 LicenseID = "CC-BY-NC-SA-3.0" + CcByNcSa30De LicenseID = "CC-BY-NC-SA-3.0-DE" + CcByNcSa30Igo LicenseID = "CC-BY-NC-SA-3.0-IGO" + CcByNcSa40 LicenseID = "CC-BY-NC-SA-4.0" + CcByNd10 LicenseID = "CC-BY-ND-1.0" + CcByNd20 LicenseID = "CC-BY-ND-2.0" + CcByNd25 LicenseID = "CC-BY-ND-2.5" + CcByNd30 LicenseID = "CC-BY-ND-3.0" + CcByNd30De LicenseID = "CC-BY-ND-3.0-DE" + CcByNd40 LicenseID = "CC-BY-ND-4.0" + CcBySa10 LicenseID = "CC-BY-SA-1.0" + CcBySa20 LicenseID = "CC-BY-SA-2.0" + CcBySa20Uk LicenseID = "CC-BY-SA-2.0-UK" + CcBySa21Jp LicenseID = "CC-BY-SA-2.1-JP" + CcBySa25 LicenseID = "CC-BY-SA-2.5" + CcBySa30 LicenseID = "CC-BY-SA-3.0" + CcBySa30At LicenseID = "CC-BY-SA-3.0-AT" + CcBySa30De LicenseID = "CC-BY-SA-3.0-DE" + CcBySa40 LicenseID = "CC-BY-SA-4.0" + CcPddc LicenseID = "CC-PDDC" + Cddl10 LicenseID = "CDDL-1.0" + Cddl11 LicenseID = "CDDL-1.1" + Cdl10 LicenseID = "CDL-1.0" + Cecill10 LicenseID = "CECILL-1.0" + Cecill11 LicenseID = "CECILL-1.1" + Cecill20 LicenseID = "CECILL-2.0" + Cecill21 LicenseID = "CECILL-2.1" + CecillB LicenseID = "CECILL-B" + CecillC LicenseID = "CECILL-C" + CernOhl11 LicenseID = "CERN-OHL-1.1" + CernOhl12 LicenseID = "CERN-OHL-1.2" + CernOhlP20 LicenseID = "CERN-OHL-P-2.0" + CernOhlS20 LicenseID = "CERN-OHL-S-2.0" + CernOhlW20 LicenseID = "CERN-OHL-W-2.0" + Cfitsio LicenseID = "CFITSIO" + Checkmk LicenseID = "checkmk" + ClArtistic LicenseID = "ClArtistic" + Clips LicenseID = "Clips" + Coil10 LicenseID = "COIL-1.0" + CommunitySpec10 LicenseID = "Community-Spec-1.0" + Condor11 LicenseID = "Condor-1.1" + CopyleftNext030 LicenseID = "copyleft-next-0.3.0" + CopyleftNext031 LicenseID = "copyleft-next-0.3.1" + CornellLosslessJPEG LicenseID = "Cornell-Lossless-JPEG" + Cpal10 LicenseID = "CPAL-1.0" + Cpl10 LicenseID = "CPL-1.0" + Cpol102 LicenseID = "CPOL-1.02" + Crossword LicenseID = "Crossword" + CrystalStacker LicenseID = "CrystalStacker" + Cube LicenseID = "Cube" + Curl LicenseID = "curl" + DFsl10 LicenseID = "D-FSL-1.0" + DLDeBy20 LicenseID = "DL-DE-BY-2.0" + Diffmark LicenseID = "diffmark" + Doc LicenseID = "DOC" + Dotseqn LicenseID = "Dotseqn" + Drl10 LicenseID = "DRL-1.0" + Dsdp LicenseID = "DSDP" + Dvipdfm LicenseID = "dvipdfm" + EGenix LicenseID = "eGenix" + EUDatagrid LicenseID = "EUDatagrid" + Ecl10 LicenseID = "ECL-1.0" + Ecl20 LicenseID = "ECL-2.0" + Efl10 LicenseID = "EFL-1.0" + Efl20 LicenseID = "EFL-2.0" + Elastic20 LicenseID = "Elastic-2.0" + Entessa LicenseID = "Entessa" + Epics LicenseID = "EPICS" + Epl10 LicenseID = "EPL-1.0" + Epl20 LicenseID = "EPL-2.0" + ErlPL11 LicenseID = "ErlPL-1.1" + Etalab20 LicenseID = "etalab-2.0" + Eupl10 LicenseID = "EUPL-1.0" + Eupl11 LicenseID = "EUPL-1.1" + Eupl12 LicenseID = "EUPL-1.2" + Eurosym LicenseID = "Eurosym" + Fair LicenseID = "Fair" + FdkAAC LicenseID = "FDK-AAC" + Frameworx10 LicenseID = "Frameworx-1.0" + FreeBSDDOC LicenseID = "FreeBSD-DOC" + FreeImage LicenseID = "FreeImage" + Fsfap LicenseID = "FSFAP" + Fsful LicenseID = "FSFUL" + Fsfullr LicenseID = "FSFULLR" + Fsfullrwd LicenseID = "FSFULLRWD" + Ftl LicenseID = "FTL" + GFDL11InvariantsOnly LicenseID = "GFDL-1.1-invariants-only" + GFDL11InvariantsOrLater LicenseID = "GFDL-1.1-invariants-or-later" + GFDL11NoInvariantsOnly LicenseID = "GFDL-1.1-no-invariants-only" + GFDL11NoInvariantsOrLater LicenseID = "GFDL-1.1-no-invariants-or-later" + GFDL11Only LicenseID = "GFDL-1.1-only" + GFDL11OrLater LicenseID = "GFDL-1.1-or-later" + GFDL12InvariantsOnly LicenseID = "GFDL-1.2-invariants-only" + GFDL12InvariantsOrLater LicenseID = "GFDL-1.2-invariants-or-later" + GFDL12NoInvariantsOnly LicenseID = "GFDL-1.2-no-invariants-only" + GFDL12NoInvariantsOrLater LicenseID = "GFDL-1.2-no-invariants-or-later" + GFDL12Only LicenseID = "GFDL-1.2-only" + GFDL12OrLater LicenseID = "GFDL-1.2-or-later" + GFDL13InvariantsOnly LicenseID = "GFDL-1.3-invariants-only" + GFDL13InvariantsOrLater LicenseID = "GFDL-1.3-invariants-or-later" + GFDL13NoInvariantsOnly LicenseID = "GFDL-1.3-no-invariants-only" + GFDL13NoInvariantsOrLater LicenseID = "GFDL-1.3-no-invariants-or-later" + GFDL13Only LicenseID = "GFDL-1.3-only" + GFDL13OrLater LicenseID = "GFDL-1.3-or-later" + GPL10Only LicenseID = "GPL-1.0-only" + GPL10OrLater LicenseID = "GPL-1.0-or-later" + GPL20Only LicenseID = "GPL-2.0-only" + GPL20OrLater LicenseID = "GPL-2.0-or-later" + GPL30Only LicenseID = "GPL-3.0-only" + GPL30OrLater LicenseID = "GPL-3.0-or-later" + GSOAP13B LicenseID = "gSOAP-1.3b" + Gd LicenseID = "GD" + Giftware LicenseID = "Giftware" + Gl2PS LicenseID = "GL2PS" + Glide LicenseID = "Glide" + Glulxe LicenseID = "Glulxe" + Glwtpl LicenseID = "GLWTPL" + Gnuplot LicenseID = "gnuplot" + GraphicsGems LicenseID = "Graphics-Gems" + HP1986 LicenseID = "HP-1986" + HPNDExportUS LicenseID = "HPND-export-US" + HPNDMarkusKuhn LicenseID = "HPND-Markus-Kuhn" + HPNDSellVariant LicenseID = "HPND-sell-variant" + HPNDSellVariantMITDisclaimer LicenseID = "HPND-sell-variant-MIT-disclaimer" + HaskellReport LicenseID = "HaskellReport" + Hippocratic21 LicenseID = "Hippocratic-2.1" + Hpnd LicenseID = "HPND" + Htmltidy LicenseID = "HTMLTIDY" + IBMPibs LicenseID = "IBM-pibs" + IECCodeComponentsEULA LicenseID = "IEC-Code-Components-EULA" + IJGShort LicenseID = "IJG-short" + IMatix LicenseID = "iMatix" + IPL10 LicenseID = "IPL-1.0" + ISC LicenseID = "ISC" + Icu LicenseID = "ICU" + Ijg LicenseID = "IJG" + ImageMagick LicenseID = "ImageMagick" + Imlib2 LicenseID = "Imlib2" + InfoZIP LicenseID = "Info-ZIP" + Intel LicenseID = "Intel" + IntelACPI LicenseID = "Intel-ACPI" + Interbase10 LicenseID = "Interbase-1.0" + Ipa LicenseID = "IPA" + JPLImage LicenseID = "JPL-image" + JSON LicenseID = "JSON" + Jam LicenseID = "Jam" + JasPer20 LicenseID = "JasPer-2.0" + Jpnic LicenseID = "JPNIC" + Kazlib LicenseID = "Kazlib" + KnuthCTAN LicenseID = "Knuth-CTAN" + LGPL20Only LicenseID = "LGPL-2.0-only" + LGPL20OrLater LicenseID = "LGPL-2.0-or-later" + LGPL21Only LicenseID = "LGPL-2.1-only" + LGPL21OrLater LicenseID = "LGPL-2.1-or-later" + LGPL30Only LicenseID = "LGPL-3.0-only" + LGPL30OrLater LicenseID = "LGPL-3.0-or-later" + LPPL13A LicenseID = "LPPL-1.3a" + LPPL13C LicenseID = "LPPL-1.3c" + LZMASDK911To920 LicenseID = "LZMA-SDK-9.11-to-9.20" + Lal12 LicenseID = "LAL-1.2" + Lal13 LicenseID = "LAL-1.3" + Latex2E LicenseID = "Latex2e" + Leptonica LicenseID = "Leptonica" + Lgpllr LicenseID = "LGPLLR" + LiLiQP11 LicenseID = "LiLiQ-P-1.1" + LiLiQR11 LicenseID = "LiLiQ-R-1.1" + LiLiQRplus11 LicenseID = "LiLiQ-Rplus-1.1" + Libpng LicenseID = "Libpng" + Libpng20 LicenseID = "libpng-2.0" + Libselinux10 LicenseID = "libselinux-1.0" + Libtiff LicenseID = "libtiff" + LibutilDavidNugent LicenseID = "libutil-David-Nugent" + LinuxManPagesCopyleft LicenseID = "Linux-man-pages-copyleft" + LinuxOpenIB LicenseID = "Linux-OpenIB" + Loop LicenseID = "LOOP" + Lpl10 LicenseID = "LPL-1.0" + Lpl102 LicenseID = "LPL-1.02" + Lppl10 LicenseID = "LPPL-1.0" + Lppl11 LicenseID = "LPPL-1.1" + Lppl12 LicenseID = "LPPL-1.2" + LzmaSDK922 LicenseID = "LZMA-SDK-9.22" + MIT LicenseID = "MIT" + MIT0 LicenseID = "MIT-0" + MITAdvertising LicenseID = "MIT-advertising" + MITCmu LicenseID = "MIT-CMU" + MITEnna LicenseID = "MIT-enna" + MITFeh LicenseID = "MIT-feh" + MITModernVariant LicenseID = "MIT-Modern-Variant" + MITOpenGroup LicenseID = "MIT-open-group" + MITWu LicenseID = "MIT-Wu" + MPL10 LicenseID = "MPL-1.0" + MPL11 LicenseID = "MPL-1.1" + MPL20 LicenseID = "MPL-2.0" + MPL20NoCopyleftException LicenseID = "MPL-2.0-no-copyleft-exception" + MSLpl LicenseID = "MS-LPL" + MSPl LicenseID = "MS-PL" + MSRl LicenseID = "MS-RL" + MakeIndex LicenseID = "MakeIndex" + MartinBirgmeier LicenseID = "Martin-Birgmeier" + Minpack LicenseID = "Minpack" + MirOS LicenseID = "MirOS" + Mitnfa LicenseID = "MITNFA" + Motosoto LicenseID = "Motosoto" + MpiPermissive LicenseID = "mpi-permissive" + Mpich2 LicenseID = "mpich2" + Mplus LicenseID = "mplus" + Mtll LicenseID = "MTLL" + MulanPSL10 LicenseID = "MulanPSL-1.0" + MulanPSL20 LicenseID = "MulanPSL-2.0" + Multics LicenseID = "Multics" + Mup LicenseID = "Mup" + NCSA LicenseID = "NCSA" + NISTPD LicenseID = "NIST-PD" + NISTPDFallback LicenseID = "NIST-PD-fallback" + NPL10 LicenseID = "NPL-1.0" + NPL11 LicenseID = "NPL-1.1" + NTP LicenseID = "NTP" + NTP0 LicenseID = "NTP-0" + Naist2003 LicenseID = "NAIST-2003" + Nasa13 LicenseID = "NASA-1.3" + Naumen LicenseID = "Naumen" + Nbpl10 LicenseID = "NBPL-1.0" + NcglUk20 LicenseID = "NCGL-UK-2.0" + NetCDF LicenseID = "NetCDF" + NetSNMP LicenseID = "Net-SNMP" + Newsletr LicenseID = "Newsletr" + Ngpl LicenseID = "NGPL" + Nicta10 LicenseID = "NICTA-1.0" + Nlod10 LicenseID = "NLOD-1.0" + Nlod20 LicenseID = "NLOD-2.0" + Nlpl LicenseID = "NLPL" + Nokia LicenseID = "Nokia" + Nosl LicenseID = "NOSL" + Noweb LicenseID = "Noweb" + Nposl30 LicenseID = "NPOSL-3.0" + Nrl LicenseID = "NRL" + ODBL10 LicenseID = "ODbL-1.0" + ODCBy10 LicenseID = "ODC-By-1.0" + OFL10NoRFN LicenseID = "OFL-1.0-no-RFN" + OFL11NoRFN LicenseID = "OFL-1.1-no-RFN" + OGDLTaiwan10 LicenseID = "OGDL-Taiwan-1.0" + OGLCanada20 LicenseID = "OGL-Canada-2.0" + OUda10 LicenseID = "O-UDA-1.0" + OcctPl LicenseID = "OCCT-PL" + Oclc20 LicenseID = "OCLC-2.0" + Offis LicenseID = "OFFIS" + Ofl10 LicenseID = "OFL-1.0" + Ofl10Rfn LicenseID = "OFL-1.0-RFN" + Ofl11 LicenseID = "OFL-1.1" + Ofl11Rfn LicenseID = "OFL-1.1-RFN" + Ogc10 LicenseID = "OGC-1.0" + OglUk10 LicenseID = "OGL-UK-1.0" + OglUk20 LicenseID = "OGL-UK-2.0" + OglUk30 LicenseID = "OGL-UK-3.0" + Ogtsl LicenseID = "OGTSL" + Oldap11 LicenseID = "OLDAP-1.1" + Oldap12 LicenseID = "OLDAP-1.2" + Oldap13 LicenseID = "OLDAP-1.3" + Oldap14 LicenseID = "OLDAP-1.4" + Oldap20 LicenseID = "OLDAP-2.0" + Oldap201 LicenseID = "OLDAP-2.0.1" + Oldap21 LicenseID = "OLDAP-2.1" + Oldap22 LicenseID = "OLDAP-2.2" + Oldap221 LicenseID = "OLDAP-2.2.1" + Oldap222 LicenseID = "OLDAP-2.2.2" + Oldap23 LicenseID = "OLDAP-2.3" + Oldap24 LicenseID = "OLDAP-2.4" + Oldap25 LicenseID = "OLDAP-2.5" + Oldap26 LicenseID = "OLDAP-2.6" + Oldap27 LicenseID = "OLDAP-2.7" + Oldap28 LicenseID = "OLDAP-2.8" + Oml LicenseID = "OML" + OpenPBS23 LicenseID = "OpenPBS-2.3" + OpenSSL LicenseID = "OpenSSL" + Opl10 LicenseID = "OPL-1.0" + Opubl10 LicenseID = "OPUBL-1.0" + OsetPl21 LicenseID = "OSET-PL-2.1" + Osl10 LicenseID = "OSL-1.0" + Osl11 LicenseID = "OSL-1.1" + Osl20 LicenseID = "OSL-2.0" + Osl21 LicenseID = "OSL-2.1" + Osl30 LicenseID = "OSL-3.0" + PHP30 LicenseID = "PHP-3.0" + PHP301 LicenseID = "PHP-3.01" + Parity600 LicenseID = "Parity-6.0.0" + Parity700 LicenseID = "Parity-7.0.0" + Pddl10 LicenseID = "PDDL-1.0" + Plexus LicenseID = "Plexus" + PolyFormNoncommercial100 LicenseID = "PolyForm-Noncommercial-1.0.0" + PolyFormSmallBusiness100 LicenseID = "PolyForm-Small-Business-1.0.0" + PostgreSQL LicenseID = "PostgreSQL" + Psf20 LicenseID = "PSF-2.0" + Psfrag LicenseID = "psfrag" + Psutils LicenseID = "psutils" + Python20 LicenseID = "Python-2.0" + Python201 LicenseID = "Python-2.0.1" + Qhull LicenseID = "Qhull" + Qpl10 LicenseID = "QPL-1.0" + Qpl10Inria2004 LicenseID = "QPL-1.0-INRIA-2004" + RHeCos11 LicenseID = "RHeCos-1.1" + RSAMd LicenseID = "RSA-MD" + Rdisc LicenseID = "Rdisc" + Rpl11 LicenseID = "RPL-1.1" + Rpl15 LicenseID = "RPL-1.5" + Rpsl10 LicenseID = "RPSL-1.0" + Rscpl LicenseID = "RSCPL" + Ruby LicenseID = "Ruby" + SAXPD LicenseID = "SAX-PD" + SGIB10 LicenseID = "SGI-B-1.0" + SGIB11 LicenseID = "SGI-B-1.1" + SGIB20 LicenseID = "SGI-B-2.0" + SSHOpenSSH LicenseID = "SSH-OpenSSH" + SSHShort LicenseID = "SSH-short" + Saxpath LicenseID = "Saxpath" + Scea LicenseID = "SCEA" + SchemeReport LicenseID = "SchemeReport" + Sendmail LicenseID = "Sendmail" + Sendmail823 LicenseID = "Sendmail-8.23" + Shl05 LicenseID = "SHL-0.5" + Shl051 LicenseID = "SHL-0.51" + SimPL20 LicenseID = "SimPL-2.0" + Sissl LicenseID = "SISSL" + Sissl12 LicenseID = "SISSL-1.2" + Sleepycat LicenseID = "Sleepycat" + Smlnj LicenseID = "SMLNJ" + Smppl LicenseID = "SMPPL" + Snia LicenseID = "SNIA" + Snprintf LicenseID = "snprintf" + Spencer86 LicenseID = "Spencer-86" + Spencer94 LicenseID = "Spencer-94" + Spencer99 LicenseID = "Spencer-99" + Spl10 LicenseID = "SPL-1.0" + Sspl10 LicenseID = "SSPL-1.0" + SugarCRM113 LicenseID = "SugarCRM-1.1.3" + SunPro LicenseID = "SunPro" + Swl LicenseID = "SWL" + Symlinks LicenseID = "Symlinks" + TCPWrappers LicenseID = "TCP-wrappers" + TMate LicenseID = "TMate" + TUBerlin10 LicenseID = "TU-Berlin-1.0" + TUBerlin20 LicenseID = "TU-Berlin-2.0" + TaprOhl10 LicenseID = "TAPR-OHL-1.0" + Tcl LicenseID = "TCL" + The0BSD LicenseID = "0BSD" + Torque11 LicenseID = "TORQUE-1.1" + Tosl LicenseID = "TOSL" + Tpdl LicenseID = "TPDL" + Tpl10 LicenseID = "TPL-1.0" + Ttwl LicenseID = "TTWL" + Ucar LicenseID = "UCAR" + Ucl10 LicenseID = "UCL-1.0" + UnicodeDFS2015 LicenseID = "Unicode-DFS-2015" + UnicodeDFS2016 LicenseID = "Unicode-DFS-2016" + UnicodeTOU LicenseID = "Unicode-TOU" + Unlicense LicenseID = "Unlicense" + Upl10 LicenseID = "UPL-1.0" + Vim LicenseID = "Vim" + Vostrom LicenseID = "VOSTROM" + Vsl10 LicenseID = "VSL-1.0" + W3C LicenseID = "W3C" + W3C19980720 LicenseID = "W3C-19980720" + W3C20150513 LicenseID = "W3C-20150513" + W3M LicenseID = "w3m" + Watcom10 LicenseID = "Watcom-1.0" + Wsuipa LicenseID = "Wsuipa" + Wtfpl LicenseID = "WTFPL" + X11 LicenseID = "X11" + X11DistributeModificationsVariant LicenseID = "X11-distribute-modifications-variant" + XFree8611 LicenseID = "XFree86-1.1" + XSkat LicenseID = "XSkat" + Xerox LicenseID = "Xerox" + Xinetd LicenseID = "xinetd" + Xlock LicenseID = "xlock" + Xnet LicenseID = "Xnet" + Xpp LicenseID = "xpp" + Ypl10 LicenseID = "YPL-1.0" + Ypl11 LicenseID = "YPL-1.1" + ZPL11 LicenseID = "ZPL-1.1" + ZPL20 LicenseID = "ZPL-2.0" + ZPL21 LicenseID = "ZPL-2.1" + Zed LicenseID = "Zed" + Zend20 LicenseID = "Zend-2.0" + Zimbra13 LicenseID = "Zimbra-1.3" + Zimbra14 LicenseID = "Zimbra-1.4" + Zlib LicenseID = "Zlib" + ZlibAcknowledgement LicenseID = "zlib-acknowledgement" +) + +// The time zone where the system is located. +type Timezone string + +const ( + AfricaAbidjan Timezone = "Africa/Abidjan" + AfricaAccra Timezone = "Africa/Accra" + AfricaAddisAbaba Timezone = "Africa/Addis_Ababa" + AfricaAlgiers Timezone = "Africa/Algiers" + AfricaAsmara Timezone = "Africa/Asmara" + AfricaAsmera Timezone = "Africa/Asmera" + AfricaBamako Timezone = "Africa/Bamako" + AfricaBangui Timezone = "Africa/Bangui" + AfricaBanjul Timezone = "Africa/Banjul" + AfricaBissau Timezone = "Africa/Bissau" + AfricaBlantyre Timezone = "Africa/Blantyre" + AfricaBrazzaville Timezone = "Africa/Brazzaville" + AfricaBujumbura Timezone = "Africa/Bujumbura" + AfricaCairo Timezone = "Africa/Cairo" + AfricaCasablanca Timezone = "Africa/Casablanca" + AfricaCeuta Timezone = "Africa/Ceuta" + AfricaConakry Timezone = "Africa/Conakry" + AfricaDakar Timezone = "Africa/Dakar" + AfricaDarEsSalaam Timezone = "Africa/Dar_es_Salaam" + AfricaDjibouti Timezone = "Africa/Djibouti" + AfricaDouala Timezone = "Africa/Douala" + AfricaElAaiun Timezone = "Africa/El_Aaiun" + AfricaFreetown Timezone = "Africa/Freetown" + AfricaGaborone Timezone = "Africa/Gaborone" + AfricaHarare Timezone = "Africa/Harare" + AfricaJohannesburg Timezone = "Africa/Johannesburg" + AfricaJuba Timezone = "Africa/Juba" + AfricaKampala Timezone = "Africa/Kampala" + AfricaKhartoum Timezone = "Africa/Khartoum" + AfricaKigali Timezone = "Africa/Kigali" + AfricaKinshasa Timezone = "Africa/Kinshasa" + AfricaLagos Timezone = "Africa/Lagos" + AfricaLibreville Timezone = "Africa/Libreville" + AfricaLome Timezone = "Africa/Lome" + AfricaLuanda Timezone = "Africa/Luanda" + AfricaLubumbashi Timezone = "Africa/Lubumbashi" + AfricaLusaka Timezone = "Africa/Lusaka" + AfricaMalabo Timezone = "Africa/Malabo" + AfricaMaputo Timezone = "Africa/Maputo" + AfricaMaseru Timezone = "Africa/Maseru" + AfricaMbabane Timezone = "Africa/Mbabane" + AfricaMogadishu Timezone = "Africa/Mogadishu" + AfricaMonrovia Timezone = "Africa/Monrovia" + AfricaNairobi Timezone = "Africa/Nairobi" + AfricaNdjamena Timezone = "Africa/Ndjamena" + AfricaNiamey Timezone = "Africa/Niamey" + AfricaNouakchott Timezone = "Africa/Nouakchott" + AfricaOuagadougou Timezone = "Africa/Ouagadougou" + AfricaPortoNovo Timezone = "Africa/Porto-Novo" + AfricaSaoTome Timezone = "Africa/Sao_Tome" + AfricaTimbuktu Timezone = "Africa/Timbuktu" + AfricaTripoli Timezone = "Africa/Tripoli" + AfricaTunis Timezone = "Africa/Tunis" + AfricaWindhoek Timezone = "Africa/Windhoek" + AmericaAdak Timezone = "America/Adak" + AmericaAnchorage Timezone = "America/Anchorage" + AmericaAnguilla Timezone = "America/Anguilla" + AmericaAntigua Timezone = "America/Antigua" + AmericaAraguaina Timezone = "America/Araguaina" + AmericaArgentinaBuenosAires Timezone = "America/Argentina/Buenos_Aires" + AmericaArgentinaCatamarca Timezone = "America/Argentina/Catamarca" + AmericaArgentinaComodRivadavia Timezone = "America/Argentina/ComodRivadavia" + AmericaArgentinaCordoba Timezone = "America/Argentina/Cordoba" + AmericaArgentinaJujuy Timezone = "America/Argentina/Jujuy" + AmericaArgentinaLaRioja Timezone = "America/Argentina/La_Rioja" + AmericaArgentinaMendoza Timezone = "America/Argentina/Mendoza" + AmericaArgentinaRioGallegos Timezone = "America/Argentina/Rio_Gallegos" + AmericaArgentinaSANJuan Timezone = "America/Argentina/San_Juan" + AmericaArgentinaSANLuis Timezone = "America/Argentina/San_Luis" + AmericaArgentinaSalta Timezone = "America/Argentina/Salta" + AmericaArgentinaTucuman Timezone = "America/Argentina/Tucuman" + AmericaArgentinaUshuaia Timezone = "America/Argentina/Ushuaia" + AmericaAruba Timezone = "America/Aruba" + AmericaAsuncion Timezone = "America/Asuncion" + AmericaAtikokan Timezone = "America/Atikokan" + AmericaAtka Timezone = "America/Atka" + AmericaBahia Timezone = "America/Bahia" + AmericaBahiaBanderas Timezone = "America/Bahia_Banderas" + AmericaBarbados Timezone = "America/Barbados" + AmericaBelem Timezone = "America/Belem" + AmericaBelize Timezone = "America/Belize" + AmericaBlancSablon Timezone = "America/Blanc-Sablon" + AmericaBoaVista Timezone = "America/Boa_Vista" + AmericaBogota Timezone = "America/Bogota" + AmericaBoise Timezone = "America/Boise" + AmericaBuenosAires Timezone = "America/Buenos_Aires" + AmericaCambridgeBay Timezone = "America/Cambridge_Bay" + AmericaCampoGrande Timezone = "America/Campo_Grande" + AmericaCancun Timezone = "America/Cancun" + AmericaCaracas Timezone = "America/Caracas" + AmericaCatamarca Timezone = "America/Catamarca" + AmericaCayenne Timezone = "America/Cayenne" + AmericaCayman Timezone = "America/Cayman" + AmericaChicago Timezone = "America/Chicago" + AmericaChihuahua Timezone = "America/Chihuahua" + AmericaCiudadJuarez Timezone = "America/Ciudad_Juarez" + AmericaCoralHarbour Timezone = "America/Coral_Harbour" + AmericaCordoba Timezone = "America/Cordoba" + AmericaCostaRica Timezone = "America/Costa_Rica" + AmericaCreston Timezone = "America/Creston" + AmericaCuiaba Timezone = "America/Cuiaba" + AmericaCuracao Timezone = "America/Curacao" + AmericaDanmarkshavn Timezone = "America/Danmarkshavn" + AmericaDawson Timezone = "America/Dawson" + AmericaDawsonCreek Timezone = "America/Dawson_Creek" + AmericaDenver Timezone = "America/Denver" + AmericaDetroit Timezone = "America/Detroit" + AmericaDominica Timezone = "America/Dominica" + AmericaEdmonton Timezone = "America/Edmonton" + AmericaEirunepe Timezone = "America/Eirunepe" + AmericaElSalvador Timezone = "America/El_Salvador" + AmericaEnsenada Timezone = "America/Ensenada" + AmericaFortNelson Timezone = "America/Fort_Nelson" + AmericaFortWayne Timezone = "America/Fort_Wayne" + AmericaFortaleza Timezone = "America/Fortaleza" + AmericaGlaceBay Timezone = "America/Glace_Bay" + AmericaGodthab Timezone = "America/Godthab" + AmericaGooseBay Timezone = "America/Goose_Bay" + AmericaGrandTurk Timezone = "America/Grand_Turk" + AmericaGrenada Timezone = "America/Grenada" + AmericaGuadeloupe Timezone = "America/Guadeloupe" + AmericaGuatemala Timezone = "America/Guatemala" + AmericaGuayaquil Timezone = "America/Guayaquil" + AmericaGuyana Timezone = "America/Guyana" + AmericaHalifax Timezone = "America/Halifax" + AmericaHavana Timezone = "America/Havana" + AmericaHermosillo Timezone = "America/Hermosillo" + AmericaIndianaIndianapolis Timezone = "America/Indiana/Indianapolis" + AmericaIndianaKnox Timezone = "America/Indiana/Knox" + AmericaIndianaMarengo Timezone = "America/Indiana/Marengo" + AmericaIndianaPetersburg Timezone = "America/Indiana/Petersburg" + AmericaIndianaTellCity Timezone = "America/Indiana/Tell_City" + AmericaIndianaVevay Timezone = "America/Indiana/Vevay" + AmericaIndianaVincennes Timezone = "America/Indiana/Vincennes" + AmericaIndianaWinamac Timezone = "America/Indiana/Winamac" + AmericaIndianapolis Timezone = "America/Indianapolis" + AmericaInuvik Timezone = "America/Inuvik" + AmericaIqaluit Timezone = "America/Iqaluit" + AmericaJamaica Timezone = "America/Jamaica" + AmericaJujuy Timezone = "America/Jujuy" + AmericaJuneau Timezone = "America/Juneau" + AmericaKentuckyLouisville Timezone = "America/Kentucky/Louisville" + AmericaKentuckyMonticello Timezone = "America/Kentucky/Monticello" + AmericaKnoxIN Timezone = "America/Knox_IN" + AmericaKralendijk Timezone = "America/Kralendijk" + AmericaLaPaz Timezone = "America/La_Paz" + AmericaLima Timezone = "America/Lima" + AmericaLosAngeles Timezone = "America/Los_Angeles" + AmericaLouisville Timezone = "America/Louisville" + AmericaLowerPrinces Timezone = "America/Lower_Princes" + AmericaMaceio Timezone = "America/Maceio" + AmericaManagua Timezone = "America/Managua" + AmericaManaus Timezone = "America/Manaus" + AmericaMarigot Timezone = "America/Marigot" + AmericaMartinique Timezone = "America/Martinique" + AmericaMatamoros Timezone = "America/Matamoros" + AmericaMazatlan Timezone = "America/Mazatlan" + AmericaMendoza Timezone = "America/Mendoza" + AmericaMenominee Timezone = "America/Menominee" + AmericaMerida Timezone = "America/Merida" + AmericaMetlakatla Timezone = "America/Metlakatla" + AmericaMexicoCity Timezone = "America/Mexico_City" + AmericaMiquelon Timezone = "America/Miquelon" + AmericaMoncton Timezone = "America/Moncton" + AmericaMonterrey Timezone = "America/Monterrey" + AmericaMontevideo Timezone = "America/Montevideo" + AmericaMontreal Timezone = "America/Montreal" + AmericaMontserrat Timezone = "America/Montserrat" + AmericaNassau Timezone = "America/Nassau" + AmericaNewYork Timezone = "America/New_York" + AmericaNipigon Timezone = "America/Nipigon" + AmericaNome Timezone = "America/Nome" + AmericaNoronha Timezone = "America/Noronha" + AmericaNorthDakotaBeulah Timezone = "America/North_Dakota/Beulah" + AmericaNorthDakotaCenter Timezone = "America/North_Dakota/Center" + AmericaNorthDakotaNewSalem Timezone = "America/North_Dakota/New_Salem" + AmericaNuuk Timezone = "America/Nuuk" + AmericaOjinaga Timezone = "America/Ojinaga" + AmericaPanama Timezone = "America/Panama" + AmericaPangnirtung Timezone = "America/Pangnirtung" + AmericaParamaribo Timezone = "America/Paramaribo" + AmericaPhoenix Timezone = "America/Phoenix" + AmericaPortAuPrince Timezone = "America/Port-au-Prince" + AmericaPortOfSpain Timezone = "America/Port_of_Spain" + AmericaPortoAcre Timezone = "America/Porto_Acre" + AmericaPortoVelho Timezone = "America/Porto_Velho" + AmericaPuertoRico Timezone = "America/Puerto_Rico" + AmericaPuntaArenas Timezone = "America/Punta_Arenas" + AmericaRainyRiver Timezone = "America/Rainy_River" + AmericaRankinInlet Timezone = "America/Rankin_Inlet" + AmericaRecife Timezone = "America/Recife" + AmericaRegina Timezone = "America/Regina" + AmericaResolute Timezone = "America/Resolute" + AmericaRioBranco Timezone = "America/Rio_Branco" + AmericaRosario Timezone = "America/Rosario" + AmericaSantaIsabel Timezone = "America/Santa_Isabel" + AmericaSantarem Timezone = "America/Santarem" + AmericaSantiago Timezone = "America/Santiago" + AmericaSantoDomingo Timezone = "America/Santo_Domingo" + AmericaSaoPaulo Timezone = "America/Sao_Paulo" + AmericaScoresbysund Timezone = "America/Scoresbysund" + AmericaShiprock Timezone = "America/Shiprock" + AmericaSitka Timezone = "America/Sitka" + AmericaStBarthelemy Timezone = "America/St_Barthelemy" + AmericaStJohns Timezone = "America/St_Johns" + AmericaStKitts Timezone = "America/St_Kitts" + AmericaStLucia Timezone = "America/St_Lucia" + AmericaStThomas Timezone = "America/St_Thomas" + AmericaStVincent Timezone = "America/St_Vincent" + AmericaSwiftCurrent Timezone = "America/Swift_Current" + AmericaTegucigalpa Timezone = "America/Tegucigalpa" + AmericaThule Timezone = "America/Thule" + AmericaThunderBay Timezone = "America/Thunder_Bay" + AmericaTijuana Timezone = "America/Tijuana" + AmericaToronto Timezone = "America/Toronto" + AmericaTortola Timezone = "America/Tortola" + AmericaVancouver Timezone = "America/Vancouver" + AmericaVirgin Timezone = "America/Virgin" + AmericaWhitehorse Timezone = "America/Whitehorse" + AmericaWinnipeg Timezone = "America/Winnipeg" + AmericaYakutat Timezone = "America/Yakutat" + AmericaYellowknife Timezone = "America/Yellowknife" + AntarcticaCasey Timezone = "Antarctica/Casey" + AntarcticaDavis Timezone = "Antarctica/Davis" + AntarcticaDumontDUrville Timezone = "Antarctica/DumontDUrville" + AntarcticaMacquarie Timezone = "Antarctica/Macquarie" + AntarcticaMawson Timezone = "Antarctica/Mawson" + AntarcticaMcMurdo Timezone = "Antarctica/McMurdo" + AntarcticaPalmer Timezone = "Antarctica/Palmer" + AntarcticaRothera Timezone = "Antarctica/Rothera" + AntarcticaSouthPole Timezone = "Antarctica/South_Pole" + AntarcticaSyowa Timezone = "Antarctica/Syowa" + AntarcticaTroll Timezone = "Antarctica/Troll" + AntarcticaVostok Timezone = "Antarctica/Vostok" + ArcticLongyearbyen Timezone = "Arctic/Longyearbyen" + AsiaAden Timezone = "Asia/Aden" + AsiaAlmaty Timezone = "Asia/Almaty" + AsiaAmman Timezone = "Asia/Amman" + AsiaAnadyr Timezone = "Asia/Anadyr" + AsiaAqtau Timezone = "Asia/Aqtau" + AsiaAqtobe Timezone = "Asia/Aqtobe" + AsiaAshgabat Timezone = "Asia/Ashgabat" + AsiaAshkhabad Timezone = "Asia/Ashkhabad" + AsiaAtyrau Timezone = "Asia/Atyrau" + AsiaBaghdad Timezone = "Asia/Baghdad" + AsiaBahrain Timezone = "Asia/Bahrain" + AsiaBaku Timezone = "Asia/Baku" + AsiaBangkok Timezone = "Asia/Bangkok" + AsiaBarnaul Timezone = "Asia/Barnaul" + AsiaBeirut Timezone = "Asia/Beirut" + AsiaBishkek Timezone = "Asia/Bishkek" + AsiaBrunei Timezone = "Asia/Brunei" + AsiaCalcutta Timezone = "Asia/Calcutta" + AsiaChita Timezone = "Asia/Chita" + AsiaChoibalsan Timezone = "Asia/Choibalsan" + AsiaChongqing Timezone = "Asia/Chongqing" + AsiaChungking Timezone = "Asia/Chungking" + AsiaColombo Timezone = "Asia/Colombo" + AsiaDacca Timezone = "Asia/Dacca" + AsiaDamascus Timezone = "Asia/Damascus" + AsiaDhaka Timezone = "Asia/Dhaka" + AsiaDili Timezone = "Asia/Dili" + AsiaDubai Timezone = "Asia/Dubai" + AsiaDushanbe Timezone = "Asia/Dushanbe" + AsiaFamagusta Timezone = "Asia/Famagusta" + AsiaGaza Timezone = "Asia/Gaza" + AsiaHarbin Timezone = "Asia/Harbin" + AsiaHebron Timezone = "Asia/Hebron" + AsiaHoChiMinh Timezone = "Asia/Ho_Chi_Minh" + AsiaHongKong Timezone = "Asia/Hong_Kong" + AsiaHovd Timezone = "Asia/Hovd" + AsiaIrkutsk Timezone = "Asia/Irkutsk" + AsiaIstanbul Timezone = "Asia/Istanbul" + AsiaJakarta Timezone = "Asia/Jakarta" + AsiaJayapura Timezone = "Asia/Jayapura" + AsiaJerusalem Timezone = "Asia/Jerusalem" + AsiaKabul Timezone = "Asia/Kabul" + AsiaKamchatka Timezone = "Asia/Kamchatka" + AsiaKarachi Timezone = "Asia/Karachi" + AsiaKashgar Timezone = "Asia/Kashgar" + AsiaKathmandu Timezone = "Asia/Kathmandu" + AsiaKatmandu Timezone = "Asia/Katmandu" + AsiaKhandyga Timezone = "Asia/Khandyga" + AsiaKolkata Timezone = "Asia/Kolkata" + AsiaKrasnoyarsk Timezone = "Asia/Krasnoyarsk" + AsiaKualaLumpur Timezone = "Asia/Kuala_Lumpur" + AsiaKuching Timezone = "Asia/Kuching" + AsiaKuwait Timezone = "Asia/Kuwait" + AsiaMacao Timezone = "Asia/Macao" + AsiaMacau Timezone = "Asia/Macau" + AsiaMagadan Timezone = "Asia/Magadan" + AsiaMakassar Timezone = "Asia/Makassar" + AsiaManila Timezone = "Asia/Manila" + AsiaMuscat Timezone = "Asia/Muscat" + AsiaNicosia Timezone = "Asia/Nicosia" + AsiaNovokuznetsk Timezone = "Asia/Novokuznetsk" + AsiaNovosibirsk Timezone = "Asia/Novosibirsk" + AsiaOmsk Timezone = "Asia/Omsk" + AsiaOral Timezone = "Asia/Oral" + AsiaPhnomPenh Timezone = "Asia/Phnom_Penh" + AsiaPontianak Timezone = "Asia/Pontianak" + AsiaPyongyang Timezone = "Asia/Pyongyang" + AsiaQatar Timezone = "Asia/Qatar" + AsiaQostanay Timezone = "Asia/Qostanay" + AsiaQyzylorda Timezone = "Asia/Qyzylorda" + AsiaRangoon Timezone = "Asia/Rangoon" + AsiaRiyadh Timezone = "Asia/Riyadh" + AsiaSaigon Timezone = "Asia/Saigon" + AsiaSakhalin Timezone = "Asia/Sakhalin" + AsiaSamarkand Timezone = "Asia/Samarkand" + AsiaSeoul Timezone = "Asia/Seoul" + AsiaShanghai Timezone = "Asia/Shanghai" + AsiaSingapore Timezone = "Asia/Singapore" + AsiaSrednekolymsk Timezone = "Asia/Srednekolymsk" + AsiaTaipei Timezone = "Asia/Taipei" + AsiaTashkent Timezone = "Asia/Tashkent" + AsiaTbilisi Timezone = "Asia/Tbilisi" + AsiaTehran Timezone = "Asia/Tehran" + AsiaTelAviv Timezone = "Asia/Tel_Aviv" + AsiaThimbu Timezone = "Asia/Thimbu" + AsiaThimphu Timezone = "Asia/Thimphu" + AsiaTokyo Timezone = "Asia/Tokyo" + AsiaTomsk Timezone = "Asia/Tomsk" + AsiaUjungPandang Timezone = "Asia/Ujung_Pandang" + AsiaUlaanbaatar Timezone = "Asia/Ulaanbaatar" + AsiaUlanBator Timezone = "Asia/Ulan_Bator" + AsiaUrumqi Timezone = "Asia/Urumqi" + AsiaUstNera Timezone = "Asia/Ust-Nera" + AsiaVientiane Timezone = "Asia/Vientiane" + AsiaVladivostok Timezone = "Asia/Vladivostok" + AsiaYakutsk Timezone = "Asia/Yakutsk" + AsiaYangon Timezone = "Asia/Yangon" + AsiaYekaterinburg Timezone = "Asia/Yekaterinburg" + AsiaYerevan Timezone = "Asia/Yerevan" + AtlanticAzores Timezone = "Atlantic/Azores" + AtlanticBermuda Timezone = "Atlantic/Bermuda" + AtlanticCanary Timezone = "Atlantic/Canary" + AtlanticCapeVerde Timezone = "Atlantic/Cape_Verde" + AtlanticFaeroe Timezone = "Atlantic/Faeroe" + AtlanticFaroe Timezone = "Atlantic/Faroe" + AtlanticJanMayen Timezone = "Atlantic/Jan_Mayen" + AtlanticMadeira Timezone = "Atlantic/Madeira" + AtlanticReykjavik Timezone = "Atlantic/Reykjavik" + AtlanticSouthGeorgia Timezone = "Atlantic/South_Georgia" + AtlanticStHelena Timezone = "Atlantic/St_Helena" + AtlanticStanley Timezone = "Atlantic/Stanley" + AustraliaACT Timezone = "Australia/ACT" + AustraliaAdelaide Timezone = "Australia/Adelaide" + AustraliaBrisbane Timezone = "Australia/Brisbane" + AustraliaBrokenHill Timezone = "Australia/Broken_Hill" + AustraliaCanberra Timezone = "Australia/Canberra" + AustraliaCurrie Timezone = "Australia/Currie" + AustraliaDarwin Timezone = "Australia/Darwin" + AustraliaEucla Timezone = "Australia/Eucla" + AustraliaHobart Timezone = "Australia/Hobart" + AustraliaLHI Timezone = "Australia/LHI" + AustraliaLindeman Timezone = "Australia/Lindeman" + AustraliaLordHowe Timezone = "Australia/Lord_Howe" + AustraliaMelbourne Timezone = "Australia/Melbourne" + AustraliaNSW Timezone = "Australia/NSW" + AustraliaNorth Timezone = "Australia/North" + AustraliaPerth Timezone = "Australia/Perth" + AustraliaQueensland Timezone = "Australia/Queensland" + AustraliaSouth Timezone = "Australia/South" + AustraliaSydney Timezone = "Australia/Sydney" + AustraliaTasmania Timezone = "Australia/Tasmania" + AustraliaVictoria Timezone = "Australia/Victoria" + AustraliaWest Timezone = "Australia/West" + AustraliaYancowinna Timezone = "Australia/Yancowinna" + BrazilAcre Timezone = "Brazil/Acre" + BrazilDeNoronha Timezone = "Brazil/DeNoronha" + BrazilEast Timezone = "Brazil/East" + BrazilWest Timezone = "Brazil/West" + CanadaAtlantic Timezone = "Canada/Atlantic" + CanadaCentral Timezone = "Canada/Central" + CanadaEastern Timezone = "Canada/Eastern" + CanadaMountain Timezone = "Canada/Mountain" + CanadaNewfoundland Timezone = "Canada/Newfoundland" + CanadaPacific Timezone = "Canada/Pacific" + CanadaSaskatchewan Timezone = "Canada/Saskatchewan" + CanadaYukon Timezone = "Canada/Yukon" + Cet Timezone = "CET" + ChileContinental Timezone = "Chile/Continental" + ChileEasterIsland Timezone = "Chile/EasterIsland" + Cst6Cdt Timezone = "CST6CDT" + Cuba Timezone = "Cuba" + Eet Timezone = "EET" + Egypt Timezone = "Egypt" + Eire Timezone = "Eire" + Est Timezone = "EST" + Est5Edt Timezone = "EST5EDT" + EtcGMT Timezone = "Etc/GMT" + EtcGMT0 Timezone = "Etc/GMT+0" + EtcGMT1 Timezone = "Etc/GMT+1" + EtcGMT10 Timezone = "Etc/GMT+10" + EtcGMT11 Timezone = "Etc/GMT+11" + EtcGMT12 Timezone = "Etc/GMT+12" + EtcGMT13 Timezone = "Etc/GMT-13" + EtcGMT14 Timezone = "Etc/GMT-14" + EtcGMT2 Timezone = "Etc/GMT+2" + EtcGMT3 Timezone = "Etc/GMT+3" + EtcGMT4 Timezone = "Etc/GMT+4" + EtcGMT5 Timezone = "Etc/GMT+5" + EtcGMT6 Timezone = "Etc/GMT+6" + EtcGMT7 Timezone = "Etc/GMT+7" + EtcGMT8 Timezone = "Etc/GMT+8" + EtcGMT9 Timezone = "Etc/GMT+9" + EtcGreenwich Timezone = "Etc/Greenwich" + EtcUCT Timezone = "Etc/UCT" + EtcUTC Timezone = "Etc/UTC" + EtcUniversal Timezone = "Etc/Universal" + EtcZulu Timezone = "Etc/Zulu" + EuropeAmsterdam Timezone = "Europe/Amsterdam" + EuropeAndorra Timezone = "Europe/Andorra" + EuropeAstrakhan Timezone = "Europe/Astrakhan" + EuropeAthens Timezone = "Europe/Athens" + EuropeBelfast Timezone = "Europe/Belfast" + EuropeBelgrade Timezone = "Europe/Belgrade" + EuropeBerlin Timezone = "Europe/Berlin" + EuropeBratislava Timezone = "Europe/Bratislava" + EuropeBrussels Timezone = "Europe/Brussels" + EuropeBucharest Timezone = "Europe/Bucharest" + EuropeBudapest Timezone = "Europe/Budapest" + EuropeBusingen Timezone = "Europe/Busingen" + EuropeChisinau Timezone = "Europe/Chisinau" + EuropeCopenhagen Timezone = "Europe/Copenhagen" + EuropeDublin Timezone = "Europe/Dublin" + EuropeGibraltar Timezone = "Europe/Gibraltar" + EuropeGuernsey Timezone = "Europe/Guernsey" + EuropeHelsinki Timezone = "Europe/Helsinki" + EuropeIsleOfMan Timezone = "Europe/Isle_of_Man" + EuropeIstanbul Timezone = "Europe/Istanbul" + EuropeJersey Timezone = "Europe/Jersey" + EuropeKaliningrad Timezone = "Europe/Kaliningrad" + EuropeKiev Timezone = "Europe/Kiev" + EuropeKirov Timezone = "Europe/Kirov" + EuropeKyiv Timezone = "Europe/Kyiv" + EuropeLisbon Timezone = "Europe/Lisbon" + EuropeLjubljana Timezone = "Europe/Ljubljana" + EuropeLondon Timezone = "Europe/London" + EuropeLuxembourg Timezone = "Europe/Luxembourg" + EuropeMadrid Timezone = "Europe/Madrid" + EuropeMalta Timezone = "Europe/Malta" + EuropeMariehamn Timezone = "Europe/Mariehamn" + EuropeMinsk Timezone = "Europe/Minsk" + EuropeMonaco Timezone = "Europe/Monaco" + EuropeMoscow Timezone = "Europe/Moscow" + EuropeNicosia Timezone = "Europe/Nicosia" + EuropeOslo Timezone = "Europe/Oslo" + EuropeParis Timezone = "Europe/Paris" + EuropePodgorica Timezone = "Europe/Podgorica" + EuropePrague Timezone = "Europe/Prague" + EuropeRiga Timezone = "Europe/Riga" + EuropeRome Timezone = "Europe/Rome" + EuropeSANMarino Timezone = "Europe/San_Marino" + EuropeSamara Timezone = "Europe/Samara" + EuropeSarajevo Timezone = "Europe/Sarajevo" + EuropeSaratov Timezone = "Europe/Saratov" + EuropeSimferopol Timezone = "Europe/Simferopol" + EuropeSkopje Timezone = "Europe/Skopje" + EuropeSofia Timezone = "Europe/Sofia" + EuropeStockholm Timezone = "Europe/Stockholm" + EuropeTallinn Timezone = "Europe/Tallinn" + EuropeTirane Timezone = "Europe/Tirane" + EuropeTiraspol Timezone = "Europe/Tiraspol" + EuropeUlyanovsk Timezone = "Europe/Ulyanovsk" + EuropeUzhgorod Timezone = "Europe/Uzhgorod" + EuropeVaduz Timezone = "Europe/Vaduz" + EuropeVatican Timezone = "Europe/Vatican" + EuropeVienna Timezone = "Europe/Vienna" + EuropeVilnius Timezone = "Europe/Vilnius" + EuropeVolgograd Timezone = "Europe/Volgograd" + EuropeWarsaw Timezone = "Europe/Warsaw" + EuropeZagreb Timezone = "Europe/Zagreb" + EuropeZaporozhye Timezone = "Europe/Zaporozhye" + EuropeZurich Timezone = "Europe/Zurich" + Factory Timezone = "Factory" + GB Timezone = "GB" + GBEire Timezone = "GB-Eire" + Gmt Timezone = "GMT" + Gmt0 Timezone = "GMT+0" + Greenwich Timezone = "Greenwich" + Hongkong Timezone = "Hongkong" + Hst Timezone = "HST" + Iceland Timezone = "Iceland" + IndianAntananarivo Timezone = "Indian/Antananarivo" + IndianChagos Timezone = "Indian/Chagos" + IndianChristmas Timezone = "Indian/Christmas" + IndianCocos Timezone = "Indian/Cocos" + IndianComoro Timezone = "Indian/Comoro" + IndianKerguelen Timezone = "Indian/Kerguelen" + IndianMahe Timezone = "Indian/Mahe" + IndianMaldives Timezone = "Indian/Maldives" + IndianMauritius Timezone = "Indian/Mauritius" + IndianMayotte Timezone = "Indian/Mayotte" + IndianReunion Timezone = "Indian/Reunion" + Iran Timezone = "Iran" + Israel Timezone = "Israel" + Jamaica Timezone = "Jamaica" + Japan Timezone = "Japan" + Kwajalein Timezone = "Kwajalein" + Libya Timezone = "Libya" + Met Timezone = "MET" + MexicoBajaNorte Timezone = "Mexico/BajaNorte" + MexicoBajaSur Timezone = "Mexico/BajaSur" + MexicoGeneral Timezone = "Mexico/General" + Mst Timezone = "MST" + Mst7Mdt Timezone = "MST7MDT" + Navajo Timezone = "Navajo" + Nz Timezone = "NZ" + NzChat Timezone = "NZ-CHAT" + PacificApia Timezone = "Pacific/Apia" + PacificAuckland Timezone = "Pacific/Auckland" + PacificBougainville Timezone = "Pacific/Bougainville" + PacificChatham Timezone = "Pacific/Chatham" + PacificChuuk Timezone = "Pacific/Chuuk" + PacificEaster Timezone = "Pacific/Easter" + PacificEfate Timezone = "Pacific/Efate" + PacificEnderbury Timezone = "Pacific/Enderbury" + PacificFakaofo Timezone = "Pacific/Fakaofo" + PacificFiji Timezone = "Pacific/Fiji" + PacificFunafuti Timezone = "Pacific/Funafuti" + PacificGalapagos Timezone = "Pacific/Galapagos" + PacificGambier Timezone = "Pacific/Gambier" + PacificGuadalcanal Timezone = "Pacific/Guadalcanal" + PacificGuam Timezone = "Pacific/Guam" + PacificHonolulu Timezone = "Pacific/Honolulu" + PacificJohnston Timezone = "Pacific/Johnston" + PacificKanton Timezone = "Pacific/Kanton" + PacificKiritimati Timezone = "Pacific/Kiritimati" + PacificKosrae Timezone = "Pacific/Kosrae" + PacificKwajalein Timezone = "Pacific/Kwajalein" + PacificMajuro Timezone = "Pacific/Majuro" + PacificMarquesas Timezone = "Pacific/Marquesas" + PacificMidway Timezone = "Pacific/Midway" + PacificNauru Timezone = "Pacific/Nauru" + PacificNiue Timezone = "Pacific/Niue" + PacificNorfolk Timezone = "Pacific/Norfolk" + PacificNoumea Timezone = "Pacific/Noumea" + PacificPagoPago Timezone = "Pacific/Pago_Pago" + PacificPalau Timezone = "Pacific/Palau" + PacificPitcairn Timezone = "Pacific/Pitcairn" + PacificPohnpei Timezone = "Pacific/Pohnpei" + PacificPonape Timezone = "Pacific/Ponape" + PacificPortMoresby Timezone = "Pacific/Port_Moresby" + PacificRarotonga Timezone = "Pacific/Rarotonga" + PacificSaipan Timezone = "Pacific/Saipan" + PacificSamoa Timezone = "Pacific/Samoa" + PacificTahiti Timezone = "Pacific/Tahiti" + PacificTarawa Timezone = "Pacific/Tarawa" + PacificTongatapu Timezone = "Pacific/Tongatapu" + PacificTruk Timezone = "Pacific/Truk" + PacificWake Timezone = "Pacific/Wake" + PacificWallis Timezone = "Pacific/Wallis" + PacificYap Timezone = "Pacific/Yap" + Poland Timezone = "Poland" + Portugal Timezone = "Portugal" + Prc Timezone = "PRC" + Pst8Pdt Timezone = "PST8PDT" + PurpleEtcGMT0 Timezone = "Etc/GMT0" + PurpleGMT0 Timezone = "GMT0" + Roc Timezone = "ROC" + Rok Timezone = "ROK" + Singapore Timezone = "Singapore" + TimezoneEtcGMT0 Timezone = "Etc/GMT-0" + TimezoneEtcGMT1 Timezone = "Etc/GMT-1" + TimezoneEtcGMT10 Timezone = "Etc/GMT-10" + TimezoneEtcGMT11 Timezone = "Etc/GMT-11" + TimezoneEtcGMT12 Timezone = "Etc/GMT-12" + TimezoneEtcGMT2 Timezone = "Etc/GMT-2" + TimezoneEtcGMT3 Timezone = "Etc/GMT-3" + TimezoneEtcGMT4 Timezone = "Etc/GMT-4" + TimezoneEtcGMT5 Timezone = "Etc/GMT-5" + TimezoneEtcGMT6 Timezone = "Etc/GMT-6" + TimezoneEtcGMT7 Timezone = "Etc/GMT-7" + TimezoneEtcGMT8 Timezone = "Etc/GMT-8" + TimezoneEtcGMT9 Timezone = "Etc/GMT-9" + TimezoneGMT0 Timezone = "GMT-0" + Turkey Timezone = "Turkey" + USAlaska Timezone = "US/Alaska" + USAleutian Timezone = "US/Aleutian" + USArizona Timezone = "US/Arizona" + USCentral Timezone = "US/Central" + USEastIndiana Timezone = "US/East-Indiana" + USEastern Timezone = "US/Eastern" + USHawaii Timezone = "US/Hawaii" + USIndianaStarke Timezone = "US/Indiana-Starke" + USMichigan Timezone = "US/Michigan" + USMountain Timezone = "US/Mountain" + USPacific Timezone = "US/Pacific" + USSamoa Timezone = "US/Samoa" + UTC Timezone = "UTC" + Uct Timezone = "UCT" + Universal Timezone = "Universal" + WSu Timezone = "W-SU" + Wet Timezone = "WET" + Zulu Timezone = "Zulu" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/system_pricing_plans/system_pricing_plans.go b/models/golang/v3.1-RC2/system_pricing_plans/system_pricing_plans.go new file mode 100644 index 0000000..3bed3d6 --- /dev/null +++ b/models/golang/v3.1-RC2/system_pricing_plans/system_pricing_plans.go @@ -0,0 +1,144 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// systemPricingPlans, err := UnmarshalSystemPricingPlans(bytes) +// bytes, err = systemPricingPlans.Marshal() + +package system_pricing_plans + + + +import "encoding/json" + +func UnmarshalSystemPricingPlans(data []byte) (SystemPricingPlans, error) { + var r SystemPricingPlans + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *SystemPricingPlans) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes the pricing schemes of the system. +type SystemPricingPlans struct { + // Array that contains one object per plan as defined below. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Array that contains one object per plan as defined below. +type Data struct { + Plans []Plan `json:"plans"` +} + +type Plan struct { + // Currency used to pay the fare in ISO 4217 code. + Currency string `json:"currency"` + // Customer-readable description of the pricing plan. + Description []Description `json:"description"` + // Object defining a capped fare once a price threshold has been spent within a timeframe. + // (added in v3.1-RC2) + FareCapping *FareCapping `json:"fare_capping,omitempty"` + // Will additional tax be added to the base price? + IsTaxable bool `json:"is_taxable"` + // Name of this pricing plan. + Name []Name `json:"name"` + // Array of segments when the price is a function of distance travelled, displayed in + // kilometers (added in v2.1-RC2). + PerKMPricing []PerKMPricing `json:"per_km_pricing,omitempty"` + // Array of segments when the price is a function of time travelled, displayed in minutes + // (added in v2.1-RC2). + PerMinPricing []PerMinPricing `json:"per_min_pricing,omitempty"` + // Identifier of a pricing plan in the system. + PlanID string `json:"plan_id"` + // Fare price. + Price float64 `json:"price"` + // The cost, described as a flat rate, to reserve the vehicle prior to beginning a rental. + ReservationPriceFlatRate *float64 `json:"reservation_price_flat_rate,omitempty"` + // The cost, described as per minute rate, to reserve the vehicle prior to beginning a + // rental. + ReservationPricePerMin *float64 `json:"reservation_price_per_min,omitempty"` + // Is there currently an increase in price in response to increased demand in this pricing + // plan? (added in v2.1-RC2) + SurgePricing *bool `json:"surge_pricing,omitempty"` + // URL where the customer can learn more about this pricing plan. + URL *string `json:"url,omitempty"` +} + +type Description struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// Object defining a capped fare once a price threshold has been spent within a timeframe. +// (added in v3.1-RC2) +type FareCapping struct { + // Amount of time in minutes during which the fare is capped. + Duration int64 `json:"duration"` + // The maximum fare threshold for the current timeframe, in the unit specified by currency + Price float64 `json:"price"` +} + +type Name struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type PerKMPricing struct { + // The kilometer at which the rate will no longer apply (added in v2.1-RC2). + End *int64 `json:"end,omitempty"` + // Interval in kilometers at which the rate of this segment is either reapplied + // indefinitely, or if defined, up until (but not including) end kilometer (added in + // v2.1-RC2). + Interval int64 `json:"interval"` + // Rate that is charged for each kilometer interval after the start (added in v2.1-RC2). + Rate float64 `json:"rate"` + // Number of kilometers that have to elapse before this segment starts applying (added in + // v2.1-RC2). + Start int64 `json:"start"` +} + +type PerMinPricing struct { + // The minute at which the rate will no longer apply (added in v2.1-RC2). + End *int64 `json:"end,omitempty"` + // Interval in minutes at which the rate of this segment is either reapplied (added in + // v2.1-RC2). + Interval int64 `json:"interval"` + // Rate that is charged for each minute interval after the start (added in v2.1-RC2). + Rate float64 `json:"rate"` + // Number of minutes that have to elapse before this segment starts applying (added in + // v2.1-RC2). + Start int64 `json:"start"` +} + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/system_regions/system_regions.go b/models/golang/v3.1-RC2/system_regions/system_regions.go new file mode 100644 index 0000000..4ee8906 --- /dev/null +++ b/models/golang/v3.1-RC2/system_regions/system_regions.go @@ -0,0 +1,75 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// systemRegions, err := UnmarshalSystemRegions(bytes) +// bytes, err = systemRegions.Marshal() + +package system_regions + + + +import "encoding/json" + +func UnmarshalSystemRegions(data []byte) (SystemRegions, error) { + var r SystemRegions + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *SystemRegions) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes regions for a system that is broken up by geographic or political region. +type SystemRegions struct { + // Describe regions for a system that is broken up by geographic or political region. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Describe regions for a system that is broken up by geographic or political region. +type Data struct { + // Array of regions. + Regions []Region `json:"regions"` +} + +type Region struct { + // Public name for this region. + Name []Name `json:"name"` + // identifier of the region. + RegionID string `json:"region_id"` +} + +type Name struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/vehicle_availability/vehicle_availability.go b/models/golang/v3.1-RC2/vehicle_availability/vehicle_availability.go new file mode 100644 index 0000000..3dd9b75 --- /dev/null +++ b/models/golang/v3.1-RC2/vehicle_availability/vehicle_availability.go @@ -0,0 +1,81 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// vehicleAvailability, err := UnmarshalVehicleAvailability(bytes) +// bytes, err = vehicleAvailability.Marshal() + +package vehicle_availability + + + +import "encoding/json" + +func UnmarshalVehicleAvailability(data []byte) (VehicleAvailability, error) { + var r VehicleAvailability + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *VehicleAvailability) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes the vehicle availabilities of the system. +type VehicleAvailability struct { + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +type Data struct { + // Contains one object per vehicle. + Vehicles []Vehicle `json:"vehicles"` +} + +type Vehicle struct { + // Array of time slots during which the specified vehicle is available. + Availabilities []Availability `json:"availabilities"` + // The plan_id of the pricing plan this vehicle is eligible for + PricingPlanID *string `json:"pricing_plan_id,omitempty"` + // The id of the station where this vehicle is located when available + StationID string `json:"station_id"` + // List of vehicle equipment provided by the operator + VehicleEquipment []string `json:"vehicle_equipment,omitempty"` + // Identifier of a vehicle + VehicleID string `json:"vehicle_id"` + // Unique identifier of a vehicle type as defined in vehicle_types.json + VehicleTypeID string `json:"vehicle_type_id"` +} + +type Availability struct { + // Start date and time of available time slot. + From string `json:"from"` + // End date and time of available time slot. + Until *string `json:"until,omitempty"` +} + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/vehicle_status/vehicle_status.go b/models/golang/v3.1-RC2/vehicle_status/vehicle_status.go new file mode 100644 index 0000000..291d603 --- /dev/null +++ b/models/golang/v3.1-RC2/vehicle_status/vehicle_status.go @@ -0,0 +1,122 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// vehicleStatus, err := UnmarshalVehicleStatus(bytes) +// bytes, err = vehicleStatus.Marshal() + +package vehicle_status + + + +import "encoding/json" + +func UnmarshalVehicleStatus(data []byte) (VehicleStatus, error) { + var r VehicleStatus + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *VehicleStatus) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes the vehicles that are available for rent (as of v3.0, formerly +// free_bike_status). +type VehicleStatus struct { + // Array that contains one object per vehicle as defined below. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework + // (added in v1.1). + Version Version `json:"version"` +} + +// Array that contains one object per vehicle as defined below. +type Data struct { + Vehicles []Vehicle `json:"vehicles"` +} + +type Vehicle struct { + // The date and time when any rental of the vehicle must be completed. Added in v2.3. + AvailableUntil *string `json:"available_until,omitempty"` + // This value represents the current percentage, expressed from 0 to 1, of fuel or battery + // power remaining in the vehicle. Added in v2.3-RC. + CurrentFuelPercent *float64 `json:"current_fuel_percent,omitempty"` + // The furthest distance in meters that the vehicle can travel without recharging or + // refueling with the vehicle's current charge or fuel (added in v2.1-RC). + CurrentRangeMeters *float64 `json:"current_range_meters,omitempty"` + // The station_id of the station this vehicle must be returned to (added in v2.3-RC). + HomeStationID *string `json:"home_station_id,omitempty"` + // Is the vehicle currently disabled (broken)? + IsDisabled bool `json:"is_disabled"` + // Is the vehicle currently reserved? + IsReserved bool `json:"is_reserved"` + // The last time this vehicle reported its status to the operator's backend in RFC3339 + // format (added in v2.1-RC). + LastReported *string `json:"last_reported,omitempty"` + // The latitude of the vehicle. + Lat *float64 `json:"lat,omitempty"` + // The longitude of the vehicle. + Lon *float64 `json:"lon,omitempty"` + // The plan_id of the pricing plan this vehicle is eligible for (added in v2.2). + PricingPlanID *string `json:"pricing_plan_id,omitempty"` + // Contains rental uris for Android, iOS, and web in the android, ios, and web fields (added + // in v1.1). + RentalUris *RentalUris `json:"rental_uris,omitempty"` + // Identifier referencing the station_id if the vehicle is currently at a station (added in + // v2.1-RC2). + StationID *string `json:"station_id,omitempty"` + // List of vehicle equipment provided by the operator in addition to the accessories already + // provided in the vehicle. Added in v2.3. + VehicleEquipment []VehicleEquipment `json:"vehicle_equipment,omitempty"` + // Rotating (as of v2.0) identifier of a vehicle. + VehicleID string `json:"vehicle_id"` + // The vehicle_type_id of this vehicle (added in v2.1-RC). + VehicleTypeID *string `json:"vehicle_type_id,omitempty"` +} + +// Contains rental uris for Android, iOS, and web in the android, ios, and web fields (added +// in v1.1). +type RentalUris struct { + // URI that can be passed to an Android app with an intent (added in v1.1). + Android *string `json:"android,omitempty"` + // URI that can be used on iOS to launch the rental app for this vehicle (added in v1.1). + Ios *string `json:"ios,omitempty"` + // URL that can be used by a web browser to show more information about renting this vehicle + // (added in v1.1). + Web *string `json:"web,omitempty"` +} + +type VehicleEquipment string + +const ( + ChildSeatA VehicleEquipment = "child_seat_a" + ChildSeatB VehicleEquipment = "child_seat_b" + ChildSeatC VehicleEquipment = "child_seat_c" + SnowChains VehicleEquipment = "snow_chains" + WinterTires VehicleEquipment = "winter_tires" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/models/golang/v3.1-RC2/vehicle_types/vehicle_types.go b/models/golang/v3.1-RC2/vehicle_types/vehicle_types.go new file mode 100644 index 0000000..ac6d060 --- /dev/null +++ b/models/golang/v3.1-RC2/vehicle_types/vehicle_types.go @@ -0,0 +1,224 @@ +// Copyright 2025 MobilityData +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated from JSON Schema using quicktype. DO NOT EDIT. +// To parse and unparse this JSON data, add this code to your project and do: +// +// vehicleTypes, err := UnmarshalVehicleTypes(bytes) +// bytes, err = vehicleTypes.Marshal() + +package vehicle_types + + + +import "encoding/json" + +func UnmarshalVehicleTypes(data []byte) (VehicleTypes, error) { + var r VehicleTypes + err := json.Unmarshal(data, &r) + return r, err +} + +func (r *VehicleTypes) Marshal() ([]byte, error) { + return json.Marshal(r) +} + +// Describes the types of vehicles that System operator has available for rent (added in +// v2.1-RC). +type VehicleTypes struct { + // Response data in the form of name:value pairs. + Data Data `json:"data"` + // Last time the data in the feed was updated in RFC3339 format. + LastUpdated string `json:"last_updated"` + // Number of seconds before the data in the feed will be updated again (0 if the data should + // always be refreshed). + TTL int64 `json:"ttl"` + // GBFS version number to which the feed conforms, according to the versioning framework. + Version Version `json:"version"` +} + +// Response data in the form of name:value pairs. +type Data struct { + // Array that contains one object per vehicle type in the system as defined below. + VehicleTypes []VehicleType `json:"vehicle_types"` +} + +type VehicleType struct { + // The capacity of the vehicle cargo space (excluding passengers), expressed in kilograms. + CargoLoadCapacity *int64 `json:"cargo_load_capacity,omitempty"` + // Cargo volume available in the vehicle, expressed in liters. + CargoVolumeCapacity *int64 `json:"cargo_volume_capacity,omitempty"` + // The color of the vehicle. Added in v2.3 + Color *string `json:"color,omitempty"` + // A plan_id as defined in system_pricing_plans.json added in v2.3-RC. + DefaultPricingPlanID *string `json:"default_pricing_plan_id,omitempty"` + // Maximum time in minutes that a vehicle can be reserved before a rental begins added in + // v2.3-RC. + DefaultReserveTime *int64 `json:"default_reserve_time,omitempty"` + // Customer-readable description of the vehicle type outlining special features or how-tos. + // An array with one object per supported language with the following keys: + Description []Description `json:"description,omitempty"` + // Vehicle air quality certificate. added in v2.3. + EcoLabels []EcoLabel `json:"eco_labels,omitempty"` + // The vehicle's general form factor. + FormFactor FormFactor `json:"form_factor"` + // Maximum quantity of CO2, in grams, emitted per kilometer, according to the WLTP. Added in + // v2.3 + GCO2KM *int64 `json:"g_CO2_km,omitempty"` + // The name of the vehicle manufacturer. An array with one object per supported language + // with the following keys: + Make []Make `json:"make,omitempty"` + // The maximum speed in kilometers per hour this vehicle is permitted to reach in accordance + // with local permit and regulations. Added in v2.3 + MaxPermittedSpeed *int64 `json:"max_permitted_speed,omitempty"` + // The furthest distance in meters that the vehicle can travel without recharging or + // refueling when it has the maximum amount of energy potential. + MaxRangeMeters *float64 `json:"max_range_meters,omitempty"` + // The name of the vehicle model. An array with one object per supported language with the + // following keys: + Model []Model `json:"model,omitempty"` + // The public name of this vehicle type. An array with one object per supported language + // with the following keys: + Name []Name `json:"name,omitempty"` + // Array of all pricing plan IDs as defined in system_pricing_plans.json added in v2.3-RC. + PricingPlanIDS []string `json:"pricing_plan_ids,omitempty"` + // The primary propulsion type of the vehicle. Updated in v2.3 to represent car-sharing + PropulsionType PropulsionType `json:"propulsion_type"` + // The rated power of the motor for this vehicle type in watts. Added in v2.3 + RatedPower *int64 `json:"rated_power,omitempty"` + // The conditions for returning the vehicle at the end of the trip. Added in v2.3-RC as + // return_type, and updated to return_constraint in v2.3. + ReturnConstraint *ReturnConstraint `json:"return_constraint,omitempty"` + // The number of riders (driver included) the vehicle can legally accommodate + RiderCapacity *int64 `json:"rider_capacity,omitempty"` + // Description of accessories available in the vehicle. + VehicleAccessories []VehicleAccessory `json:"vehicle_accessories,omitempty"` + // An object where each key defines one of the items listed below added in v2.3-RC. + VehicleAssets *VehicleAssets `json:"vehicle_assets,omitempty"` + // URL to an image that would assist the user in identifying the vehicle. JPEG or PNG. Added + // in v2.3 + VehicleImage *string `json:"vehicle_image,omitempty"` + // Unique identifier of a vehicle type. + VehicleTypeID string `json:"vehicle_type_id"` + // Number of wheels this vehicle type has. Added in v2.3 + WheelCount *int64 `json:"wheel_count,omitempty"` +} + +type Description struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type EcoLabel struct { + // Country code following the ISO 3166-1 alpha-2 notation. Added in v2.3. + CountryCode string `json:"country_code"` + // Name of the eco label. Added in v2.3. + EcoSticker string `json:"eco_sticker"` +} + +type Make struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Model struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +type Name struct { + // IETF BCP 47 language code. + Language string `json:"language"` + // The translated text. + Text string `json:"text"` +} + +// An object where each key defines one of the items listed below added in v2.3-RC. +type VehicleAssets struct { + // Date that indicates the last time any included vehicle icon images were modified or + // updated added in v2.3-RC. + IconLastModified string `json:"icon_last_modified"` + // A fully qualified URL pointing to the location of a graphic icon file that MAY be used to + // represent this vehicle type on maps and in other applications added in v2.3-RC. + IconURL string `json:"icon_url"` + // A fully qualified URL pointing to the location of a graphic icon file to be used to + // represent this vehicle type when in dark mode added in v2.3-RC. + IconURLDark *string `json:"icon_url_dark,omitempty"` +} + +// The vehicle's general form factor. +type FormFactor string + +const ( + Bicycle FormFactor = "bicycle" + Car FormFactor = "car" + CargoBicycle FormFactor = "cargo_bicycle" + Moped FormFactor = "moped" + Other FormFactor = "other" + Scooter FormFactor = "scooter" + ScooterSeated FormFactor = "scooter_seated" + ScooterStanding FormFactor = "scooter_standing" +) + +// The primary propulsion type of the vehicle. Updated in v2.3 to represent car-sharing +type PropulsionType string + +const ( + Combustion PropulsionType = "combustion" + CombustionDiesel PropulsionType = "combustion_diesel" + Electric PropulsionType = "electric" + ElectricAssist PropulsionType = "electric_assist" + Human PropulsionType = "human" + HydrogenFuelCell PropulsionType = "hydrogen_fuel_cell" + PlugInHybrid PropulsionType = "plug_in_hybrid" + PropulsionTypeHybrid PropulsionType = "hybrid" +) + +// The conditions for returning the vehicle at the end of the trip. Added in v2.3-RC as +// return_type, and updated to return_constraint in v2.3. +type ReturnConstraint string + +const ( + AnyStation ReturnConstraint = "any_station" + FreeFloating ReturnConstraint = "free_floating" + ReturnConstraintHybrid ReturnConstraint = "hybrid" + RoundtripStation ReturnConstraint = "roundtrip_station" +) + +type VehicleAccessory string + +const ( + AirConditioning VehicleAccessory = "air_conditioning" + Automatic VehicleAccessory = "automatic" + Convertible VehicleAccessory = "convertible" + CruiseControl VehicleAccessory = "cruise_control" + Doors2 VehicleAccessory = "doors_2" + Doors3 VehicleAccessory = "doors_3" + Doors4 VehicleAccessory = "doors_4" + Doors5 VehicleAccessory = "doors_5" + Manual VehicleAccessory = "manual" + Navigation VehicleAccessory = "navigation" +) + +type Version string + +const ( + The31Rc2 Version = "3.1-RC2" +) diff --git a/scripts/copyright.txt b/scripts/copyright.txt index b4af6e9..a94919a 100644 --- a/scripts/copyright.txt +++ b/scripts/copyright.txt @@ -1,4 +1,4 @@ -// Copyright 2024 MobilityData +// Copyright 2025 MobilityData // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/scripts/generate_go_models.sh b/scripts/generate_go_models.sh index 63268ce..a0bae13 100755 --- a/scripts/generate_go_models.sh +++ b/scripts/generate_go_models.sh @@ -5,14 +5,15 @@ # Using this script can be done as follows: ./scripts/generate_go_models.sh 3.0 # Just make sure to have the gbfs schemas in the correct folder ./vX.X +# The script relative path. This make sure the script can be executed from any folder within the repository. +SCRIPT_PATH="$(dirname -- "${BASH_SOURCE[0]}")" + gbfs_version="v$1" #$1 is the first argument passed to the script (the version number) gbfs_version_no_decimal=$(echo "$1" | tr -d '.' | tr -d -) -parent_dir="$(dirname "$(dirname "$0")")" -folder_path="../$parent_dir/$gbfs_version/" -go_folder="../models/golang/" +folder_path="$SCRIPT_PATH/../$gbfs_version/" +go_folder="$SCRIPT_PATH/../models/golang/" output_path="$go_folder/$gbfs_version/" -test_path="$parent_dir/$gbfs_version/tests/ti/" -copyright_file="$parent_dir/copyright.txt" +copyright_file="$SCRIPT_PATH/copyright.txt" # Iterate over all the files in the folder of the gbfs version for file in "$folder_path"/* diff --git a/testFixtures/v3.1-RC2/vehicle_availability.json b/testFixtures/v3.1-RC2/vehicle_availability.json new file mode 100644 index 0000000..e171001 --- /dev/null +++ b/testFixtures/v3.1-RC2/vehicle_availability.json @@ -0,0 +1,27 @@ +{ + "last_updated": "2025-07-17T13:34:13+02:00", + "ttl": 0, + "version": "3.1-RC2", + "data": { + "vehicles": [ + { + "vehicle_id": "vehicle_id_1", + "vehicle_type_id": "abc123", + "station_id": "pga", + "pricing_plan_id": "plan2", + "vehicle_equipment": [ + "child_seat_a" + ], + "availabilities": [ + { + "from": "2025-05-24T00:00:00+02:00", + "until": "2025-07-24T23:59:00+02:00" + }, + { + "from": "2025-10-25T00:00:00+02:00" + } + ] + } + ] + } +}