@@ -18,16 +18,18 @@ import com.mapbox.navigation.base.internal.SDKRouteParser
1818import com.mapbox.navigation.base.internal.factory.RoadObjectFactory.toUpcomingRoadObjects
1919import com.mapbox.navigation.base.internal.route.RouteCompatibilityCache
2020import com.mapbox.navigation.base.internal.route.Waypoint
21+ import com.mapbox.navigation.base.internal.route.toNavigationRoute
2122import com.mapbox.navigation.base.internal.utils.mapToSdkRouteOrigin
22- import com.mapbox.navigation.base.trip.model.roadobject.UpcomingRoadObject
2323import com.mapbox.navigation.base.internal.utils.mapToSkd
24+ import com.mapbox.navigation.base.trip.model.roadobject.UpcomingRoadObject
2425import com.mapbox.navigation.utils.internal.ThreadController
2526import com.mapbox.navigation.utils.internal.logD
2627import com.mapbox.navigation.utils.internal.logE
2728import com.mapbox.navigation.utils.internal.logI
2829import com.mapbox.navigator.RouteInterface
2930import kotlinx.coroutines.async
3031import kotlinx.coroutines.coroutineScope
32+ import org.json.JSONArray
3133import java.net.URL
3234
3335/* *
@@ -205,6 +207,34 @@ class NavigationRoute internal constructor(
205207 }
206208 }
207209
210+ internal fun create (
211+ directionsRoutes : List <DirectionsRoute >,
212+ routeOptions : RouteOptions ,
213+ routerOrigin : RouterOrigin ,
214+ routeParser : SDKRouteParser = NativeRouteParserWrapper
215+ ): List <NavigationRoute > {
216+ val directionsRoutesJson = JSONArray (directionsRoutes.map { it.toJson() }).toString()
217+ return create(
218+ directionsRoutesJson,
219+ routeOptions.toUrl(" " ).toString(),
220+ routerOrigin,
221+ routeParser
222+ )
223+ }
224+
225+ private fun create (
226+ directionsRoutesJson : String ,
227+ routeOptionsUrlString : String ,
228+ routerOrigin : RouterOrigin ,
229+ routeParser : SDKRouteParser = NativeRouteParserWrapper
230+ ): List <NavigationRoute > {
231+ return routeParser.parseDirectionsRoutes(
232+ directionsRoutesJson, routeOptionsUrlString, routerOrigin
233+ ).run {
234+ create(this )
235+ }
236+ }
237+
208238 internal fun create (
209239 directionsResponse : DirectionsResponse ,
210240 routeOptions : RouteOptions ,
@@ -255,6 +285,19 @@ class NavigationRoute internal constructor(
255285 )
256286 }.cache()
257287 }
288+
289+ private fun create (
290+ expected : Expected <String , List <RouteInterface >>
291+ ): List <NavigationRoute > {
292+ return expected.fold({ error ->
293+ logE(" NavigationRoute" , " Failed to parse a route. Reason: $error " )
294+ listOf ()
295+ }, { value ->
296+ value
297+ }).map { routeInterface ->
298+ routeInterface.toNavigationRoute()
299+ }.cache()
300+ }
258301 }
259302
260303 /* *
0 commit comments