mapbox-directions-swift icon indicating copy to clipboard operation
mapbox-directions-swift copied to clipboard

DecodingError: ManeuverDirection "reverse" not found

Open sj1914 opened this issue 4 years ago • 4 comments

Hi there

We are frequently getting an error from mapbox when trying to calculate a route using the MapboxDirections API:

 ▿ underlying : Optional<Error>
      ▿ some : DecodingError
        ▿ dataCorrupted : Context
          ▿ codingPath : 10 elements
            - 0 : CodingKeys(stringValue: "routes", intValue: nil)
            ▿ 1 : _JSONKey(stringValue: "Index 0", intValue: 0)
              - stringValue : "Index 0"
              ▿ intValue : Optional<Int>
                - some : 0
            - 2 : CodingKeys(stringValue: "legs", intValue: nil)
            ▿ 3 : _JSONKey(stringValue: "Index 9", intValue: 9)
              - stringValue : "Index 9"
              ▿ intValue : Optional<Int>
                - some : 9
            - 4 : CodingKeys(stringValue: "steps", intValue: nil)
            ▿ 5 : _JSONKey(stringValue: "Index 0", intValue: 0)
              - stringValue : "Index 0"
              ▿ intValue : Optional<Int>
                - some : 0
            - 6 : CodingKeys(stringValue: "bannerInstructions", intValue: nil)
            ▿ 7 : _JSONKey(stringValue: "Index 0", intValue: 0)
              - stringValue : "Index 0"
              ▿ intValue : Optional<Int>
                - some : 0
            - 8 : CodingKeys(stringValue: "primary", intValue: nil)
            - 9 : CodingKeys(stringValue: "modifier", intValue: nil)
          - debugDescription : "Cannot initialize ManeuverDirection from invalid String value reverse"
          - underlyingError : nil
    - code : nil
    - message : nil

When diving in to this further, it looks like this enum value indeed does not exist in the code:

https://github.com/mapbox/mapbox-directions-swift/blob/main/Sources/MapboxDirections/RouteStep.swift

Here is a snippet of an example of one of the offending JSON responses:

                            "bannerInstructions": [
                                {
                                    "primary": {
                                        "components": [
                                            {
                                                "type": "text",
                                                "text": "Enter Winwick Interchange and take the 3rd exit"
                                            }
                                        ],
                                        "degrees": 307,
                                        "driving_side": "left",
                                        "type": "roundabout",
                                        "modifier": "reverse",  <---- ???? 
                                        "text": "Enter Winwick Interchange and take the 3rd exit"
                                    },
                                    "distanceAlongGeometry": 0
                                }
                            ],

Unless i am mistaken it appears the library is not equipped to decode this object.

Keen to hear of a solution, hope this is helpful!

Thanks.

sj1914 avatar Sep 21 '21 09:09 sj1914

Thank you @sj1914 for the taking time to create a detailed issue 👍. We are looking into this issue, meanwhile, can you please share the request to Directions that causes this issue?

S2Ler avatar Sep 23 '21 08:09 S2Ler

A minimal example that reproduce the issue would help even more.

S2Ler avatar Sep 23 '21 09:09 S2Ler

(If modifier is coming out of the Directions API as reverse, then that would be a bug in the Directions API, since this field is documented as returning uturn in that case. reverse is only a valid value for the turn:lanes key in OpenStreetMap, not a maneuver or lane indication in the DIrections API.)

1ec5 avatar Sep 27 '21 19:09 1ec5

We don't have enough data to reproduce the issue for now. Directions API returns "modifier": "uturn" in test requests.

kried avatar Oct 14 '22 12:10 kried