From d3607cf2c5f06f95a7309df5dfb5167cac5d45c1 Mon Sep 17 00:00:00 2001 From: stuebinm Date: Mon, 12 Apr 2021 17:11:14 +0200 Subject: utils: use dhall substitutes for config types this uses my own version of dhall_rust [1], which has actual support for adding in new types in rust code, which are derived via serde, instead of just gluing in extra code for every file that is read in (in particular, this results in actually useful error messages). --- utils/Cargo.lock | 38 ++++++++++++++++++++------------------ utils/Cargo.toml | 3 ++- utils/src/main.rs | 8 ++++++-- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/utils/Cargo.lock b/utils/Cargo.lock index 244d1f1..2cfbeb3 100644 --- a/utils/Cargo.lock +++ b/utils/Cargo.lock @@ -12,9 +12,19 @@ dependencies = [ [[package]] name = "abnf" -version = "0.6.1" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d5f963d2236fd5701b660a9733bd22a5be300267955c71fa03bdf75ecb30b5" +dependencies = [ + "abnf-core", + "nom", +] + +[[package]] +name = "abnf-core" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47feb9fbcef700639ef28e04ca2a87eab8161a01a075ee227b15c90143805462" +checksum = "137c894fdb05ad3feb514cec800945cfebbb6435c73f9c2097b953e44a106273" dependencies = [ "nom", ] @@ -22,8 +32,6 @@ dependencies = [ [[package]] name = "abnf_to_pest" version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372baaa5d3a422d8816b513bcdb2c120078c8614f7ecbcc3baf34a1634bbbe2e" dependencies = [ "abnf", "indexmap", @@ -341,9 +349,7 @@ dependencies = [ [[package]] name = "dhall" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0dc4d9d9848124c8c10f24e3696f86d5249d7d2dca8ca0556cff10f001d51e8" +version = "0.10.1" dependencies = [ "abnf_to_pest", "annotate-snippets", @@ -366,11 +372,8 @@ dependencies = [ [[package]] name = "dhall_proc_macros" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf6cff1e2ddd03851652e0cde982b01dc877c9fc9da9ba25ad4241a151945f09" +version = "0.5.1" dependencies = [ - "itertools", "proc-macro2", "quote", "syn", @@ -1267,10 +1270,11 @@ checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "pretty" -version = "0.5.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60c0d9f6fc88ecdd245d90c1920ff76a430ab34303fc778d33b1d0a4c3bf6d3" +checksum = "ad9940b913ee56ddd94aec2d3cd179dd47068236f42a1a6415ccf9d880ce2a61" dependencies = [ + "arrayvec", "typed-arena", ] @@ -1627,9 +1631,7 @@ dependencies = [ [[package]] name = "serde_dhall" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01dfb806cc18b2cc347254781948862dba85e6fc2cf300b6cb321fa8fed9137" +version = "0.10.1" dependencies = [ "dhall", "dhall_proc_macros", @@ -1952,9 +1954,9 @@ dependencies = [ [[package]] name = "typed-arena" -version = "1.7.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d" +checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae" [[package]] name = "typenum" diff --git a/utils/Cargo.toml b/utils/Cargo.toml index e959f55..a254855 100644 --- a/utils/Cargo.toml +++ b/utils/Cargo.toml @@ -8,7 +8,8 @@ edition = "2018" [dependencies] serde = { version = "1.0", features = [ "derive" ] } -serde_dhall = "0.10.0" +#serde_dhall = "0.10.0" +serde_dhall = { path = "../../playground/dhall-rust/serde_dhall" } serde_json = "1.0.64" age = "0.5.1" structopt = "0.3.21" diff --git a/utils/src/main.rs b/utils/src/main.rs index 4428ac3..ea267d8 100644 --- a/utils/src/main.rs +++ b/utils/src/main.rs @@ -64,13 +64,17 @@ fn main () { // imported: just wrap our input code into a dhall "let"-statement. // Probably doesn't scale very vell, though ... let code = format!( - "let Question = {} \nlet Answers = {} \nlet Lang = {}\nin {}", + "let Question = {} \nlet Lang = {}\nin {}", Question::static_type(), - AnswerSpace::static_type(), Lang::static_type(), config_file ); match serde_dhall::from_str(&code) + .substitute_names(vec![ + ("Question".to_string(),Question::static_type()), + ("Answers".to_string(), AnswerSpace::static_type()), + ("Lang".to_string(), Lang::static_type()) + ].iter().cloned().collect()) .static_type_annotation() .parse::() { -- cgit v1.2.3