packages feed

blockfrost-client-core-0.1.0.0: src/Blockfrost/Client/Sorting.hs

-- | Sorting instance for HasClient

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}

module Blockfrost.Client.Sorting
  ( SortOrder (..)
  , asc
  , desc
  ) where

import Data.Proxy (Proxy (..))
import Servant.API ((:>))
import Servant.Client.Core (Client, HasClient (..))

import Blockfrost.Util.Sorting
  ( SortOrder (..)
  , Sorting
  , SortingExpanded
  , asc
  , desc
  )

instance HasClient m subApi => HasClient m (Sorting :> subApi) where
    type Client m (Sorting :> subApi) = SortOrder -> Client m subApi
    clientWithRoute pm _ req sOrder =
      clientWithRoute
        pm
        (Proxy @(SortingExpanded subApi))
        req
        (Just sOrder)

    hoistClientMonad pm _ hst subCli = hoistClientMonad pm (Proxy @subApi) hst . subCli