dresdner-verkehrsbetriebe 0.1.0 → 0.1.1
raw patch · 2 files changed
+101/−1 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Network.Transportation.Germany.DVB.Route.JSON: Leg :: LegMode -> [Stop] -> Leg
- Network.Transportation.Germany.DVB.Route.JSON: LegMode :: String -> String -> LegMode
- Network.Transportation.Germany.DVB.Route.JSON: Route :: [Trip] -> Route
- Network.Transportation.Germany.DVB.Route.JSON: Stop :: String -> String -> StopRef -> Stop
- Network.Transportation.Germany.DVB.Route.JSON: StopRef :: Maybe String -> Maybe String -> Maybe String -> Maybe String -> StopRef
- Network.Transportation.Germany.DVB.Route.JSON: Trip :: String -> [Leg] -> Trip
- Network.Transportation.Germany.DVB.Route.JSON: data Leg
- Network.Transportation.Germany.DVB.Route.JSON: data LegMode
- Network.Transportation.Germany.DVB.Route.JSON: data Route
- Network.Transportation.Germany.DVB.Route.JSON: data Stop
- Network.Transportation.Germany.DVB.Route.JSON: data StopRef
- Network.Transportation.Germany.DVB.Route.JSON: data Trip
- Network.Transportation.Germany.DVB.Route.JSON: instance FromJSON Leg
- Network.Transportation.Germany.DVB.Route.JSON: instance FromJSON LegMode
- Network.Transportation.Germany.DVB.Route.JSON: instance FromJSON Route
- Network.Transportation.Germany.DVB.Route.JSON: instance FromJSON Stop
- Network.Transportation.Germany.DVB.Route.JSON: instance FromJSON StopRef
- Network.Transportation.Germany.DVB.Route.JSON: instance FromJSON Trip
- Network.Transportation.Germany.DVB.Route.JSON: legMode :: Leg -> LegMode
- Network.Transportation.Germany.DVB.Route.JSON: legModeDesc :: LegMode -> String
- Network.Transportation.Germany.DVB.Route.JSON: legModeNumber :: LegMode -> String
- Network.Transportation.Germany.DVB.Route.JSON: legStops :: Leg -> [Stop]
- Network.Transportation.Germany.DVB.Route.JSON: routeTrips :: Route -> [Trip]
- Network.Transportation.Germany.DVB.Route.JSON: stopName :: Stop -> String
- Network.Transportation.Germany.DVB.Route.JSON: stopPlatformName :: Stop -> String
- Network.Transportation.Germany.DVB.Route.JSON: stopRef :: Stop -> StopRef
- Network.Transportation.Germany.DVB.Route.JSON: stopRefArrivalDelayMins :: StopRef -> Maybe String
- Network.Transportation.Germany.DVB.Route.JSON: stopRefArrivalTime :: StopRef -> Maybe String
- Network.Transportation.Germany.DVB.Route.JSON: stopRefDepartureDelayMins :: StopRef -> Maybe String
- Network.Transportation.Germany.DVB.Route.JSON: stopRefDepartureTime :: StopRef -> Maybe String
- Network.Transportation.Germany.DVB.Route.JSON: tripDuration :: Trip -> String
- Network.Transportation.Germany.DVB.Route.JSON: tripLegs :: Trip -> [Leg]
Files
dresdner-verkehrsbetriebe.cabal view
@@ -1,5 +1,5 @@ name: dresdner-verkehrsbetriebe-version: 0.1.0+version: 0.1.1 synopsis: Library and program for querying DVB (Dresdner Verkehrsbetriebe AG) license: MIT license-file: LICENSE@@ -13,6 +13,8 @@ exposed-modules: Network.Transportation.Germany.DVB , Network.Transportation.Germany.DVB.Route+ other-modules:+ Network.Transportation.Germany.DVB.Route.JSON build-depends: base >= 4.7 && < 4.8 , HTTP >= 4000.2 && < 4000.3
+ src/Network/Transportation/Germany/DVB/Route/JSON.hs view
@@ -0,0 +1,98 @@+-- |+-- Module: Network.Transportation.Germany.DVB.Route.JSON+-- Copyright: (C) 2015 Braden Walters+-- License: MIT (see LICENSE file)+-- Maintainer: Braden Walters <vc@braden-walters.info>+-- Stability: experimental+-- Portability: ghc++{-# LANGUAGE OverloadedStrings #-}++module Network.Transportation.Germany.DVB.Route.JSON+( Route(..)+, Trip(..)+, Leg(..)+, LegMode(..)+, Stop(..)+, StopRef(..)+) where++import Control.Applicative+import Control.Monad+import Data.Aeson+import qualified Data.Foldable as F+import qualified Data.HashMap.Strict as HMS++-- |Parsing JSON type for routes.+data Route = Route { routeTrips :: [Trip] }++instance FromJSON Route where+ parseJSON (Object obj) = Route <$>+ obj .: "trips"+ parseJSON _ = mzero++-- |Parsing JSON type for trips.+data Trip = Trip+ { tripDuration :: String+ , tripLegs :: [Leg]+ }++instance FromJSON Trip where+ parseJSON (Object obj) = Trip <$>+ obj .: "duration" <*>+ obj .: "legs"+ parseJSON _ = mzero++-- |Parsing JSON type for trip legs.+data Leg = Leg+ { legMode :: LegMode+ , legStops :: [Stop]+ }++instance FromJSON Leg where+ parseJSON (Object obj) = Leg <$>+ maybe mzero parseJSON (HMS.lookup "mode" obj) <*>+ (F.concat <$> (obj .:? "stopSeq"))+ parseJSON _ = mzero++-- |Parsing JSON type for the mode object in trip legs.+data LegMode = LegMode+ { legModeNumber :: String+ , legModeDesc :: String+ }++instance FromJSON LegMode where+ parseJSON (Object obj) = LegMode <$>+ obj .: "number" <*>+ obj .: "desc"+ parseJSON _ = mzero++-- |Parsing JSON type for stops in trips.+data Stop = Stop+ { stopName :: String+ , stopPlatformName :: String+ , stopRef :: StopRef+ }++instance FromJSON Stop where+ parseJSON (Object obj) = Stop <$>+ obj .: "nameWO" <*>+ obj .: "platformName" <*>+ maybe mzero parseJSON (HMS.lookup "ref" obj)+ parseJSON _ = mzero++-- |Parsing JSON type for the ref object in stops in trips.+data StopRef = StopRef+ { stopRefArrivalTime :: Maybe String+ , stopRefArrivalDelayMins :: Maybe String+ , stopRefDepartureTime :: Maybe String+ , stopRefDepartureDelayMins :: Maybe String+ }++instance FromJSON StopRef where+ parseJSON (Object obj) = StopRef <$>+ obj .:? "arrDateTime" <*>+ obj .:? "arrDelay" <*>+ obj .:? "depDateTime" <*>+ obj .:? "depDelay"+ parseJSON _ = mzero