{-# LANGUAGE OverloadedStrings #-} -- | module Strive.Types.Efforts ( EffortDetailed (..) ) where import Data.Aeson (FromJSON, Value (Object), parseJSON, (.:), (.:?)) import Data.Text (Text) import Data.Time.Clock (UTCTime) import Strive.Enums (ResourceState) import Strive.Types.Segments (SegmentSummary) -- https://ghc.haskell.org/trac/ghc/wiki/Migration/7.10#GHCsaysTheimportof...isredundant import Control.Applicative import Prelude -- | data EffortDetailed = EffortDetailed { effortDetailed_activityId :: Integer , effortDetailed_athleteId :: Integer , effortDetailed_averageCadence :: Maybe Double , effortDetailed_averageHeartrate :: Maybe Double , effortDetailed_averageWatts :: Maybe Double , effortDetailed_distance :: Double , effortDetailed_elapsedTime :: Integer , effortDetailed_endIndex :: Integer , effortDetailed_hidden :: Maybe Bool , effortDetailed_id :: Integer , effortDetailed_komRank :: Maybe Integer , effortDetailed_maxHeartrate :: Maybe Integer , effortDetailed_movingTime :: Integer , effortDetailed_name :: Text , effortDetailed_prRank :: Maybe Integer , effortDetailed_resourceState :: ResourceState , effortDetailed_segment :: SegmentSummary , effortDetailed_startDate :: UTCTime , effortDetailed_startDateLocal :: UTCTime , effortDetailed_startIndex :: Integer } deriving Show instance FromJSON EffortDetailed where parseJSON (Object o) = EffortDetailed <$> ((o .: "activity") >>= (.: "id")) <*> ((o .: "athlete") >>= (.: "id")) <*> o .:? "average_cadence" <*> o .:? "average_heartrate" <*> o .:? "average_watts" <*> o .: "distance" <*> o .: "elapsed_time" <*> o .: "end_index" <*> o .:? "hidden" <*> o .: "id" <*> o .:? "kom_rank" <*> o .:? "max_heartrate" <*> o .: "moving_time" <*> o .: "name" <*> o .:? "pr_rank" <*> o .: "resource_state" <*> o .: "segment" <*> o .: "start_date" <*> o .: "start_date_local" <*> o .: "start_index" parseJSON _ = empty