servant-util-0.1.0: src/Servant/Util/Combinators/Sorting/Client.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Servant.Util.Combinators.Sorting.Client () where
import Universum
import qualified Data.Text as T
import Servant.API (ToHttpApiData (..), (:>))
import Servant.Client.Core (Client, HasClient (..))
import Servant.Server (Tagged (..))
import Servant.Util.Combinators.Sorting.Base
instance HasClient m subApi =>
HasClient m (SortingParams provided base :> subApi) where
type Client m (SortingParams provided base :> subApi) =
SortingSpec provided base -> Client m subApi
clientWithRoute mp _ req (SortingSpec sorting) =
clientWithRoute mp (Proxy @(SortParamsExpanded provided subApi)) req
(Just $ Tagged sorting)
hoistClientMonad mp _ hst subCli = hoistClientMonad mp (Proxy @subApi) hst . subCli
instance ToHttpApiData (TaggedSortingItemsList provided) where
toUrlPiece (Tagged sorting) =
T.intercalate "," $ sorting <&> \SortingItem{..} ->
let order = case siOrder of
Ascendant -> "asc"
Descendant -> "desc"
in order <> "(" <> siName <> ")"