-- | -- -- Module : Network.URI.Template -- Copyright : (c) 2025 Patrick Brisbin -- License : AGPL-3 -- Maintainer : pbrisbin@gmail.com -- Stability : experimental -- Portability : POSIX module Network.URI.Template ( Template , TemplateError (..) , templateErrorPretty , processTemplate -- * Template variables , module Network.URI.Template.VarName , module Network.URI.Template.VarValue ) where import Prelude import Data.Bifunctor (first) import Data.Map.Strict (Map) import Data.Text (Text) import Network.URI.Template.Expand import Network.URI.Template.Internal import Network.URI.Template.Internal.Parse import Network.URI.Template.Parse import Network.URI.Template.VarName import Network.URI.Template.VarValue newtype TemplateError = TemplateParseError ParseError templateErrorPretty :: TemplateError -> String templateErrorPretty = \case TemplateParseError pe -> errorBundlePretty pe processTemplate :: Map VarName VarValue -> Text -> Either TemplateError Text processTemplate env t = do template <- first TemplateParseError $ parseTemplate t pure $ expandTemplate env template