about summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/mod.rs2
-rw-r--r--src/util/static_toml.rs37
2 files changed, 39 insertions, 0 deletions
diff --git a/src/util/mod.rs b/src/util/mod.rs
index e69de29bb2d1..e26eae2b89b3 100644
--- a/src/util/mod.rs
+++ b/src/util/mod.rs
@@ -0,0 +1,2 @@
+#[macro_use]
+pub mod static_toml;
diff --git a/src/util/static_toml.rs b/src/util/static_toml.rs
new file mode 100644
index 000000000000..7a930ee023c8
--- /dev/null
+++ b/src/util/static_toml.rs
@@ -0,0 +1,37 @@
+macro_rules! __static_cfg_parse {
+    (toml_file, $e:expr) => {
+        toml::from_str($e)
+    };
+
+    (json_file, $e:expr) => {
+        json::from_str($e)
+    };
+}
+
+macro_rules! __static_cfg_inner {
+    ($(#[$attr:meta])* ($($vis:tt)*) static ref $N:ident : $T:ty = $kind:ident($filename:expr); $($t:tt)*) => {
+        static RAW: &'static str = include_str!($filename);
+        lazy_static! {
+            $(#[$attr])* static ref $N: $T = __static_cfg_parse!($kind, RAW).unwrap();
+        }
+
+        static_cfg!($($t)*);
+    }
+}
+
+#[macro_export]
+macro_rules! static_cfg {
+    ($(#[$attr:meta])* static ref $N:ident : $T:ty = $kind:ident($filename:expr); $($t:tt)*) => {
+        __static_cfg_inner!($(#[$attr])* () static ref $N : $T = $kind($filename); $($t)*);
+    };
+
+    ($(#[$attr:meta])* pub static ref $N:ident : $T:ty = $kind:ident($filename:expr); $($t:tt)*) => {
+        __static_cfg_inner!($(#[$attr])* (pub) static ref $N : $T = $kind($filename); $($t)*);
+    };
+
+    ($(#[$attr:meta])* pub ($($vis:tt)+) static ref $N:ident : $T:ty = $kind:ident($filename:expr); $($t:tt)*) => {
+        __static_cfg_inner!($(#[$attr])* (pub ($($vis)+)) static ref $N : $T = $kind($filename); $($t)*);
+    };
+
+    () => ()
+}