diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6823d676..11ca384f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -89,6 +89,37 @@ jobs:
command: test
args: ${{matrix.flags}}
+ nightly_features_build:
+ name: NightlyFeatureBuild
+ runs-on: ${{matrix.os}}
+ continue-on-error: ${{matrix.experimental}}
+ strategy:
+ matrix:
+ os: [ubuntu-latest]
+ flags:
+ - "--features stable_hash"
+ toolchain: [ nightly ]
+ experimental: [ false ]
+ include:
+ # smoketests for different toolchains
+ - { toolchain: nightly, os: windows-latest, experimental: false, flags: "" }
+ - { toolchain: nightly, os: macos-latest, experimental: false, flags: "" }
+ fail-fast: false
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+ - name: Setup Toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{matrix.toolchain}}
+ override: true
+ - name: Test
+ uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: ${{matrix.flags}}
+
+
# no-std builds are a bit more extensive to test
no_std_build:
name: NoStdBuild
diff --git a/.gitignore b/.gitignore
index fe87b992..10e86a86 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,6 @@ Rhai.toml
**/*.bat
doc/rhai-sync.json
doc/rhai.json
+.idea/
+.idea
+.idea/*
diff --git a/Cargo.toml b/Cargo.toml
index 3999b7de..310ceb40 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -63,6 +63,7 @@ unicode-xid-ident = ["unicode-xid"] # allow Unicode Standard Annex #31 for ident
metadata = ["serde", "serde_json", "rhai_codegen/metadata", "smartstring/serde"] # enable exporting functions metadata
internals = [] # expose internal data structures
debugging = ["internals"] # enable debugging
+stable_hash = ["std"]
serde = ["dep:serde", "smartstring/serde", "smallvec/serde"] # implement serde for rhai types
# compiling for no-std
diff --git a/build.rs b/build.rs
index 66903154..76abd9ee 100644
--- a/build.rs
+++ b/build.rs
@@ -8,20 +8,21 @@ fn main() {
// Tell Cargo that if the given environment variable changes, to rerun this build script.
println!("cargo:rerun-if-changed=build.template");
println!("cargo:rerun-if-env-changed=RHAI_AHASH_SEED");
+ if !cfg!(feature = "stable_hash") {
+ let mut contents = String::new();
- let mut contents = String::new();
+ File::open("build.template")
+ .expect("cannot open `build.template`")
+ .read_to_string(&mut contents)
+ .expect("cannot read from `build.template`");
- File::open("build.template")
- .expect("cannot open `build.template`")
- .read_to_string(&mut contents)
- .expect("cannot read from `build.template`");
+ let seed = env::var("RHAI_AHASH_SEED").map_or_else(|_| "None".into(), |s| format!("Some({s})"));
- let seed = env::var("RHAI_AHASH_SEED").map_or_else(|_| "None".into(), |s| format!("Some({s})"));
+ contents = contents.replace("{{AHASH_SEED}}", &seed);
- contents = contents.replace("{{AHASH_SEED}}", &seed);
-
- File::create("src/config.rs")
- .expect("cannot create `config.rs`")
- .write(contents.as_bytes())
- .expect("cannot write to `config.rs`");
+ File::create("src/config.rs")
+ .expect("cannot create `config.rs`")
+ .write_all(contents.as_bytes())
+ .expect("cannot write to `config.rs`");
+ }
}
diff --git a/build.template b/build.template
index 6f09909f..ed5e161d 100644
--- a/build.template
+++ b/build.template
@@ -1,7 +1,60 @@
-//! Configuration settings for this Rhai build
-//!
-//! This file is auto-generated from `build.template`
+#[cfg(feature = "stable_hash")]
+use core::cell::OnceCell;
+// [236,800,954,213], haha funny yume nikki reference
+
+#[cfg(not(feature = "stable_hash"))]
/// Fixed hashing seeds for stable hashing.
+///
/// Set to [`None`] to disable stable hashing.
-pub const AHASH_SEED: Option<[u64; 4]> = {{AHASH_SEED}};
+///
+/// See [`set_rhai_ahash_seed`] for more.
+///
+/// You can also set this at compile time by disabling `stable_hash` and setting the `RHAI_AHASH_SEED`
+/// environment variable instead.
+///
+/// E.g. `env RHAI_AHASH_SEED ="[236,800,954,213]"`
+const AHASH_SEED: Option<[u64; 4]> = {{AHASH_SEED}};
+#[cfg(feature = "stable_hash")]
+/// Fixed hashing seeds for stable hashing.
+///
+/// Set to [`None`] to disable stable hashing.
+///
+/// See [`set_rhai_ahash_seed`] for more.
+///
+/// You can also set this at compile time by disabling `stable_hash` and setting the `RHAI_AHASH_SEED`
+/// environment variable instead.
+///
+/// E.g. `env RHAI_AHASH_SEED ="[236,800,954,213]"`
+static AHASH_SEED: OnceCell