Closed thecristen closed 2 months ago
Hi @thecristen can you also show the Elixir module you had which was importing this SDL?
Hello! It happens with this barebones setup:
defmodule OpenTripPlannerClient.Schema do
use Absinthe.Schema
import_sdl __DIR__ |> Path.join("../../../otp-deploy/otp/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls") |> Path.expand() |> File.read!()
end
Same with using import_sdl path: __DIR__ |> Path.join("../../../otp-deploy/otp/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls") |> Path.expand()
And same if I hardcode the whole path name.
So far I've been able to narrow it down a bit after running Absinthe.Phase.Parse.run()
on the contents on my file:
{:ok, #Inspect.Error<
got MatchError with message:
"""
no match of right hand side value: %Absinthe.Blueprint{operations: [], directives: [], fragments: [], name: nil, schema_definitions: [], schema: nil, prototype_schema: nil, adapter: nil, initial_phases: [], telemetry: %{}, flags: %{}, errors: [], input: %Absinthe.Language.Document{definitions: [%Absinthe.Language.DirectiveDefinition{name: "async", description: "Use an asynchronous data fetcher on a separate thread for this field.\n\nThis is useful when adding several queries in the same HTTP request, for example by using a batch: Those\nfields annotated with this directive run in parallel.\n\nThis is only worth it when the execution is long running, i.e. more than ~50 milliseconds, so this doesn't happen by default.", arguments: [], directives: [], locations: [:field_definition], loc: %{line: 9, column: 1}, repeatable: false}, %Absinthe.Language.SchemaDeclaration{description: nil, directives: [], fields: [%Absinthe.Language.FieldDefinition{name: "query", description: nil, arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "QueryType", loc: %{line: 12, column: 12}}, complexity: nil, loc: %{line: 12, column: 5}}], loc: %{line: 11, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "Agency", description: "A public transport agency", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 16, column: 24}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 20, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 20, column: 5}}, %Absinthe.Language.FieldDefinition{name: "gtfsId", description: "Agency feed and id", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 23, column: 13}}, loc: nil}, complexity: nil, loc: %{line: 23, column: 5}}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the agency", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 26, column: 11}}, loc: nil}, complexity: nil, loc: %{line: 26, column: 5}}, %Absinthe.Language.FieldDefinition{name: "url", description: "URL to the home page of the agency", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 29, column: 10}}, loc: nil}, complexity: nil, loc: %{line: 29, column: 5}}, %Absinthe.Language.FieldDefinition{name: "timezone", description: "ID of the time zone which this agency operates on", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 32, column: 15}}, loc: nil}, complexity: nil, loc: %{line: 32, column: 5}}, %Absinthe.Language.FieldDefinition{name: "lang", description: nil, arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 34, column: 11}}, complexity: nil, loc: %{line: 34, column: 5}}, %Absinthe.Language.FieldDefinition{name: "phone", description: "Phone number which customers can use to contact this agency", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 37, column: 12}}, complexity: nil, loc: %{line: 37, column: 5}}, %Absinthe.Language.FieldDefinition{name: "fareUrl", description: "URL to a web page which has information of fares used by this agency", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 40, column: 14}}, complexity: nil, loc: %{line: 40, column: 5}}, %Absinthe.Language.FieldDefinition{name: "routes", description: "List of routes operated by this agency", arguments: [], directives: [], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "Route", loc: %{line: 43, column: 14}}, loc: %{line: 43, column: 13}}, complexity: nil, loc: %{line: 43, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alerts", description: "By default, list of alerts which have an effect on all operations of the agency (e.g. a strike).\nIt's also possible to return other relevant alerts through defining types.", arguments: [%Absinthe.Language.InputValueDefinition{name: "types", type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "AgencyAlertType", loc: %{line: 54, column: 17}}, loc: %{line: 54, column: 16}}, description: "Returns alerts for these types that are relevant for the agency.\nBy default only returns alerts that have an effect on all operations of the agency (e.g. a strike).", default_value: nil, directives: [], loc: %{line: 54, column: 9}}], directives: [], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "Alert", loc: %{line: 55, column: 9}}, loc: %{line: 55, column: 8}}, complexity: nil, loc: %{line: 49, column: 5}}], loc: %{line: 16, column: 1}}, %Absinthe.Language.EnumTypeDefinition{name: "AgencyAlertType", description: "Entities, which are relevant for an agency and can contain alerts", values: [%Absinthe.Language.EnumValueDefinition{value: "AGENCY", description: "Alerts affecting the agency.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ROUTES", description: "Alerts affecting agency's routes", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ROUTE_TYPES", description: "Alerts affecting the different route types of the agency.\nAlerts that affect route types on all agencies can be fetched through Feed.", directives: [], loc: nil}], directives: [], loc: %{line: 59, column: 6}}, %Absinthe.Language.ObjectTypeDefinition{name: "Alert", description: "Alert of a current or upcoming disruption in public transportation", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 74, column: 23}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 78, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 78, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertHash", description: "hashcode from the original GTFS-RT alert", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 81, column: 16}}, complexity: nil, loc: %{line: 81, column: 5}}, %Absinthe.Language.FieldDefinition{name: "feed", description: "The feed in which this alert was published", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 84, column: 11}}, complexity: nil, loc: %{line: 84, column: 5}}, %Absinthe.Language.FieldDefinition{name: "agency", description: "Agency affected by the disruption. Note that this value is present only if the\ndisruption has an effect on all operations of the agency (e.g. in case of a strike).", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{value: "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected agencies.\nUse entities instead.", loc: %{line: 91, column: 8}}, loc: %{line: 90, column: 32}}], loc: %{line: 90, column: 20}}], type: %Absinthe.Language.NamedType{name: "Agency", loc: %{line: 90, column: 13}}, complexity: nil, loc: %{line: 90, column: 5}}, %Absinthe.Language.FieldDefinition{name: "route", description: "Route affected by the disruption", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{value: "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected routes.\nUse entities instead.", loc: %{line: 100, column: 8}}, loc: %{line: 99, column: 30}}], loc: %{line: 99, column: 18}}], type: %Absinthe.Language.NamedType{name: "Route", loc: %{line: 99, column: 12}}, complexity: nil, loc: %{line: 99, column: 5}}, %Absinthe.Language.FieldDefinition{name: "trip", description: "Trip affected by the disruption", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{value: "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected trips.\nUse entities instead.", loc: %{line: 109, column: 8}}, loc: %{line: 108, column: 28}}], loc: %{line: 108, column: 16}}], type: %Absinthe.Language.NamedType{name: "Trip", loc: %{line: 108, column: 11}}, complexity: nil, loc: %{line: 108, column: 5}}, %Absinthe.Language.FieldDefinition{name: "stop", description: "Stop affected by the disruption", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{value: "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected stops.\nUse entities instead.", loc: %{line: 118, column: 8}}, loc: %{line: 117, column: 28}}], loc: %{line: 117, column: 16}}], type: %Absinthe.Language.NamedType{name: "Stop", loc: %{line: 117, column: 11}}, complexity: nil, loc: %{line: 117, column: 5}}, %Absinthe.Language.FieldDefinition{name: "patterns", description: "Patterns affected by the disruption", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{value: "This will always return an empty list. Use entities instead.", loc: %{line: 126, column: 45}}, loc: %{line: 126, column: 37}}], loc: %{line: 126, column: 25}}], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "Pattern", loc: %{line: 126, column: 16}}, loc: %{line: 126, column: 15}}, complexity: nil, loc: %{line: 126, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertHeaderText", description: "Header of the alert, if available", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 129, column: 22}}, complexity: nil, loc: %{line: 129, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertHeaderTextTranslations", description: "Header of the alert in all different available languages", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.ListType{type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "TranslatedString", loc: %{line: 132, column: 35}}, loc: nil}, loc: %{line: 132, column: 34}}, loc: nil}, complexity: nil, loc: %{line: 132, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertDescriptionText", description: "Long description of the alert", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 135, column: 27}}, loc: nil}, complexity: nil, loc: %{line: 135, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertDescriptionTextTranslations", description: "Long descriptions of the alert in all different available languages", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.ListType{type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "TranslatedString", loc: %{line: 138, column: 40}}, loc: nil}, loc: %{line: 138, column: 39}}, loc: nil}, complexity: nil, loc: %{line: 138, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertUrl", description: "Url with more information", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 141, column: 15}}, complexity: nil, loc: %{line: 141, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertUrlTranslations", description: "Url with more information in all different available languages", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.ListType{type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "TranslatedString", loc: %{line: 144, column: 28}}, loc: nil}, loc: %{line: 144, column: 27}}, loc: nil}, complexity: nil, loc: %{line: 144, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertEffect", description: "Alert effect", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "AlertEffectType", loc: %{line: 147, column: 18}}, complexity: nil, loc: %{line: 147, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertCause", description: "Alert cause", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "AlertCauseType", loc: %{line: 150, column: 17}}, complexity: nil, loc: %{line: 150, column: 5}}, %Absinthe.Language.FieldDefinition{name: "alertSeverityLevel", description: "Alert severity level", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "AlertSeverityLevelType", loc: %{line: 153, column: 25}}, complexity: nil, loc: %{line: 153, column: 5}}, %Absinthe.Language.FieldDefinition{name: "effectiveStartDate", description: "Time when this alert comes into effect. Format: Unix timestamp in seconds", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Long", loc: %{line: 158, ...}}, complexity: nil, loc: %{line: 158, ...}}, %Absinthe.Language.FieldDefinition{name: "effectiveEndDate", description: "Time when this alert is not in effect anymore. Format: Unix timestamp in seconds", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Long", loc: %{...}}, complexity: nil, loc: %{...}}, %Absinthe.Language.FieldDefinition{name: "entities", description: "Entities affected by the disruption.", arguments: [], directives: [], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{...}, ...}, complexity: nil, ...}], loc: %{line: 74, column: 1}}, %Absinthe.Language.EnumTypeDefinition{name: "AlertCauseType", description: "Cause of a alert", values: [%Absinthe.Language.EnumValueDefinition{value: "UNKNOWN_CAUSE", description: "UNKNOWN_CAUSE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "OTHER_CAUSE", description: "OTHER_CAUSE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "TECHNICAL_PROBLEM", description: "TECHNICAL_PROBLEM", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "STRIKE", description: "STRIKE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "DEMONSTRATION", description: "DEMONSTRATION", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ACCIDENT", description: "ACCIDENT", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "HOLIDAY", description: "HOLIDAY", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "WEATHER", description: "WEATHER", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "MAINTENANCE", description: "MAINTENANCE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "CONSTRUCTION", description: "CONSTRUCTION", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "POLICE_ACTIVITY", description: "POLICE_ACTIVITY", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "MEDICAL_EMERGENCY", description: "MEDICAL_EMERGENCY", directives: [], loc: nil}], directives: [], loc: %{line: 172, column: 6}}, %Absinthe.Language.EnumTypeDefinition{name: "AlertEffectType", description: "Effect of a alert", values: [%Absinthe.Language.EnumValueDefinition{value: "NO_SERVICE", description: "NO_SERVICE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "REDUCED_SERVICE", description: "REDUCED_SERVICE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "SIGNIFICANT_DELAYS", description: "SIGNIFICANT_DELAYS", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "DETOUR", description: "DETOUR", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ADDITIONAL_SERVICE", description: "ADDITIONAL_SERVICE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "MODIFIED_SERVICE", description: "MODIFIED_SERVICE", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "OTHER_EFFECT", description: "OTHER_EFFECT", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "UNKNOWN_EFFECT", description: "UNKNOWN_EFFECT", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "STOP_MOVED", description: "STOP_MOVED", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "NO_EFFECT", description: "NO_EFFECT", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ACCESSIBILITY_ISSUE", description: "ACCESSIBILITY_ISSUE", directives: [], loc: nil}], directives: [], loc: %{line: 211, column: 6}}, %Absinthe.Language.UnionTypeDefinition{name: "AlertEntity", description: "Entity related to an alert", directives: [], types: [%Absinthe.Language.NamedType{name: "Agency", loc: %{line: 248, column: 21}}, %Absinthe.Language.NamedType{name: "Route", loc: %{line: 248, column: 30}}, %Absinthe.Language.NamedType{name: "Pattern", loc: %{line: 248, column: 38}}, %Absinthe.Language.NamedType{name: "Stop", loc: %{line: 248, column: 48}}, %Absinthe.Language.NamedType{name: "Trip", loc: %{line: 248, column: 55}}, %Absinthe.Language.NamedType{name: "StopOnRoute", loc: %{line: 248, column: 62}}, %Absinthe.Language.NamedType{name: "StopOnTrip", loc: %{line: 248, column: 76}}, %Absinthe.Language.NamedType{name: "RouteType", loc: %{line: 248, column: 89}}, %Absinthe.Language.NamedType{name: "Unknown", loc: %{line: 248, column: 101}}], loc: %{line: 248, column: 1}}, %Absinthe.Language.EnumTypeDefinition{name: "AlertSeverityLevelType", description: "Severity level of a alert", values: [%Absinthe.Language.EnumValueDefinition{value: "UNKNOWN_SEVERITY", description: "Severity of alert is unknown", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "INFO", description: "Info alerts are used for informational messages that should not have a\nsignificant effect on user's journey, for example: A single entrance to a\nmetro station is temporarily closed.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "WARNING", description: "Warning alerts are used when a single stop or route has a disruption that can\naffect user's journey, for example: All trams on a specific route are running\nwith irregular schedules.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "SEVERE", description: "Severe alerts are used when a significant part of public transport services is\naffected, for example: All train services are cancelled due to technical problems.", directives: [], loc: nil}], directives: [], loc: %{line: 251, column: 6}}, %Absinthe.Language.ObjectTypeDefinition{name: "OpeningHours", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "osm", description: "OSM-formatted string of the opening hours.\n\nThe spec is available at: https://wiki.openstreetmap.org/wiki/Key:opening_hours", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 282, column: 10}}, complexity: nil, loc: %{line: 282, column: 5}}, %Absinthe.Language.FieldDefinition{name: "dates", description: "Opening hours for the selected dates using the local time of the parking lot.\nEach date can have multiple time spans.\n\nNote: This is not implemented yet and always returns null.", arguments: [%Absinthe.Language.InputValueDefinition{name: "dates", type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.ListType{type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 294, column: 17}}, loc: nil}, loc: %{line: 294, column: 16}}, loc: nil}, description: "Opening hours will be returned for these dates. Dates should use YYYYMMDD format.", default_value: nil, directives: [], loc: %{line: 294, column: 9}}], directives: [], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "LocalTimeSpanDate", loc: %{line: 295, column: 9}}, loc: %{line: 295, column: 8}}, complexity: nil, loc: %{line: 290, column: 5}}], loc: %{line: 276, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "BikePark", description: "Bike park represents a location where bicycles can be parked.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 299, column: 26}}, %Absinthe.Language.NamedType{name: "PlaceInterface", loc: %{line: 299, column: 33}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 303, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 303, column: 5}}, %Absinthe.Language.FieldDefinition{name: "bikeParkId", description: "ID of the bike park", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 306, column: 17}}, complexity: nil, loc: %{line: 306, column: 5}}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the bike park", arguments: [%Absinthe.Language.InputValueDefinition{name: "language", type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 311, column: 19}}, description: "Returns name with the specified language, if found, otherwise returns with some default language.", default_value: nil, directives: [], loc: %{line: 311, column: 9}}], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 311, column: 28}}, loc: nil}, complexity: nil, loc: %{line: 309, column: 5}}, %Absinthe.Language.FieldDefinition{name: "spacesAvailable", description: "Number of spaces available for bikes", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 314, column: 22}}, complexity: nil, loc: %{line: 314, column: 5}}, %Absinthe.Language.FieldDefinition{name: "realtime", description: "If true, value of `spacesAvailable` is updated from a real-time source.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{line: 319, column: 15}}, complexity: nil, loc: %{line: 319, column: 5}}, %Absinthe.Language.FieldDefinition{name: "lon", description: "Longitude of the bike park (WGS 84)", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Float", loc: %{line: 322, column: 10}}, complexity: nil, loc: %{line: 322, column: 5}}, %Absinthe.Language.FieldDefinition{name: "lat", description: "Latitude of the bike park (WGS 84)", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Float", loc: %{line: 325, column: 10}}, complexity: nil, loc: %{line: 325, column: 5}}, %Absinthe.Language.FieldDefinition{name: "tags", description: "Source specific tags of the bike park, which describe the available features.", arguments: [], directives: [], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 330, column: 12}}, loc: %{line: 330, column: 11}}, complexity: nil, loc: %{line: 330, column: 5}}, %Absinthe.Language.FieldDefinition{name: "openingHours", description: "Opening hours of the parking facility", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "OpeningHours", loc: %{line: 333, column: 19}}, complexity: nil, loc: %{line: 333, column: 5}}], loc: %{line: 299, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "VehicleParking", description: "Vehicle parking represents a location where bicycles or cars can be parked.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 337, column: 32}}, %Absinthe.Language.NamedType{name: "PlaceInterface", loc: %{line: 337, column: 39}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 341, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 341, column: 5}}, %Absinthe.Language.FieldDefinition{name: "vehicleParkingId", description: "ID of the park", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 344, column: 23}}, complexity: nil, loc: %{line: 344, column: 5}}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the park", arguments: [%Absinthe.Language.InputValueDefinition{name: "language", type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 349, column: 19}}, description: "Returns name with the specified language, if found, otherwise returns with some default language.", default_value: nil, directives: [], loc: %{line: 349, column: 9}}], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 349, column: 28}}, loc: nil}, complexity: nil, loc: %{line: 347, column: 5}}, %Absinthe.Language.FieldDefinition{name: "realtime", description: "If true, value of `spacesAvailable` is updated from a real-time source.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{line: 354, column: 15}}, complexity: nil, loc: %{line: 354, column: 5}}, %Absinthe.Language.FieldDefinition{name: "lon", description: "Longitude of the bike park (WGS 84)", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Float", loc: %{line: 357, column: 10}}, complexity: nil, loc: %{line: 357, column: 5}}, %Absinthe.Language.FieldDefinition{name: "lat", description: "Latitude of the bike park (WGS 84)", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Float", loc: %{line: 360, column: 10}}, complexity: nil, loc: %{line: 360, column: 5}}, %Absinthe.Language.FieldDefinition{name: "detailsUrl", description: "URL which contains details of this vehicle parking.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 365, column: 17}}, complexity: nil, loc: %{line: 365, column: 5}}, %Absinthe.Language.FieldDefinition{name: "imageUrl", description: "URL of an image which may be displayed to the user showing the vehicle parking.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 370, column: 15}}, complexity: nil, loc: %{line: 370, column: 5}}, %Absinthe.Language.FieldDefinition{name: "tags", description: "Source specific tags of the vehicle parking, which describe the available features. For example\npark_and_ride, bike_lockers, or static_osm_data.", arguments: [], directives: [], type: %Absinthe.Language.ListType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 376, column: 12}}, loc: %{line: 376, column: 11}}, complexity: nil, loc: %{line: 376, column: 5}}, %Absinthe.Language.FieldDefinition{name: "note", description: "A short translatable note containing details of this vehicle parking.", arguments: [%Absinthe.Language.InputValueDefinition{name: "language", type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 383, ...}}, description: "Returns note with the specified language, if found, otherwise returns with some default language.", default_value: nil, directives: [], ...}], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 383, column: 28}}, complexity: nil, loc: %{line: 381, column: 5}}, %Absinthe.Language.FieldDefinition{name: "state", description: "The state of this vehicle parking.\nOnly ones in an OPERATIONAL state may be used for Park and Ride.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "VehicleParkingState", loc: %{line: 389, ...}}, complexity: nil, loc: %{line: 389, ...}}, %Absinthe.Language.FieldDefinition{name: "bicyclePlaces", description: "Does this vehicle parking have spaces (capacity) for bicycles.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{...}}, complexity: nil, loc: %{...}}, %Absinthe.Language.FieldDefinition{name: "anyCarPlaces", description: "Does this vehicle parking have spaces (capacity) for either wheelchair accessible (disabled)\nor normal cars.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", ...}, complexity: nil, ...}, %Absinthe.Language.FieldDefinition{name: "carPlaces", description: "Does this vehicle parking have spaces (capacity) for cars excluding wheelchair accessible spaces.\nUse anyCarPlaces to check if any type of car may use this vehicle parking.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{...}, ...}, %Absinthe.Language.FieldDefinition{name: "wheelchairAccessibleCarPlaces", description: "Does this vehicle parking have wheelchair accessible (disabled) car spaces (capacity).", arguments: [], directives: [], ...}, %Absinthe.Language.FieldDefinition{name: "capacity", description: "The capacity (maximum available spaces) of this vehicle parking.", arguments: [], ...}, %Absinthe.Language.FieldDefinition{name: "availability", description: "The currently available spaces at this vehicle parking.", ...}, %Absinthe.Language.FieldDefinition{name: "openingHours", ...}], loc: %{line: 337, column: 1}}, %Absinthe.Language.EnumTypeDefinition{name: "VehicleParkingState", description: "The state of the vehicle parking. TEMPORARILY_CLOSED and CLOSED are distinct states so that they\nmay be represented differently to the user.", values: [%Absinthe.Language.EnumValueDefinition{value: "OPERATIONAL", description: "May be used for park and ride.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "TEMPORARILY_CLOSED", description: "Can't be used for park and ride.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "CLOSED", description: "Can't be used for park and ride.", directives: [], loc: nil}], directives: [], loc: %{line: 431, column: 6}}, %Absinthe.Language.ObjectTypeDefinition{name: "VehicleParkingSpaces", description: "The number of spaces by type. null if unknown.", directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "bicycleSpaces", description: "The number of bicycle spaces.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 447, column: 20}}, complexity: nil, loc: %{line: 447, column: 5}}, %Absinthe.Language.FieldDefinition{name: "carSpaces", description: "The number of car spaces.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 452, column: 16}}, complexity: nil, loc: %{line: 452, column: 5}}, %Absinthe.Language.FieldDefinition{name: "wheelchairAccessibleCarSpaces", description: "The number of wheelchair accessible (disabled) car spaces.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 457, column: 36}}, complexity: nil, loc: %{line: 457, column: 5}}], loc: %{line: 443, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "BikeRentalStation", description: "Bike rental station represents a location where users can rent bicycles for a fee.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 463, column: 35}}, %Absinthe.Language.NamedType{name: "PlaceInterface", loc: %{line: 463, column: 42}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 467, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 467, column: 5}}, %Absinthe.Language.FieldDefinition{name: "stationId", description: "ID of the bike rental station", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 470, column: 16}}, complexity: nil, loc: %{line: 470, column: 5}}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the bike rental station", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 473, column: 11}}, loc: nil}, complexity: nil, loc: %{line: 473, column: 5}}, %Absinthe.Language.FieldDefinition{name: "bikesAvailable", description: "Number of bikes currently available on the rental station.\nSee field `allowPickupNow` to know if is currently possible to pick up a bike.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 479, column: 21}}, complexity: nil, loc: %{line: 479, column: 5}}, %Absinthe.Language.FieldDefinition{name: "spacesAvailable", description: "Number of free spaces currently available on the rental station.\nNote that this value being 0 does not necessarily indicate that bikes cannot be returned\nto this station, as for example it might be possible to leave the bike in the vicinity of\nthe rental station, even if the bike racks don't have any spaces available.\nSee field `allowDropoffNow` to know if is currently possible to return a bike.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 488, column: 22}}, complexity: nil, loc: %{line: 488, column: 5}}, %Absinthe.Language.FieldDefinition{name: "state", description: "A description of the current state of this bike rental station, e.g. \"Station on\"", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{...}, ...}], loc: %{line: 493, column: 19}}], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 493, column: 12}}, complexity: nil, loc: %{line: 493, column: 5}}, %Absinthe.Language.FieldDefinition{name: "realtime", description: "If true, values of `bikesAvailable` and `spacesAvailable` are updated from a\nreal-time source. If false, values of `bikesAvailable` and `spacesAvailable`\nare always the total capacity divided by two.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{line: 500, column: 15}}, complexity: nil, loc: %{line: 500, column: 5}}, %Absinthe.Language.FieldDefinition{name: "allowDropoff", description: "If true, bikes can be returned to this station if the station has spaces available\nor allows overloading.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{line: 506, ...}}, complexity: nil, loc: %{line: 506, ...}}, %Absinthe.Language.FieldDefinition{name: "allowPickup", description: "If true, bikes can be picked up from this station if the station has bikes available.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{...}}, complexity: nil, loc: %{...}}, %Absinthe.Language.FieldDefinition{name: "allowDropoffNow", description: "If true, bikes can be currently returned to this station.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", ...}, complexity: nil, ...}, %Absinthe.Language.FieldDefinition{name: "allowPickupNow", description: "If true, bikes can be currently picked up from this station.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{...}, ...}, %Absinthe.Language.FieldDefinition{name: "networks", description: nil, arguments: [], directives: [], ...}, %Absinthe.Language.FieldDefinition{name: "lon", description: "Longitude of the bike rental station (WGS 84)", arguments: [], ...}, %Absinthe.Language.FieldDefinition{name: "lat", description: "Latitude of the bike rental station (WGS 84)", ...}, %Absinthe.Language.FieldDefinition{name: "capacity", ...}, %Absinthe.Language.FieldDefinition{...}, ...], loc: %{line: 463, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "VehicleRentalStation", description: "Vehicle rental station represents a location where users can rent bicycles etc. for a fee.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 545, column: 38}}, %Absinthe.Language.NamedType{name: "PlaceInterface", loc: %{line: 545, column: 45}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 549, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 549, column: 5}}, %Absinthe.Language.FieldDefinition{name: "stationId", description: "ID of the vehicle in the format of network:id", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 552, column: 16}}, complexity: nil, loc: %{line: 552, column: 5}}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the vehicle rental station", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 555, column: 11}}, loc: nil}, complexity: nil, loc: %{line: 555, column: 5}}, %Absinthe.Language.FieldDefinition{name: "vehiclesAvailable", description: "Number of vehicles currently available on the rental station.\nSee field `allowPickupNow` to know if is currently possible to pick up a vehicle.", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{value: "Use `availableVehicles` instead, which also contains vehicle types", ...}, loc: %{...}}], loc: %{line: 561, column: 28}}], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 561, column: 24}}, complexity: nil, loc: %{line: 561, column: 5}}, %Absinthe.Language.FieldDefinition{name: "spacesAvailable", description: "Number of free spaces currently available on the rental station.\nNote that this value being 0 does not necessarily indicate that vehicles cannot be returned\nto this station, as for example it might be possible to leave the vehicle in the vicinity of\nthe rental station, even if the vehicle racks don't have any spaces available.\nSee field `allowDropoffNow` to know if is currently possible to return a vehicle.", arguments: [], directives: [%Absinthe.Language.Directive{name: "deprecated", arguments: [%Absinthe.Language.Argument{name: "reason", value: %Absinthe.Language.StringValue{...}, ...}], loc: %{line: 570, column: 26}}], type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 570, column: 22}}, complexity: nil, loc: %{line: 570, column: 5}}, %Absinthe.Language.FieldDefinition{name: "availableVehicles", description: "Number of vehicles currently available on the rental station, grouped by vehicle type.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "RentalVehicleEntityCounts", loc: %{line: 575, column: 24}}, complexity: nil, loc: %{line: 575, column: 5}}, %Absinthe.Language.FieldDefinition{name: "availableSpaces", description: "Number of free spaces currently available on the rental station, grouped by vehicle type.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "RentalVehicleEntityCounts", loc: %{line: 580, ...}}, complexity: nil, loc: %{line: 580, ...}}, %Absinthe.Language.FieldDefinition{name: "realtime", description: "If true, values of `vehiclesAvailable` and `spacesAvailable` are updated from a\nreal-time source. If false, values of `vehiclesAvailable` and `spacesAvailable`\nare always the total capacity divided by two.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{...}}, complexity: nil, loc: %{...}}, %Absinthe.Language.FieldDefinition{name: "allowDropoff", description: "If true, vehicles can be returned to this station if the station has spaces available\nor allows overloading.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", ...}, complexity: nil, ...}, %Absinthe.Language.FieldDefinition{name: "allowPickup", description: "If true, vehicles can be picked up from this station if the station has vehicles available.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{...}, ...}, %Absinthe.Language.FieldDefinition{name: "allowDropoffNow", description: "If true, vehicles can be currently returned to this station.", arguments: [], directives: [], ...}, %Absinthe.Language.FieldDefinition{name: "allowPickupNow", description: "If true, vehicles can be currently picked up from this station.", arguments: [], ...}, %Absinthe.Language.FieldDefinition{name: "network", description: "ID of the rental network.", ...}, %Absinthe.Language.FieldDefinition{name: "lon", ...}, %Absinthe.Language.FieldDefinition{...}, ...], loc: %{line: 545, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "RentalVehicleEntityCounts", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "total", description: "The total number of entities (e.g. vehicles, spaces).", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 632, column: 12}}, loc: nil}, complexity: nil, loc: %{line: 632, column: 5}}, %Absinthe.Language.FieldDefinition{name: "byType", description: "The number of entities by type", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.ListType{type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "RentalVehicleTypeCount", loc: %{line: 635, column: 14}}, loc: nil}, loc: %{line: 635, column: 13}}, loc: nil}, complexity: nil, loc: %{line: 635, column: 5}}], loc: %{line: 630, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "RentalVehicleTypeCount", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "vehicleType", description: "The type of the rental vehicle (scooter, bicycle, car...)", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "RentalVehicleType", loc: %{line: 640, column: 18}}, loc: nil}, complexity: nil, loc: %{line: 640, column: 5}}, %Absinthe.Language.FieldDefinition{name: "count", description: "The number of vehicles of this type", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "Int", loc: %{line: 643, column: 12}}, loc: nil}, complexity: nil, loc: %{line: 643, column: 5}}], loc: %{line: 638, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "RentalVehicle", description: "Rental vehicle represents a vehicle that belongs to a rental network.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 649, column: 31}}, %Absinthe.Language.NamedType{name: "PlaceInterface", loc: %{line: 649, column: 38}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "ID", loc: %{line: 653, column: 9}}, loc: nil}, complexity: nil, loc: %{line: 653, column: 5}}, %Absinthe.Language.FieldDefinition{name: "vehicleId", description: "ID of the vehicle in the format of network:id", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 656, column: 16}}, complexity: nil, loc: %{line: 656, column: 5}}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the vehicle", arguments: [], directives: [], type: %Absinthe.Language.NonNullType{type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 659, ...}}, loc: nil}, complexity: nil, loc: %{line: 659, column: 5}}, %Absinthe.Language.FieldDefinition{name: "allowPickupNow", description: "If true, vehicle is currently available for renting.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Boolean", loc: %{line: 662, ...}}, complexity: nil, loc: %{line: 662, ...}}, %Absinthe.Language.FieldDefinition{name: "network", description: "ID of the rental network.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{...}}, complexity: nil, loc: %{...}}, %Absinthe.Language.FieldDefinition{name: "lon", description: "Longitude of the vehicle (WGS 84)", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "Float", ...}, complexity: nil, ...}, %Absinthe.Language.FieldDefinition{name: "lat", description: "Latitude of the vehicle (WGS 84)", arguments: [], directives: [], type: %Absinthe.Language.NamedType{...}, ...}, %Absinthe.Language.FieldDefinition{name: "rentalUris", description: "Platform-specific URLs to begin the vehicle.", arguments: [], directives: [], ...}, %Absinthe.Language.FieldDefinition{name: "operative", description: "If true, vehicle is not disabled.", arguments: [], ...}, %Absinthe.Language.FieldDefinition{name: "vehicleType", description: "The type of the rental vehicle (scooter, bicycle, car...)", ...}], loc: %{line: 649, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "BikeRentalStationUris", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "android", description: "A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android\nintent to support Android Deep Links.\nMay be null if a rental URI does not exist.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 691, column: 14}}, complexity: nil, loc: %{line: 691, column: 5}}, %Absinthe.Language.FieldDefinition{name: "ios", description: "A URI that can be used on iOS to launch the rental app for this station.\nMay be {@code null} if a rental URI does not exist.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 697, column: 10}}, complexity: nil, loc: %{line: 697, column: 5}}, %Absinthe.Language.FieldDefinition{name: "web", description: "A URL that can be used by a web browser to show more information about renting a vehicle at\nthis station.\nMay be {@code null} if a rental URL does not exist.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 704, ...}}, complexity: nil, loc: %{line: 704, ...}}], loc: %{line: 685, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "VehicleRentalUris", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "android", description: "A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android\nintent to support Android Deep Links.\nMay be null if a rental URI does not exist.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 713, column: 14}}, complexity: nil, loc: %{line: 713, column: 5}}, %Absinthe.Language.FieldDefinition{name: "ios", description: "A URI that can be used on iOS to launch the rental app for this rental network.\nMay be {@code null} if a rental URI does not exist.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{line: 719, ...}}, complexity: nil, loc: %{line: 719, ...}}, %Absinthe.Language.FieldDefinition{name: "web", description: "A URL that can be used by a web browser to show more information about renting a vehicle.\nMay be {@code null} if a rental URL does not exist.", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "String", loc: %{...}}, complexity: nil, loc: %{...}}], loc: %{line: 707, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "RentalVehicleType", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "formFactor", description: "The vehicle's general form factor", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "FormFactor", loc: %{line: 730, ...}}, complexity: nil, loc: %{line: 730, ...}}, %Absinthe.Language.FieldDefinition{name: "propulsionType", description: "The primary propulsion type of the vehicle", arguments: [], directives: [], type: %Absinthe.Language.NamedType{name: "PropulsionType", loc: %{...}}, complexity: nil, loc: %{...}}], loc: %{line: 728, column: 1}}, %Absinthe.Language.EnumTypeDefinition{name: "FormFactor", description: nil, values: [%Absinthe.Language.EnumValueDefinition{value: "BICYCLE", description: "A bicycle", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "CARGO_BICYCLE", description: "A bicycle with additional space for cargo", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "CAR", description: "An automobile", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "MOPED", description: "A moped that the rider sits on. For a disambiguation see https://github.com/NABSA/gbfs/pull/370#issuecomment-982631989", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "SCOOTER", description: "A kick scooter that the rider either sits or stands on. Will be deprecated in GBFS v3.0.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "SCOOTER_STANDING", description: "A kick scooter that the rider stands on", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "SCOOTER_SEATED", description: "A kick scooter with a seat", directives: [], ...}, %Absinthe.Language.EnumValueDefinition{value: "OTHER", description: "A vehicle that doesn't fit into any other category", ...}], directives: [], loc: %{line: 736, column: 6}}, %Absinthe.Language.EnumTypeDefinition{name: "PropulsionType", description: nil, values: [%Absinthe.Language.EnumValueDefinition{value: "HUMAN", description: "Pedal or foot propulsion", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ELECTRIC_ASSIST", description: "Provides electric motor assist only in combination with human propulsion - no throttle mode", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ELECTRIC", description: "Powered by battery-powered electric motor with throttle mode", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "COMBUSTION", description: "Powered by gasoline combustion engine", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "COMBUSTION_DIESEL", description: "Powered by diesel combustion engine", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "HYBRID", description: "Powered by combined combustion engine and battery-powered motor", directives: [], ...}, %Absinthe.Language.EnumValueDefinition{value: "PLUG_IN_HYBRID", description: "Powered by combined combustion engine and battery-powered motor with plug-in charging", ...}, %Absinthe.Language.EnumValueDefinition{value: "HYDROGEN_FUEL_CELL", ...}], directives: [], loc: %{line: 755, column: 6}}, %Absinthe.Language.EnumTypeDefinition{name: "BikesAllowed", description: nil, values: [%Absinthe.Language.EnumValueDefinition{value: "NO_INFORMATION", description: "There is no bike information for the trip.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "ALLOWED", description: "The vehicle being used on this particular trip can accommodate at least one bicycle.", directives: [], loc: nil}, %Absinthe.Language.EnumValueDefinition{value: "NOT_ALLOWED", description: "No bicycles are allowed on this trip.", directives: [], loc: nil}], directives: [], loc: %{line: 774, column: 6}}, %Absinthe.Language.ObjectTypeDefinition{name: "CarPark", description: "Car park represents a location where cars can be parked.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 788, column: 25}}, %Absinthe.Language.NamedType{name: "PlaceInterface", loc: %{line: 788, column: 32}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], directives: [], ...}, %Absinthe.Language.FieldDefinition{name: "carParkId", description: "ID of the car park", arguments: [], ...}, %Absinthe.Language.FieldDefinition{name: "name", description: "Name of the car park", ...}, %Absinthe.Language.FieldDefinition{name: "maxCapacity", ...}, %Absinthe.Language.FieldDefinition{...}, ...], loc: %{line: 788, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "Cluster", description: "Cluster is a list of stops grouped by name and proximity", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", loc: %{line: 832, column: 25}}], fields: [%Absinthe.Language.FieldDefinition{name: "id", description: "Global object ID provided by Relay. This value can be used to refetch this object using **node** query.", arguments: [], ...}, %Absinthe.Language.FieldDefinition{name: "gtfsId", description: "ID of the cluster", ...}, %Absinthe.Language.FieldDefinition{name: "name", ...}, %Absinthe.Language.FieldDefinition{...}, ...], loc: %{line: 832, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "Coordinates", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "lat", description: "Latitude (WGS 84)", ...}, %Absinthe.Language.FieldDefinition{name: "lon", ...}], loc: %{line: 858, column: 1}}, %Absinthe.Language.ObjectTypeDefinition{name: "debugOutput", description: nil, directives: [], interfaces: [], fields: [%Absinthe.Language.FieldDefinition{name: "totalTime", ...}, %Absinthe.Language.FieldDefinition{...}, ...], loc: %{line: 866, ...}}, %Absinthe.Language.ObjectTypeDefinition{name: "DepartureRow", description: "Departure row is a combination of a pattern and a stop of that pattern.\n\nThey are de-duplicated so for each pattern there will only be a single departure row.\n\nThis is useful if you want to show a list of stop/pattern combinations but want each pattern to be\nlisted only once.", directives: [], interfaces: [%Absinthe.Language.NamedType{name: "Node", ...}, %Absinthe.Language.NamedType{...}], fields: [%Absinthe.Language.FieldDefinition{...}, ...], loc: %{...}}, %Absinthe.Language.ObjectTypeDefinition{name: "elevationProfileComponent", description: nil, directives: [], interfaces: [], fields: [...], ...}, %Absinthe.Language.ObjectTypeDefinition{name: "Emissions", description: nil, directives: [], interfaces: [], ...}, %Absinthe.Language.ObjectTypeDefinition{name: "fare", description: "This type is only here for backwards-compatibility and this API will never return it anymore.\nPlease use the leg's `fareProducts` instead.", directives: [], ...}, %Absinthe.Language.ObjectTypeDefinition{name: "fareComponent", description: "This type is only here for backwards-compatibility and this API will never return it anymore.\nPlease use the leg's `fareProducts` instead.", ...}, %Absinthe.Language.ObjectTypeDefinition{name: "Feed", ...}, %Absinthe.Language.EnumTypeDefinition{...}, ...], loc: nil}, source: nil, execution: %Absinthe.Blueprint.Execution{adapter: nil, schema: nil, fragments: %{}, fields_cache: %{}, validation_errors: [], result: nil, acc: %{}, context: %{}, root_value: %{}}, result: %{}}
"""
while inspecting:
%{
flags: %{},
input: [[[REDACTED pretty-printed input]]]
,
name: nil,
result: %{},
source: nil,
__struct__: Absinthe.Blueprint,
errors: [],
telemetry: %{},
schema: nil,
prototype_schema: nil,
execution: %Absinthe.Blueprint.Execution{
adapter: nil,
schema: nil,
fragments: %{},
fields_cache: %{},
validation_errors: [],
result: nil,
acc: %{},
context: %{},
root_value: %{}
},
directives: [],
adapter: nil,
fragments: [],
initial_phases: [],
operations: [],
schema_definitions: []
}
Stacktrace:
(absinthe 1.7.6) lib/absinthe/schema/notation/sdl_render.ex:39: Absinthe.Schema.Notation.SDL.Render.render/2
(absinthe 1.7.6) lib/absinthe/schema/notation/sdl_render.ex:12: Absinthe.Schema.Notation.SDL.Render.inspect/2
(elixir 1.16.0) lib/inspect/algebra.ex:347: Inspect.Algebra.to_doc/2
(elixir 1.16.0) lib/inspect/algebra.ex:478: Inspect.Algebra.container_each/6
(elixir 1.16.0) lib/inspect/algebra.ex:455: Inspect.Algebra.container_doc/6
(elixir 1.16.0) lib/kernel.ex:2351: Kernel.inspect/2
(iex 1.16.0) lib/iex/evaluator.ex:375: IEx.Evaluator.io_inspect/1
(iex 1.16.0) lib/iex/evaluator.ex:334: IEx.Evaluator.eval_and_inspect/3
>}
Decided to revisit this using Absinthe version 1.7.8. It still can't parse my schema, however now it returns an extremely informative message, pointing to specific areas of my schema that are problematic.
💖 Thanks for adding that, it's a great improvement.
If submitting a bug, please provide the following:
Environment
Elixir version (elixir -v): Elixir 1.16.0 (compiled with Erlang/OTP 26)
Absinthe version (mix deps | grep absinthe):
Client Framework and version (Relay, Apollo, etc): n/a
Expected behavior
No errors in compilation
Actual behavior
Relevant Schema/Middleware Code
Adding this file with import_sdl: https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/src/main/resources/org/opentripplanner/apis/gtfs/schema.graphqls