@@ -9,8 +9,10 @@ module Servant.JQuery.Internal where
99import Control.Applicative
1010import Control.Lens
1111import Data.Char (toLower)
12+import Data.List
1213import Data.Monoid
1314import Data.Proxy
15+import Data.String.Utils
1416import GHC.TypeLits
1517import Servant.API
1618
@@ -53,7 +55,25 @@ data QueryArg = QueryArg
5355 , _argType :: ArgType
5456 } deriving (Eq, Show)
5557
56−type HeaderArg = String
58+data HeaderArg = HeaderArg
59+ { headerArgName :: String
60+ }
61+ | ReplaceHeaderArg
62+ { headerArgName :: String
63+ , headerPattern :: String
64+ } deriving (Eq)
65+
66+instance Show HeaderArg where
67+ show (HeaderArg n) = "header" <> n
68+ show (ReplaceHeaderArg n p)
69+ | pn `startswith` p = pv <> " + \"" <> rp <> "\""
70+ | pn `endswith` p = "\"" <> rp <> "\" + " <> pv
71+ | pn `isInfixOf` p = "\"" <> replace pn ("\"" <> pv <> "\"") p <> "\""
72+ | otherwise = p
73+ where
74+ pv = "header" <> n
75+ pn = "{header" <> n <> "}"
76+ rp = replace pn "" p
5777
5878data Url = Url
5979 { _path :: Path
@@ -144,7 +164,7 @@ instance (KnownSymbol sym, HasJQ sublayout)
144164 type JQ (Header sym a :> sublayout) = JQ sublayout
145165
146166 jqueryFor Proxy req =
147− jqueryFor subP (req & reqHeaders <>~ [hname])
167+ jqueryFor subP (req & reqHeaders <>~ [HeaderArg hname])
148168
149169 where hname = symbolVal (Proxy :: Proxy sym)
150170 subP = Proxy :: Proxy sublayout