-- | module Strive.Actions.Segments ( getSegment, getStarredSegments, getSegmentEfforts, getSegmentLeaderboard, exploreSegments, ) where import Data.List (intercalate) import Network.HTTP.Types (Query, toQuery) import Strive.Aliases (Latitude, Longitude, Result, SegmentId) 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 -> SegmentId -> IO (Result SegmentDetailed) getSegment client segmentId = get client resource query where resource = "api/v3/segments/" <> show segmentId query = [] :: Query -- | getStarredSegments :: Client -> GetStarredSegmentsOptions -> IO (Result [SegmentSummary]) getStarredSegments client options = get client resource query where resource = "api/v3/segments/starred" query = toQuery options -- | getSegmentEfforts :: Client -> SegmentId -> GetSegmentEffortsOptions -> IO (Result [EffortDetailed]) getSegmentEfforts client segmentId options = get client resource query where resource = "api/v3/segments/" <> show segmentId <> "/all_efforts" query = toQuery options -- | getSegmentLeaderboard :: Client -> SegmentId -> GetSegmentLeaderboardOptions -> IO (Result SegmentLeaderboardResponse) getSegmentLeaderboard client segmentId options = get client resource query where resource = "api/v3/segments/" <> show segmentId <> "/leaderboard" query = toQuery options -- | exploreSegments :: Client -> (Latitude, Longitude, Latitude, Longitude) -> ExploreSegmentsOptions -> IO (Result SegmentExplorerResponse) exploreSegments client (south, west, north, east) options = get client resource query where resource = "api/v3/segments/explore" query = toQuery [("bounds", intercalate "," (fmap show [south, west, north, east]))] <> toQuery options