39 lines
1 KiB
Nim
39 lines
1 KiB
Nim
import ../types
|
|
import json
|
|
import leg
|
|
import options
|
|
|
|
proc mkParseJourney*(common: CommonData): proc =
|
|
proc parseJourney(j: JsonNode): Journey =
|
|
var common = common
|
|
common.dateStr = j{"date"}.getStr()
|
|
|
|
if j{"trfRes"}{"statusCode"}.getStr == "OK":
|
|
result.price = some(Price(
|
|
amount: j["trfRes"]["fareSetL"][0]["fareL"][0]["prc"].getInt / 100,
|
|
currency: some("Euro"),
|
|
))
|
|
|
|
result.refreshToken = j{"ctxRecon"}.getStr()
|
|
result.legs = j{"secL"}.getElems().map(mkParseLeg(common))
|
|
result.lastUpdated = common.timeStamp
|
|
|
|
# combine walking legs
|
|
var i = -1
|
|
var firstWalking = -1
|
|
while true:
|
|
inc(i)
|
|
if i >= len(result.legs): break
|
|
if result.legs[i].isWalking:
|
|
if firstWalking == -1:
|
|
firstWalking = i
|
|
else:
|
|
result.legs[firstWalking].arrival = result.legs[i].arrival
|
|
result.legs[firstWalking].distance.get += result.legs[i].distance.get
|
|
result.legs.delete(i)
|
|
dec(i)
|
|
else:
|
|
firstWalking = -1
|
|
|
|
return parseJourney
|