packages feed

pixiv-0.1.0: src/Web/Pixiv/API/PixivEntry.hs

{-# OPTIONS_HADDOCK hide, prune #-}

module Web.Pixiv.API.PixivEntry
  ( module Web.Pixiv.API.PixivEntry,
  )
where

import Data.Function ((&))
import Data.Proxy (Proxy (Proxy))
import Data.Text (Text)
import Servant.API (QueryParam, QueryParam', Required, Strict, type (:>))
import Servant.Client.Core (HasClient (..), addHeader, appendToQueryString)
import Web.Pixiv.Auth (Token (..))
import Web.Pixiv.Types (Publicity)

data PixivEntry

instance HasClient m api => HasClient m (PixivEntry :> api) where
  type Client m (PixivEntry :> api) = (Token, Maybe Text) -> Client m api
  clientWithRoute pm Proxy req = \(unToken -> token, mLanguage) ->
    clientWithRoute pm (Proxy @api) $
      req
        & addHeader @Text "User-Agent" "PixivAndroidApp/5.0.175 (Android 6.0; PixivHaskell)"
        & addHeader @Text "Authorization" ("Bearer " <> token)
        & appendToQueryString "filter" (Just "for_android")
        & maybe id (addHeader @Text "Accept-Language") mLanguage
  hoistClientMonad pm Proxy f m p =
    hoistClientMonad pm (Proxy @api) f (m p)

type OffsetParam = QueryParam "offset" Int

pageToOffset :: Int -> Int -> Maybe Int
pageToOffset perPage x
  | x > 1 = Just $ (x - 1) * perPage
  | otherwise = Nothing

type RestrictParam = QueryParam' '[Strict, Required] "restrict" Publicity