summaryrefslogtreecommitdiff
path: root/dhall
diff options
context:
space:
mode:
Diffstat (limited to 'dhall')
-rw-r--r--dhall/.gitignore1
-rw-r--r--dhall/Cargo.toml12
-rw-r--r--dhall/README.md10
-rw-r--r--dhall/build.rs28
-rw-r--r--dhall/src/lib.rs1
-rw-r--r--dhall/src/syntax/text/parser.rs12
6 files changed, 54 insertions, 10 deletions
diff --git a/dhall/.gitignore b/dhall/.gitignore
deleted file mode 100644
index 8a0bac6..0000000
--- a/dhall/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-src/dhall.pest
diff --git a/dhall/Cargo.toml b/dhall/Cargo.toml
index a93153d..34cf444 100644
--- a/dhall/Cargo.toml
+++ b/dhall/Cargo.toml
@@ -1,8 +1,11 @@
[package]
name = "dhall"
-version = "0.1.0"
+version = "0.1.1" # remember to update html_root_url
authors = ["NanoTech <nanotech@nanotechcorp.net>", "Nadrieril <nadrieril@users.noreply.github.com>"]
license = "BSD-2-Clause"
+description = "Implementation of the Dhall configuration language"
+readme = "README.md"
+repository = "https://github.com/Nadrieril/dhall-rust"
edition = "2018"
build = "build.rs"
@@ -12,9 +15,8 @@ hex = "0.3.2"
lazy_static = "1.4.0"
percent-encoding = "2.1.0"
pest = "2.1"
-# pest_consume = { path = "../../pest_consume/pest_consume" }
pest_consume = "1.0"
-serde = { version = "1.0" }
+serde = "1.0"
serde_cbor = "0.9.0"
smallvec = "1.0.0"
take_mut = "0.2.2"
@@ -24,6 +26,8 @@ pretty_assertions = "0.6.1"
[build-dependencies]
walkdir = "2"
-abnf_to_pest = { version = "0.1.1", path = "../abnf_to_pest" }
+abnf_to_pest = { version = "0.1.2", path = "../abnf_to_pest" }
+pest_generator = "2.1"
+quote = "1.0"
diff --git a/dhall/README.md b/dhall/README.md
new file mode 100644
index 0000000..82b3e6a
--- /dev/null
+++ b/dhall/README.md
@@ -0,0 +1,10 @@
+# `dhall`
+
+Implementation of the Dhall configuration language.
+This is an internal crate used for [`serde_dhall`], you probably want to use
+that instead.
+
+The API is very unstable and does not respect semver;
+use at your own risk.
+
+[`serde_dhall`]: https://docs.rs/serde_dhall
diff --git a/dhall/build.rs b/dhall/build.rs
index 50f423e..3021f03 100644
--- a/dhall/build.rs
+++ b/dhall/build.rs
@@ -408,9 +408,10 @@ fn generate_tests() -> std::io::Result<()> {
}
fn convert_abnf_to_pest() -> std::io::Result<()> {
+ let out_dir = env::var("OUT_DIR").unwrap();
let abnf_path = "src/dhall.abnf";
let visibility_path = "src/dhall.pest.visibility";
- let pest_path = "src/dhall.pest";
+ let grammar_path = Path::new(&out_dir).join("dhall.pest");
println!("cargo:rerun-if-changed={}", abnf_path);
println!("cargo:rerun-if-changed={}", visibility_path);
@@ -427,7 +428,7 @@ fn convert_abnf_to_pest() -> std::io::Result<()> {
}
}
- let mut file = File::create(pest_path)?;
+ let mut file = File::create(grammar_path)?;
writeln!(&mut file, "// AUTO-GENERATED FILE. See build.rs.")?;
// TODO: this is a cheat; properly support RFC3986 URLs instead
@@ -493,8 +494,31 @@ fn convert_abnf_to_pest() -> std::io::Result<()> {
Ok(())
}
+// Generate pest parser manually becaue otherwise we'd need to modify something outside of
+// OUT_DIR and that's forbidden by docs.rs.
+fn generate_pest_parser() -> std::io::Result<()> {
+ let out_dir = env::var("OUT_DIR").unwrap();
+ let grammar_path = Path::new(&out_dir).join("dhall.pest");
+ let grammar_path = grammar_path.to_str();
+ let output_path = Path::new(&out_dir).join("dhall_parser.rs");
+
+ let pest = quote::quote!(
+ #[grammar = #grammar_path]
+ struct DhallParser;
+ );
+ let derived = pest_generator::derive_parser(pest, false);
+ let file_contents = quote::quote!(
+ struct DhallParser;
+ #derived
+ );
+
+ let mut file = File::create(output_path)?;
+ writeln!(file, "{}", file_contents)
+}
+
fn main() -> std::io::Result<()> {
convert_abnf_to_pest()?;
+ generate_pest_parser()?;
generate_tests()?;
Ok(())
}
diff --git a/dhall/src/lib.rs b/dhall/src/lib.rs
index 12660b4..dfa06e7 100644
--- a/dhall/src/lib.rs
+++ b/dhall/src/lib.rs
@@ -1,3 +1,4 @@
+#![doc(html_root_url = "https://docs.rs/dhall/0.1.1")]
#![feature(trace_macros)]
#![feature(slice_patterns)]
#![feature(never_type)]
diff --git a/dhall/src/syntax/text/parser.rs b/dhall/src/syntax/text/parser.rs
index 90cb4b1..832472b 100644
--- a/dhall/src/syntax/text/parser.rs
+++ b/dhall/src/syntax/text/parser.rs
@@ -156,9 +156,15 @@ lazy_static::lazy_static! {
};
}
-#[derive(Parser)]
-#[grammar = "dhall.pest"]
-struct DhallParser;
+// Generate pest parser manually becaue otherwise we'd need to modify something outside of OUT_DIR
+// and that's forbidden by docs.rs.
+// This is equivalent to:
+// ```
+// #[derive(Parser)
+// #[grammar = "..."]
+// struct DhallParser;
+// ```
+include!(concat!(env!("OUT_DIR"), "/dhall_parser.rs"));
#[pest_consume::parser(parser = DhallParser, rule = Rule)]
impl DhallParser {