fuzzyworld

find-stone-beer / commit

Scheduled execution failed with an error that seems to be caused by a bad Bing Maps response, adding some checks to verify that we get what we're expecting.

6cc7663b48136fe1061aca61c6c7e11dc69fad76 · Pavel Safronov · 2023-08-28 11:08:59 -0700 · parents 1ab63e540d08

Scheduled execution failed with an error that seems to be caused by a bad Bing Maps response, adding some checks to verify that we get what we're expecting.
 .vscode/settings.json |  1 +
 bing-maps.go          | 17 +++++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json
index bb71aa4..484a74f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,6 +3,7 @@
         "findstone",
         "geodist",
         "jftuga",
+        "unmarshalling",
         "Vincenty"
     ]
 }
\ No newline at end of file
diff --git a/bing-maps.go b/bing-maps.go
index ab7b403..e30a15b 100644
--- a/bing-maps.go
+++ b/bing-maps.go
@@ -38,9 +38,22 @@ func _getDistBetweenPoints(lat1, lon1, lat2, lon2 float64) (float64, error) {
 	autoGenerated := autoGenerated{}
 	err = json.Unmarshal(data, &autoGenerated)
 	if err != nil {
-		return 0, err
+		return 0, fmt.Errorf("encountered error '%s' while unmarshalling response: %s ", err, string(data))
+	}
+	resourceSets := autoGenerated.ResourceSets
+	if len(resourceSets) == 0 {
+		return 0, fmt.Errorf("no ResourceSets found in response: %s", string(data))
+	}
+	resources := resourceSets[0].Resources
+	if len(resources) == 0 {
+		return 0, fmt.Errorf("no Resources found in response: %s", string(data))
+	}
+	routeLegs := resources[0].RouteLegs
+	if len(routeLegs) == 0 {
+		return 0, fmt.Errorf("no RouteLegs found in response: %s", string(data))
 	}
-	dist := autoGenerated.ResourceSets[0].Resources[0].RouteLegs[0].TravelDistance
+	firstLeg := routeLegs[0]
+	dist := firstLeg.TravelDistance
 	return dist, nil
 }