2019-09-08 10:48:57 +00:00
|
|
|
{-# LANGUAGE DataKinds #-}
|
|
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
|
|
{-# LANGUAGE OverloadedStrings #-}
|
2019-09-18 13:24:23 +00:00
|
|
|
{-# LANGUAGE FlexibleContexts #-}
|
2019-09-08 15:27:38 +00:00
|
|
|
module Util where
|
2019-09-08 10:48:57 +00:00
|
|
|
|
|
|
|
import Servant hiding (addHeader)
|
2019-09-11 04:27:54 +00:00
|
|
|
import Servant.Client.Core.Request
|
2019-09-08 10:48:57 +00:00
|
|
|
import Servant.Client.Core.Request (addHeader)
|
|
|
|
|
2019-09-11 04:27:54 +00:00
|
|
|
import qualified Data.Text as T
|
|
|
|
import Data.Text.Lazy.Encoding
|
|
|
|
|
|
|
|
import Data.ByteString.Builder
|
|
|
|
|
|
|
|
import Data.List (intercalate)
|
|
|
|
import Data.List.Split (chunksOf)
|
|
|
|
|
|
|
|
import Data.String (fromString)
|
|
|
|
|
|
|
|
import Web.Cookie
|
|
|
|
|
|
|
|
import Text.Printf (printf)
|
|
|
|
|
|
|
|
setCookie
|
|
|
|
:: SetCookie
|
|
|
|
-> Request
|
|
|
|
-> Request
|
|
|
|
setCookie c = addHeader "Set-Cookie" (decodeUtf8 . toLazyByteString $ renderSetCookie c)
|
|
|
|
|
|
|
|
formatMoney :: Int -> T.Text
|
|
|
|
formatMoney amount = pre <> t <> "," <> c
|
|
|
|
where
|
|
|
|
pre = if amount < 0
|
|
|
|
then "-"
|
|
|
|
else ""
|
|
|
|
t = fromString $ reverse (intercalate "." $ chunksOf 3 $ reverse $ fst sp)
|
|
|
|
c = fromString $ snd sp
|
|
|
|
sp = tail <$>
|
|
|
|
break (== '.') (printf "%.2f" (abs amount))
|
2019-09-18 13:24:23 +00:00
|
|
|
|
|
|
|
redirect303
|
2019-10-04 07:04:23 +00:00
|
|
|
:: Link
|
|
|
|
-> ServerError
|
2019-09-18 13:24:23 +00:00
|
|
|
redirect303 link =
|
2019-10-04 07:04:23 +00:00
|
|
|
err303
|
2019-09-18 13:24:23 +00:00
|
|
|
{ errHeaders =
|
|
|
|
[ ("Location", "/" <> (fromString $ show $ linkURI $ link))
|
|
|
|
]
|
|
|
|
}
|
2019-10-04 07:04:23 +00:00
|
|
|
|
|
|
|
parseCookieText
|
|
|
|
:: T.Text
|
|
|
|
-> [(T.Text, T.Text)]
|
|
|
|
parseCookieText = map
|
|
|
|
(\x -> let (one, two) = T.breakOn "=" x in (one, T.tail two))
|
|
|
|
. T.splitOn "; "
|