module Network.URI.Template.Internal.TemplatePart
( TemplatePart (..)
, templatePartP
, templatePartPretty
) where
import Prelude
import Data.Text (Text, pack)
import Network.URI.Template.Internal.Expression
import Network.URI.Template.Internal.Parse
import Network.URI.Template.Internal.Pretty
data TemplatePart
= Lit Text
| Exp Expression
deriving stock (TemplatePart -> TemplatePart -> Bool
(TemplatePart -> TemplatePart -> Bool)
-> (TemplatePart -> TemplatePart -> Bool) -> Eq TemplatePart
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TemplatePart -> TemplatePart -> Bool
== :: TemplatePart -> TemplatePart -> Bool
$c/= :: TemplatePart -> TemplatePart -> Bool
/= :: TemplatePart -> TemplatePart -> Bool
Eq, Int -> TemplatePart -> ShowS
[TemplatePart] -> ShowS
TemplatePart -> String
(Int -> TemplatePart -> ShowS)
-> (TemplatePart -> String)
-> ([TemplatePart] -> ShowS)
-> Show TemplatePart
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TemplatePart -> ShowS
showsPrec :: Int -> TemplatePart -> ShowS
$cshow :: TemplatePart -> String
show :: TemplatePart -> String
$cshowList :: [TemplatePart] -> ShowS
showList :: [TemplatePart] -> ShowS
Show)
templatePartP :: Parser TemplatePart
templatePartP :: Parser TemplatePart
templatePartP =
[Parser TemplatePart] -> Parser TemplatePart
forall (f :: * -> *) (m :: * -> *) a.
(Foldable f, Alternative m) =>
f (m a) -> m a
choice
[ Expression -> TemplatePart
Exp (Expression -> TemplatePart)
-> ParsecT Void Text Identity Expression -> Parser TemplatePart
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Void Text Identity Expression
expressionP Parser TemplatePart -> String -> Parser TemplatePart
forall e s (m :: * -> *) a.
MonadParsec e s m =>
m a -> String -> m a
<?> String
"template expression"
, Text -> TemplatePart
Lit (Text -> TemplatePart)
-> (String -> Text) -> String -> TemplatePart
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
pack (String -> TemplatePart)
-> ParsecT Void Text Identity String -> Parser TemplatePart
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT Void Text Identity Char
-> ParsecT Void Text Identity String
forall (m :: * -> *) a. MonadPlus m => m a -> m [a]
some ParsecT Void Text Identity Char
litChar Parser TemplatePart -> String -> Parser TemplatePart
forall e s (m :: * -> *) a.
MonadParsec e s m =>
m a -> String -> m a
<?> String
"template literal"
]
where
litChar :: Parser Char
litChar :: ParsecT Void Text Identity Char
litChar = [Token Text] -> ParsecT Void Text Identity (Token Text)
forall (f :: * -> *) e s (m :: * -> *).
(Foldable f, MonadParsec e s m) =>
f (Token s) -> m (Token s)
noneOf [Char
'\r', Char
'\n', Char
'\t', Char
' ', Char
'{']
templatePartPretty :: TemplatePart -> Doc Ann
templatePartPretty :: TemplatePart -> Doc Ann
templatePartPretty = \case
Lit Text
t -> Text -> Doc Ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Text -> Doc ann
pretty Text
t
Exp Expression
e -> Expression -> Doc Ann
expressionPretty Expression
e