network-uri-template-0.1.0.0: src/Network/URI/Template/Internal/Modifier.hs
-- |
--
-- Module : Network.URI.Template.Internal.Modifier
-- Copyright : (c) 2025 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Network.URI.Template.Internal.Modifier
( Modifier (..)
, modifierP
, modifierPretty
) where
import Prelude
import Network.URI.Template.Internal.Parse
import Network.URI.Template.Internal.Pretty
data Modifier
= Prefix Int
| Explode
deriving stock (Eq, Show)
-- |
--
-- @
-- modifier-level4 = prefix / explode
--
-- prefix = ":" max-length
-- max-length = %x31-39 0*3DIGIT ; positive integer < 10000
--
-- explode = *
-- @
modifierP :: Parser Modifier
modifierP = prefixP <|> explodeP
modifierPretty :: Modifier -> Doc ann
modifierPretty = \case
Prefix n -> ":" <> pretty n
Explode -> "*"
prefixP :: Parser Modifier
prefixP = char ':' *> (Prefix . read <$> some digitChar) <?> "prefix modifier"
explodeP :: Parser Modifier
explodeP = Explode <$ char '*' <?> "explode modifier"