Url.Interpolate provides a single function, interpolate
, which takes
a URI Template string and a Dict of variables, and expands
the input string according to the rules in IETF RFC 6570,
up to Level 3 (Level 4 compliance is not provided or planned).
interpolate : String -> Dict String String -> String
Example URI template interpolation:
interpolate "<http://example.com/{path}{?x,y,empty}"> <|
Dict.fromList [("path", "hello"), ("x", "1024"), ("y", "768")]
-- "<http://example.com/hello?x=1024&y=768&empty=">
Internal note: I was surprised to find that the baseline %-encode rules for URI
templates are slightly different than the built-in encodeURIComponent
. For
instance, '!' is escaped for the template operations that use the
"unrestricted set" of unescaped characters, while the built-in does not
escape it. Thus, we rely on the Hex
library rather than Url.percentEncode
.