diff options
Diffstat (limited to 'dhall/src/syntax/text/parser.rs')
-rw-r--r-- | dhall/src/syntax/text/parser.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/dhall/src/syntax/text/parser.rs b/dhall/src/syntax/text/parser.rs index 5686300..03211c7 100644 --- a/dhall/src/syntax/text/parser.rs +++ b/dhall/src/syntax/text/parser.rs @@ -551,14 +551,14 @@ impl DhallParser { fn http_raw(input: ParseInput) -> ParseResult<URL<Expr>> { Ok(match_nodes!(input.into_children(); - [scheme(sch), authority(auth), path(p)] => URL { + [scheme(sch), authority(auth), url_path(p)] => URL { scheme: sch, authority: auth, path: p, query: None, headers: None, }, - [scheme(sch), authority(auth), path(p), query(q)] => URL { + [scheme(sch), authority(auth), url_path(p), query(q)] => URL { scheme: sch, authority: auth, path: p, @@ -568,10 +568,28 @@ impl DhallParser { )) } + fn url_path(input: ParseInput) -> ParseResult<FilePath> { + Ok(match_nodes!(input.into_children(); + [path_component(components)..] => { + let mut file_path: Vec<_> = components.collect(); + // An empty path normalizes to "/" + if file_path.is_empty() { + file_path = vec!["".to_owned()]; + } + FilePath { file_path } + } + )) + } + fn authority(input: ParseInput) -> ParseResult<String> { Ok(input.as_str().to_owned()) } + #[alias(path_component)] + fn segment(input: ParseInput) -> ParseResult<String> { + Ok(input.as_str().to_string()) + } + fn query(input: ParseInput) -> ParseResult<String> { Ok(input.as_str().to_owned()) } |