diff --git a/src/Track.elm b/src/Track.elm index 51ae945..a25e824 100644 --- a/src/Track.elm +++ b/src/Track.elm @@ -5,10 +5,10 @@ import Xml.Decode as XD exposing (path, list, single, floatAttr, stringAttr) import Time import Iso8601 +type alias Position = (Float, Float, Maybe Float) -- lat, lon, ele + type alias Point = - { lat : Float - , lon : Float - , ele : Maybe Float + { loc : Position , time : Maybe Time.Posix } @@ -22,10 +22,11 @@ timeDecoder = XD.andThen (\ts -> ) XD.string -pointDecoder = XD.map4 Point - (floatAttr "lat") - (floatAttr "lon") - (XD.maybe (path ["ele"] (single XD.float))) +triple x y z = (x,y,z) + +pointDecoder = XD.map2 Point + (XD.map3 triple (floatAttr "lat") (floatAttr "lon") + (XD.maybe (path ["ele"] (single XD.float)))) (XD.maybe (path ["time"] (single timeDecoder))) diff --git a/tests/Fixtures.elm b/tests/Fixtures.elm index b8d2750..53d33f7 100644 --- a/tests/Fixtures.elm +++ b/tests/Fixtures.elm @@ -65,7 +65,7 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/ """ threepoints_expected = - [ (Point 51.600643 -0.01856 (Just 64.8) (Just (Time.millisToPosix 1729669252256))) - , (Point 51.600679 -0.018179 (Just 65.5) (Just (Time.millisToPosix 1729669255259))) - , (Point 51.600697 -0.018064 (Just 66.2) (Just (Time.millisToPosix 1729669256231))) + [ (Point (51.600643, -0.01856, Just 64.8) (Just (Time.millisToPosix 1729669252256))) + , (Point (51.600679, -0.018179, Just 65.5) (Just (Time.millisToPosix 1729669255259))) + , (Point (51.600697, -0.018064, Just 66.2) (Just (Time.millisToPosix 1729669256231))) ] diff --git a/tests/TrackTest.elm b/tests/TrackTest.elm index 490df4e..2bc7dd9 100644 --- a/tests/TrackTest.elm +++ b/tests/TrackTest.elm @@ -23,7 +23,7 @@ specs = Fixtures.threepoints in case Track.parse xml of - Ok (p::pts) -> Expect.equal p (Point 51.600643 -0.01856 Nothing (Just (Time.millisToPosix 1729669252256))) + Ok (p::pts) -> Expect.equal p (Point (51.600643, -0.01856, Nothing) (Just (Time.millisToPosix 1729669252256))) Ok _ -> Expect.fail "empty list" (Err f) -> Expect.fail f