-- |
module Strive.Actions.Segments
( getSegment
, getStarredSegments
, getSegmentEfforts
, getSegmentLeaderboard
, exploreSegments
) where
import Data.List (intercalate)
import Network.HTTP.Types (Query, toQuery)
import Strive.Client (Client)
import Strive.Internal.HTTP (get)
import Strive.Options (ExploreSegmentsOptions, GetSegmentEffortsOptions,
GetSegmentLeaderboardOptions, GetStarredSegmentsOptions)
import Strive.Types (EffortDetailed, SegmentDetailed, SegmentExplorerResponse,
SegmentLeaderboardResponse, SegmentSummary)
-- |
getSegment :: Client -> Integer -> IO (Either String SegmentDetailed)
getSegment client segmentId = get client resource query
where
resource = "api/v3/segments/" ++ show segmentId
query = [] :: Query
-- |
getStarredSegments :: Client -> GetStarredSegmentsOptions -> IO (Either String [SegmentSummary])
getStarredSegments client options = get client resource query
where
resource = "api/v3/segments/starred"
query = toQuery options
-- |
getSegmentEfforts :: Client -> Integer -> GetSegmentEffortsOptions -> IO (Either String [EffortDetailed])
getSegmentEfforts client segmentId options = get client resource query
where
resource = "api/v3/segments/" ++ show segmentId ++ "/all_efforts"
query = toQuery options
-- |
getSegmentLeaderboard :: Client -> Integer -> GetSegmentLeaderboardOptions -> IO (Either String SegmentLeaderboardResponse)
getSegmentLeaderboard client segmentId options = get client resource query
where
resource = "api/v3/segments/" ++ show segmentId ++ "/leaderboard"
query = toQuery options
-- |
exploreSegments :: Client -> (Double, Double, Double, Double) -> ExploreSegmentsOptions -> IO (Either String SegmentExplorerResponse)
exploreSegments client (south, west, north, east) options = get client resource query
where
resource = "api/v3/segments/explore"
query = toQuery
[ ("bounds", intercalate "," (map show [south, west, north, east]))
] ++ toQuery options