packages feed

network-uri-template-0.1.0.0: src/Network/URI/Template.hs

-- |
--
-- 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