{-# LANGUAGE OverloadedStrings #-}
module ERPNext.Client.QueryStringParams
( QueryStringParam (..)
, renderQueryStringParams
) where
import ERPNext.Client.Filters
import ERPNext.Client.Helper (urlEncode, quote, tshow)
import Data.Text hiding (map)
data QueryStringParam
= Debug Bool
| AsDict Bool
| LimitStart Int
| LimitPageLength Int
| Asc Text
| Desc Text
| Fields [Text]
| AndFilter [Filter]
| OrFilter [Filter]
renderQueryStringParam :: QueryStringParam -> Text
renderQueryStringParam :: QueryStringParam -> Text
renderQueryStringParam QueryStringParam
qsParam =
case QueryStringParam
qsParam of
Debug Bool
b -> Text
"debug=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Bool -> Text
forall a. Show a => a -> Text
tshow Bool
b
AsDict Bool
b -> Text
"as_dict=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Bool -> Text
forall a. Show a => a -> Text
tshow Bool
b
LimitStart Int
offset -> Text
"limit_start=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Show a => a -> Text
tshow (Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
0 Int
offset)
LimitPageLength Int
n -> Text
"limit=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Text
forall a. Show a => a -> Text
tshow Int
n
Asc Text
field ->
Text -> Text -> Text
renderOrderBy Text
field Text
"asc"
Desc Text
field ->
Text -> Text -> Text
renderOrderBy Text
field Text
"desc"
Fields [Text]
fields ->
[Text] -> Text
renderFields [Text]
fields
AndFilter [Filter]
filters ->
Text -> [Filter] -> Text
renderFilters Text
"filters" [Filter]
filters
OrFilter [Filter]
filters ->
Text -> [Filter] -> Text
renderFilters Text
"or_filters" [Filter]
filters
renderFields :: [Text] -> Text
renderFields :: [Text] -> Text
renderFields [Text]
fields =
Text
"fields=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
urlEncode (Text
"[" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> [Text] -> Text
intercalate Text
"," ((Text -> Text) -> [Text] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map Text -> Text
quote [Text]
fields) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"]")
renderOrderBy :: Text -> Text -> Text
renderOrderBy :: Text -> Text -> Text
renderOrderBy Text
field Text
order =
Text
"order_by=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text -> Text
urlEncode (Text
field Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
" " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
order)
renderQueryStringParams :: [QueryStringParam] -> Text
renderQueryStringParams :: [QueryStringParam] -> Text
renderQueryStringParams [QueryStringParam]
params = Text -> [Text] -> Text
intercalate Text
"&" ((QueryStringParam -> Text) -> [QueryStringParam] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map QueryStringParam -> Text
renderQueryStringParam [QueryStringParam]
params)