module Burrito.Internal.TH (uriTemplate) where import qualified Burrito.Internal.Parse as Parse import qualified Language.Haskell.TH.Quote as TH import qualified Language.Haskell.TH.Syntax as TH -- | This can be used together with the @QuasiQuotes@ language extension to -- parse a URI template at compile time. This is convenient because it allows -- you to verify the validity of the template when you compile your file as -- opposed to when you run it. -- -- >>> :set -XQuasiQuotes -- >>> import Burrito -- >>> let template = [uriTemplate|http://example/search{?query}|] -- >>> let values = [("query", stringValue "chorizo")] -- >>> expand values template -- "http://example/search?query=chorizo" -- -- Note that you cannot use escape sequences in this quasi-quoter. For example, -- this is invalid: @[uriTemplate|\\xa0|]@. You can however use percent encoded -- triples as normal. So this is valid: @[uriTemplate|%c2%a0|]@. uriTemplate :: TH.QuasiQuoter uriTemplate = TH.QuasiQuoter { TH.quoteDec = const $ fail "cannot be used as a declaration" , TH.quoteExp = maybe (fail "invalid URI template") TH.liftData . Parse.parse , TH.quotePat = const $ fail "cannot be used as a pattern" , TH.quoteType = const $ fail "cannot be used as a type" }