From 939b6b4e57d886941320f1337e5c77206d4ad246 Mon Sep 17 00:00:00 2001
From: Timur Gordon <31495328+timurgordon@users.noreply.github.com>
Date: Fri, 4 Apr 2025 08:28:07 +0200
Subject: [PATCH] reorganize module
---
.../rhai_engine}/Cargo.lock | 0
.../rhai_engine}/Cargo.toml | 0
.../rhai_engine}/rhaibook/LICENSE-APACHE.txt | 0
.../rhai_engine}/rhaibook/LICENSE-MIT.txt | 0
.../rhai_engine}/rhaibook/SUMMARY.md | 0
.../rhai_engine}/rhaibook/about/features.md | 0
.../rhai_engine}/rhaibook/about/index.md | 0
.../rhaibook/appendix/keywords.md | 0
.../rhaibook/appendix/literals.md | 0
.../rhaibook/appendix/operators.md | 0
.../rhai_engine}/rhaibook/context.toml | 0
.../rhai_engine}/rhaibook/engine/ast.md | 0
.../rhai_engine}/rhaibook/engine/builtin.md | 0
.../rhai_engine}/rhaibook/engine/call-fn.md | 0
.../rhai_engine}/rhaibook/engine/compile.md | 0
.../rhai_engine}/rhaibook/engine/custom-op.md | 0
.../rhaibook/engine/custom-syntax-parsers.md | 0
.../rhaibook/engine/custom-syntax.md | 0
.../rhaibook/engine/debugging/break-points.md | 0
.../rhaibook/engine/debugging/call-stack.md | 0
.../rhaibook/engine/debugging/debugger.md | 0
.../rhaibook/engine/debugging/index.md | 0
.../rhaibook/engine/debugging/server.md | 0
.../rhaibook/engine/debugging/state.md | 0
.../rhai_engine}/rhaibook/engine/def-var.md | 0
.../rhaibook/engine/disable-keywords.md | 0
.../rhaibook/engine/disable-looping.md | 0
.../rhai_engine}/rhaibook/engine/dsl.md | 0
.../rhaibook/engine/dynamic-lib.md | 0
.../rhaibook/engine/eval-context.md | 0
.../rhaibook/engine/expressions.md | 0
.../rhai_engine}/rhaibook/engine/func.md | 0
.../rhaibook/engine/hello-world.md | 0
.../rhai_engine}/rhaibook/engine/index.md | 0
.../rhaibook/engine/metadata/definitions.md | 0
.../engine/metadata/export_to_json.md | 0
.../rhaibook/engine/metadata/gen_fn_sig.md | 0
.../rhaibook/engine/metadata/index.md | 0
.../rhaibook/engine/optimize/constants.md | 0
.../rhaibook/engine/optimize/dead-code.md | 0
.../rhaibook/engine/optimize/disable.md | 0
.../rhaibook/engine/optimize/eager.md | 0
.../rhaibook/engine/optimize/index.md | 0
.../rhaibook/engine/optimize/op-eval.md | 0
.../rhaibook/engine/optimize/passes.md | 0
.../rhaibook/engine/optimize/reoptimize.md | 0
.../rhaibook/engine/optimize/rewrite.md | 0
.../rhaibook/engine/optimize/semantics.md | 0
.../rhaibook/engine/optimize/side-effects.md | 0
.../rhaibook/engine/optimize/volatility.md | 0
.../rhai_engine}/rhaibook/engine/options.md | 0
.../rhaibook/engine/precedence.md | 0
.../rhai_engine}/rhaibook/engine/raw.md | 0
.../rhai_engine}/rhaibook/engine/scope.md | 0
.../rhaibook/engine/strict-var.md | 0
.../rhaibook/engine/token-mapper.md | 0
.../rhai_engine}/rhaibook/engine/var.md | 0
.../rhai_engine}/rhaibook/index.md | 0
.../rhaibook/language/arrays-oob.md | 0
.../rhai_engine}/rhaibook/language/arrays.md | 0
.../rhaibook/language/assignment-op.md | 0
.../rhaibook/language/assignment.md | 0
.../rhaibook/language/bit-fields.md | 0
.../rhai_engine}/rhaibook/language/blobs.md | 0
.../rhaibook/language/comments.md | 0
.../rhaibook/language/constants.md | 0
.../rhai_engine}/rhaibook/language/convert.md | 0
.../rhai_engine}/rhaibook/language/do.md | 0
.../rhaibook/language/doc-comments.md | 0
.../rhaibook/language/dynamic-rust.md | 0
.../rhaibook/language/dynamic-tag.md | 0
.../rhai_engine}/rhaibook/language/dynamic.md | 0
.../rhai_engine}/rhaibook/language/eval.md | 0
.../rhai_engine}/rhaibook/language/fn-anon.md | 0
.../rhaibook/language/fn-closure.md | 0
.../rhaibook/language/fn-curry.md | 0
.../rhaibook/language/fn-metadata.md | 0
.../rhaibook/language/fn-method.md | 0
.../rhaibook/language/fn-namespaces.md | 0
.../rhaibook/language/fn-parent-scope.md | 0
.../rhai_engine}/rhaibook/language/fn-ptr.md | 0
.../rhai_engine}/rhaibook/language/for.md | 0
.../rhaibook/language/functions.md | 0
.../rhai_engine}/rhaibook/language/global.md | 0
.../rhai_engine}/rhaibook/language/if.md | 0
.../rhai_engine}/rhaibook/language/in.md | 0
.../rhai_engine}/rhaibook/language/iter.md | 0
.../rhaibook/language/iterator.md | 0
.../rhai_engine}/rhaibook/language/json.md | 0
.../rhaibook/language/keywords.md | 0
.../rhai_engine}/rhaibook/language/logic.md | 0
.../rhai_engine}/rhaibook/language/loop.md | 0
.../rhaibook/language/modules/export.md | 0
.../rhaibook/language/modules/import.md | 0
.../rhaibook/language/modules/index.md | 0
.../rhai_engine}/rhaibook/language/num-fn.md | 0
.../rhai_engine}/rhaibook/language/num-op.md | 0
.../rhai_engine}/rhaibook/language/numbers.md | 0
.../language/object-maps-missing-prop.md | 0
.../rhaibook/language/object-maps-oop.md | 0
.../rhaibook/language/object-maps.md | 0
.../rhaibook/language/overload.md | 0
.../rhaibook/language/print-debug.md | 0
.../rhai_engine}/rhaibook/language/ranges.md | 0
.../rhai_engine}/rhaibook/language/return.md | 0
.../rhai_engine}/rhaibook/language/shadow.md | 0
.../rhaibook/language/statement-expression.md | 0
.../rhaibook/language/statements.md | 0
.../rhaibook/language/string-fn.md | 0
.../rhaibook/language/string-interp.md | 0
.../rhaibook/language/strings-chars.md | 0
.../rhaibook/language/switch-expression.md | 0
.../rhai_engine}/rhaibook/language/switch.md | 0
.../rhai_engine}/rhaibook/language/throw.md | 0
.../rhaibook/language/timestamps.md | 0
.../rhaibook/language/try-catch.md | 0
.../rhai_engine}/rhaibook/language/type-of.md | 0
.../rhaibook/language/values-and-types.md | 0
.../rhaibook/language/variables.md | 0
.../rhai_engine}/rhaibook/language/while.md | 0
.../rhai_engine}/rhaibook/lib/index.md | 0
.../rhaibook/lib/rhai-autodocs.md | 0
.../rhai_engine}/rhaibook/lib/rhai-dylib.md | 0
.../rhai_engine}/rhaibook/lib/rhai-fs.md | 0
.../rhai_engine}/rhaibook/lib/rhai-ml.md | 0
.../rhai_engine}/rhaibook/lib/rhai-rand.md | 0
.../rhai_engine}/rhaibook/lib/rhai-sci.md | 0
.../rhai_engine}/rhaibook/lib/rhai-url.md | 0
.../rhai_engine}/rhaibook/links.md | 0
.../rhaibook/patterns/blocking.md | 0
.../rhai_engine}/rhaibook/patterns/builder.md | 0
.../rhai_engine}/rhaibook/patterns/config.md | 0
.../rhaibook/patterns/constants.md | 0
.../rhai_engine}/rhaibook/patterns/control.md | 0
.../rhaibook/patterns/domain-tools.md | 0
.../rhaibook/patterns/dynamic-const.md | 0
.../rhai_engine}/rhaibook/patterns/enums.md | 0
.../rhaibook/patterns/events-1.md | 0
.../rhaibook/patterns/events-2.md | 0
.../rhaibook/patterns/events-3.md | 0
.../rhai_engine}/rhaibook/patterns/events.md | 0
.../rhaibook/patterns/global-mutable-state.md | 0
.../rhaibook/patterns/hot-reload.md | 0
.../rhai_engine}/rhaibook/patterns/macros.md | 0
.../rhaibook/patterns/multi-layer.md | 0
.../rhaibook/patterns/multi-threading.md | 0
.../rhaibook/patterns/multiple.md | 0
.../rhai_engine}/rhaibook/patterns/objects.md | 0
.../rhai_engine}/rhaibook/patterns/oop.md | 0
.../rhaibook/patterns/parallel.md | 0
.../rhaibook/patterns/references.md | 0
.../rhaibook/patterns/serialize-ast.md | 0
.../rhaibook/patterns/singleton.md | 0
.../rhaibook/patterns/static-hash.md | 0
.../rhai_engine}/rhaibook/plugins/index.md | 0
.../rhai_engine}/rhaibook/ref/arrays.md | 0
.../rhaibook/ref/assignment-op.md | 0
.../rhai_engine}/rhaibook/ref/assignment.md | 0
.../rhai_engine}/rhaibook/ref/bit-fields.md | 0
.../rhai_engine}/rhaibook/ref/blobs.md | 0
.../rhai_engine}/rhaibook/ref/comments.md | 0
.../rhai_engine}/rhaibook/ref/constants.md | 0
.../rhai_engine}/rhaibook/ref/convert.md | 0
.../rhai_engine}/rhaibook/ref/do.md | 0
.../rhai_engine}/rhaibook/ref/dynamic-tag.md | 0
.../rhai_engine}/rhaibook/ref/dynamic.md | 0
.../rhai_engine}/rhaibook/ref/eval.md | 0
.../rhai_engine}/rhaibook/ref/fn-closure.md | 0
.../rhai_engine}/rhaibook/ref/fn-metadata.md | 0
.../rhai_engine}/rhaibook/ref/fn-method.md | 0
.../rhai_engine}/rhaibook/ref/fn-ptr.md | 0
.../rhai_engine}/rhaibook/ref/for.md | 0
.../rhai_engine}/rhaibook/ref/functions.md | 0
.../rhaibook/ref/getters-setters.md | 0
.../rhai_engine}/rhaibook/ref/if.md | 0
.../rhai_engine}/rhaibook/ref/index.md | 0
.../rhai_engine}/rhaibook/ref/indexing.md | 0
.../rhai_engine}/rhaibook/ref/keywords.md | 0
.../rhai_engine}/rhaibook/ref/loop.md | 0
.../rhai_engine}/rhaibook/ref/methods.md | 0
.../rhaibook/ref/modules/export.md | 0
.../rhaibook/ref/modules/import.md | 0
.../rhaibook/ref/modules/index.md | 0
.../rhai_engine}/rhaibook/ref/num-fn.md | 0
.../rhai_engine}/rhaibook/ref/num-op.md | 0
.../rhai_engine}/rhaibook/ref/numbers.md | 0
.../rhai_engine}/rhaibook/ref/object-maps.md | 0
.../rhai_engine}/rhaibook/ref/operators.md | 0
.../rhai_engine}/rhaibook/ref/overload.md | 0
.../rhai_engine}/rhaibook/ref/print-debug.md | 0
.../rhai_engine}/rhaibook/ref/ranges.md | 0
.../rhai_engine}/rhaibook/ref/return.md | 0
.../rhai_engine}/rhaibook/ref/statements.md | 0
.../rhai_engine}/rhaibook/ref/string-fn.md | 0
.../rhaibook/ref/strings-chars.md | 0
.../rhai_engine}/rhaibook/ref/switch.md | 0
.../rhai_engine}/rhaibook/ref/throw.md | 0
.../rhai_engine}/rhaibook/ref/timestamps.md | 0
.../rhai_engine}/rhaibook/ref/try-catch.md | 0
.../rhai_engine}/rhaibook/ref/type-of.md | 0
.../rhaibook/ref/values-and-types.md | 0
.../rhai_engine}/rhaibook/ref/variables.md | 0
.../rhai_engine}/rhaibook/ref/while.md | 0
.../rhai_engine}/rhaibook/rust/build-type.md | 0
.../rhai_engine}/rhaibook/rust/collections.md | 0
.../rhaibook/rust/context-restore.md | 0
.../rhai_engine}/rhaibook/rust/context.md | 0
.../rhaibook/rust/custom-types.md | 0
.../rhaibook/rust/derive-custom-type.md | 0
.../rhaibook/rust/disable-custom.md | 0
.../rhaibook/rust/dynamic-args.md | 0
.../rhaibook/rust/dynamic-return.md | 0
.../rhai_engine}/rhaibook/rust/fallible.md | 0
.../rhaibook/rust/functions-metadata.md | 0
.../rhai_engine}/rhaibook/rust/functions.md | 0
.../rhai_engine}/rhaibook/rust/generic.md | 0
.../rhaibook/rust/getters-setters.md | 0
.../rhaibook/rust/immutable-string.md | 0
.../rhai_engine}/rhaibook/rust/index.md | 0
.../rhaibook/rust/indexer-prop-fallback.md | 0
.../rhai_engine}/rhaibook/rust/indexers.md | 0
.../rhaibook/rust/methods-fn-call.md | 0
.../rhai_engine}/rhaibook/rust/methods.md | 0
.../rhai_engine}/rhaibook/rust/modules/ast.md | 0
.../rhaibook/rust/modules/create.md | 0
.../rhaibook/rust/modules/index.md | 0
.../rust/modules/resolvers/built-in.md | 0
.../rust/modules/resolvers/collection.md | 0
.../rhaibook/rust/modules/resolvers/custom.md | 0
.../rhaibook/rust/modules/resolvers/dummy.md | 0
.../rhaibook/rust/modules/resolvers/dylib.md | 0
.../rhaibook/rust/modules/resolvers/file.md | 0
.../rhaibook/rust/modules/resolvers/index.md | 0
.../rhaibook/rust/modules/resolvers/static.md | 0
.../rhaibook/rust/modules/self-contained.md | 0
.../rhai_engine}/rhaibook/rust/modules/use.md | 0
.../rhai_engine}/rhaibook/rust/operators.md | 0
.../rhai_engine}/rhaibook/rust/overloading.md | 0
.../rhai_engine}/rhaibook/rust/override.md | 0
.../rhaibook/rust/packages/builtin.md | 0
.../rhaibook/rust/packages/crate.md | 0
.../rhaibook/rust/packages/create.md | 0
.../rhaibook/rust/packages/index.md | 0
.../rhaibook/rust/print-custom.md | 0
.../rhaibook/rust/reg-custom-type.md | 0
.../rhaibook/rust/register-raw.md | 0
.../rhai_engine}/rhaibook/rust/serde.md | 0
.../rhaibook/rust/strings-interner.md | 0
.../rhai_engine}/rhaibook/rust/strings.md | 0
.../rhai_engine}/rhaibook/rust/traits.md | 0
.../rhai_engine}/rhaibook/safety/checked.md | 0
.../rhai_engine}/rhaibook/safety/index.md | 0
.../rhai_engine}/rhaibook/safety/limits.md | 0
.../rhaibook/safety/max-array-size.md | 0
.../rhaibook/safety/max-call-stack.md | 0
.../rhaibook/safety/max-functions.md | 0
.../rhaibook/safety/max-map-size.md | 0
.../rhaibook/safety/max-modules.md | 0
.../rhaibook/safety/max-operations.md | 0
.../rhaibook/safety/max-stmt-depth.md | 0
.../rhaibook/safety/max-string-size.md | 0
.../rhaibook/safety/max-variables.md | 0
.../rhai_engine}/rhaibook/safety/memory.md | 0
.../rhai_engine}/rhaibook/safety/progress.md | 0
.../rhai_engine}/rhaibook/safety/sandbox.md | 0
.../rhai_engine}/rhaibook/safety/stack.md | 0
.../rhai_engine}/rhaibook/start/bin.md | 0
.../rhaibook/start/builds/index.md | 0
.../rhaibook/start/builds/minimal.md | 0
.../rhaibook/start/builds/no-std.md | 0
.../rhaibook/start/builds/performance.md | 0
.../rhaibook/start/builds/wasm.md | 0
.../rhaibook/start/examples/index.md | 0
.../rhaibook/start/examples/rust.md | 0
.../rhaibook/start/examples/scripts.md | 0
.../rhai_engine}/rhaibook/start/features.md | 0
.../rhai_engine}/rhaibook/start/index.md | 0
.../rhai_engine}/rhaibook/start/install.md | 0
.../rhai_engine}/rhaibook/start/playground.md | 0
.../rhai_engine}/rhaibook/tools/index.md | 0
.../rhai_engine}/rhaibook/tools/lsp.md | 0
.../rhai_engine}/rhaibook/tools/playground.md | 0
.../rhai_engine}/rhaibook/tools/rhai-doc.md | 0
.../rhaiexamples/LICENSE-APACHE.txt | 0
.../rhai_engine}/rhaiexamples/LICENSE-MIT.txt | 0
.../rhai_engine}/rhaiexamples/README.md | 0
.../rhaiexamples/arrays_and_structs.rs | 0
.../rhai_engine}/rhaiexamples/callback.rs | 0
.../rhai_engine}/rhaiexamples/custom_types.rs | 0
.../rhaiexamples/custom_types_and_methods.rs | 0
.../definitions/.rhai/all_in_one.d.rhai | 0
.../.rhai/all_in_one_without_standard.d.rhai | 0
.../definitions/__builtin-operators__.d.rhai | 0
.../.rhai/definitions/__builtin__.d.rhai | 0
.../.rhai/definitions/__scope__.d.rhai | 0
.../.rhai/definitions/__static__.d.rhai | 0
.../.rhai/definitions/general_kenobi.d.rhai | 0
.../rhaiexamples/definitions/.rhai/defs.json | 0
.../rhaiexamples/definitions/main.rs | 0
.../rhaiexamples/definitions/script.rhai | 0
.../rhaiexamples/event_handler_js/main.rs | 0
.../rhaiexamples/event_handler_js/script.rhai | 0
.../rhaiexamples/event_handler_main/main.rs | 0
.../event_handler_main/script.rhai | 0
.../rhaiexamples/event_handler_map/main.rs | 0
.../event_handler_map/script.rhai | 0
.../rhai_engine}/rhaiexamples/hello.rs | 0
.../rhaiexamples/pause_and_resume.rs | 0
.../rhai_engine}/rhaiexamples/reuse_scope.rs | 0
.../rhai_engine}/rhaiexamples/serde.rs | 0
.../rhai_engine}/rhaiexamples/simple_fn.rs | 0
.../rhai_engine}/rhaiexamples/strings.rs | 0
.../rhai_engine}/rhaiexamples/threading.rs | 0
.../rhai_engine}/specs/instructions_engine.md | 0
.../rhai_engine}/src/lib.rs | 0
.../rhai_engine}/src/main.rs | 0
.../rhai_engine}/src/simple_example.rs | 0
.../src/terra_integration/README.md | 0
.../src/terra_integration/example.rs | 0
.../rhai_engine}/src/terra_integration/mod.rs | 0
.../src/terra_integration/script_manager.rs | 0
.../terra_integration/scripts/math_utils.rhai | 0
.../scripts/string_utils.rhai | 0
.../terra_integration/scripts/test_utils.rhai | 0
.../terra_integration/templates/example.terra | 0
.../src/terra_integration/terra_renderer.rs | 0
.../rhai_engine}/src/test_dynamic_loading.rs | 0
.../calendar/.cargo/config.toml | 0
components/calendar/Cargo.lock | 1546 ++++++++++++++++
components/calendar/Cargo.toml | 17 +
.../calendar/README.md | 0
.../calendar/develop.sh | 4 +-
.../calendar/examples/server.rs | 7 +-
.../calendar/src/controller/calendar.rs | 33 +
components/calendar/src/lib.rs | 19 +
components/calendar/src/main.rs | 14 +
.../src/templates/get_calendars.html.tera | 1 +
components/website/.cargo/config.toml | 2 +
.../website}/Cargo.lock | 10 +
.../website}/Cargo.toml | 3 +-
components/website/README.md | 51 +
components/website/develop.sh | 11 +
components/website/examples/server.rs | 119 ++
components/website/src/controller/calendar.rs | 33 +
.../website}/src/main.rs | 3 +
.../src/templates/get_calendars.html.tera | 17 +
.../calendar/backend => database}/Cargo.lock | 0
.../calendar/backend => database}/Cargo.toml | 0
.../backend => database}/data/calendars.json | 0
.../backend => database}/data/events.json | 0
.../backend => database}/data/users.json | 0
.../calendar/backend => database}/main.rhai | 0
.../calendar/backend => database}/main.rs | 0
.../models/calendar_model.rhai | 0
.../models/event_model.rhai | 0
.../models/user_model.rhai | 0
.../scripts/calendars.rhai | 0
.../backend => database}/scripts/events.rhai | 0
.../backend => database}/scripts/users.rhai | 0
.../backend => database}/scripts/utils.rhai | 0
devtools/reloadd/Cargo.lock | 1320 ++++++++++++++
devtools/reloadd/README.md | 124 ++
devtools/reloadd/src/main.rs | 227 ++-
.../calendar/src/controller/calendar.rs | 121 --
rhai_tera/Cargo.lock | 1119 ++++++++++++
rhai_tera/Cargo.toml | 10 +
rhai_tera/src/lib.rs | 65 +
server/Cargo.lock | 1563 +++++++++++++++++
server/Cargo.toml | 17 +
server/README.md | 51 +
server/develop.sh | 11 +
server/src/main.rs | 80 +
utils/Cargo.lock | 1119 ++++++++++++
utils/Cargo.toml | 12 +
utils/src/lib.rs | 42 +
375 files changed, 7580 insertions(+), 191 deletions(-)
rename {rhai_engine => _archive/rhai_engine}/Cargo.lock (100%)
rename {rhai_engine => _archive/rhai_engine}/Cargo.toml (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/LICENSE-APACHE.txt (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/LICENSE-MIT.txt (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/SUMMARY.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/about/features.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/about/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/appendix/keywords.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/appendix/literals.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/appendix/operators.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/context.toml (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/ast.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/builtin.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/call-fn.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/compile.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/custom-op.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/custom-syntax-parsers.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/custom-syntax.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/debugging/break-points.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/debugging/call-stack.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/debugging/debugger.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/debugging/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/debugging/server.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/debugging/state.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/def-var.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/disable-keywords.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/disable-looping.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/dsl.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/dynamic-lib.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/eval-context.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/expressions.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/func.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/hello-world.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/metadata/definitions.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/metadata/export_to_json.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/metadata/gen_fn_sig.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/metadata/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/constants.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/dead-code.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/disable.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/eager.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/op-eval.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/passes.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/reoptimize.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/rewrite.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/semantics.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/side-effects.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/optimize/volatility.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/options.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/precedence.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/raw.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/scope.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/strict-var.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/token-mapper.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/engine/var.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/arrays-oob.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/arrays.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/assignment-op.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/assignment.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/bit-fields.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/blobs.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/comments.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/constants.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/convert.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/do.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/doc-comments.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/dynamic-rust.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/dynamic-tag.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/dynamic.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/eval.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-anon.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-closure.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-curry.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-metadata.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-method.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-namespaces.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-parent-scope.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/fn-ptr.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/for.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/functions.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/global.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/if.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/in.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/iter.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/iterator.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/json.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/keywords.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/logic.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/loop.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/modules/export.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/modules/import.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/modules/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/num-fn.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/num-op.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/numbers.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/object-maps-missing-prop.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/object-maps-oop.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/object-maps.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/overload.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/print-debug.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/ranges.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/return.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/shadow.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/statement-expression.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/statements.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/string-fn.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/string-interp.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/strings-chars.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/switch-expression.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/switch.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/throw.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/timestamps.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/try-catch.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/type-of.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/values-and-types.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/variables.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/language/while.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-autodocs.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-dylib.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-fs.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-ml.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-rand.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-sci.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/lib/rhai-url.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/links.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/blocking.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/builder.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/config.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/constants.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/control.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/domain-tools.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/dynamic-const.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/enums.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/events-1.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/events-2.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/events-3.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/events.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/global-mutable-state.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/hot-reload.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/macros.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/multi-layer.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/multi-threading.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/multiple.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/objects.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/oop.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/parallel.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/references.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/serialize-ast.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/singleton.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/patterns/static-hash.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/plugins/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/arrays.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/assignment-op.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/assignment.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/bit-fields.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/blobs.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/comments.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/constants.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/convert.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/do.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/dynamic-tag.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/dynamic.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/eval.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/fn-closure.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/fn-metadata.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/fn-method.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/fn-ptr.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/for.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/functions.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/getters-setters.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/if.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/indexing.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/keywords.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/loop.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/methods.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/modules/export.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/modules/import.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/modules/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/num-fn.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/num-op.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/numbers.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/object-maps.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/operators.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/overload.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/print-debug.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/ranges.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/return.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/statements.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/string-fn.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/strings-chars.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/switch.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/throw.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/timestamps.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/try-catch.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/type-of.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/values-and-types.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/variables.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/ref/while.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/build-type.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/collections.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/context-restore.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/context.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/custom-types.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/derive-custom-type.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/disable-custom.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/dynamic-args.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/dynamic-return.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/fallible.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/functions-metadata.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/functions.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/generic.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/getters-setters.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/immutable-string.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/indexer-prop-fallback.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/indexers.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/methods-fn-call.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/methods.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/ast.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/create.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/built-in.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/collection.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/custom.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/dummy.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/dylib.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/file.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/resolvers/static.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/self-contained.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/modules/use.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/operators.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/overloading.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/override.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/packages/builtin.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/packages/crate.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/packages/create.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/packages/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/print-custom.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/reg-custom-type.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/register-raw.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/serde.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/strings-interner.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/strings.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/rust/traits.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/checked.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/limits.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-array-size.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-call-stack.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-functions.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-map-size.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-modules.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-operations.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-stmt-depth.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-string-size.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/max-variables.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/memory.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/progress.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/sandbox.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/safety/stack.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/bin.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/builds/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/builds/minimal.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/builds/no-std.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/builds/performance.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/builds/wasm.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/examples/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/examples/rust.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/examples/scripts.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/features.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/install.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/start/playground.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/tools/index.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/tools/lsp.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/tools/playground.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaibook/tools/rhai-doc.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/LICENSE-APACHE.txt (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/LICENSE-MIT.txt (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/README.md (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/arrays_and_structs.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/callback.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/custom_types.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/custom_types_and_methods.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/all_in_one.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/all_in_one_without_standard.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/definitions/__builtin-operators__.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/definitions/__builtin__.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/definitions/__scope__.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/definitions/__static__.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/definitions/general_kenobi.d.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/.rhai/defs.json (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/main.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/definitions/script.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/event_handler_js/main.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/event_handler_js/script.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/event_handler_main/main.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/event_handler_main/script.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/event_handler_map/main.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/event_handler_map/script.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/hello.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/pause_and_resume.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/reuse_scope.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/serde.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/simple_fn.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/strings.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/rhaiexamples/threading.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/specs/instructions_engine.md (100%)
rename {rhai_engine => _archive/rhai_engine}/src/lib.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/main.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/simple_example.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/README.md (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/example.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/mod.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/script_manager.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/scripts/math_utils.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/scripts/string_utils.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/scripts/test_utils.rhai (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/templates/example.terra (100%)
rename {rhai_engine => _archive/rhai_engine}/src/terra_integration/terra_renderer.rs (100%)
rename {rhai_engine => _archive/rhai_engine}/src/test_dynamic_loading.rs (100%)
rename {examples/calendar/components => components}/calendar/.cargo/config.toml (100%)
create mode 100644 components/calendar/Cargo.lock
create mode 100644 components/calendar/Cargo.toml
rename {examples/calendar/components => components}/calendar/README.md (100%)
rename {examples/calendar/components => components}/calendar/develop.sh (68%)
rename {examples/calendar/components => components}/calendar/examples/server.rs (96%)
create mode 100644 components/calendar/src/controller/calendar.rs
create mode 100644 components/calendar/src/lib.rs
create mode 100644 components/calendar/src/main.rs
rename {examples/calendar/components => components}/calendar/src/templates/get_calendars.html.tera (87%)
create mode 100644 components/website/.cargo/config.toml
rename {examples/calendar/components/calendar => components/website}/Cargo.lock (99%)
rename {examples/calendar/components/calendar => components/website}/Cargo.toml (85%)
create mode 100644 components/website/README.md
create mode 100755 components/website/develop.sh
create mode 100644 components/website/examples/server.rs
create mode 100644 components/website/src/controller/calendar.rs
rename {examples/calendar/components/calendar => components/website}/src/main.rs (96%)
create mode 100644 components/website/src/templates/get_calendars.html.tera
rename {examples/calendar/backend => database}/Cargo.lock (100%)
rename {examples/calendar/backend => database}/Cargo.toml (100%)
rename {examples/calendar/backend => database}/data/calendars.json (100%)
rename {examples/calendar/backend => database}/data/events.json (100%)
rename {examples/calendar/backend => database}/data/users.json (100%)
rename {examples/calendar/backend => database}/main.rhai (100%)
rename {examples/calendar/backend => database}/main.rs (100%)
rename {examples/calendar/backend => database}/models/calendar_model.rhai (100%)
rename {examples/calendar/backend => database}/models/event_model.rhai (100%)
rename {examples/calendar/backend => database}/models/user_model.rhai (100%)
rename {examples/calendar/backend => database}/scripts/calendars.rhai (100%)
rename {examples/calendar/backend => database}/scripts/events.rhai (100%)
rename {examples/calendar/backend => database}/scripts/users.rhai (100%)
rename {examples/calendar/backend => database}/scripts/utils.rhai (100%)
create mode 100644 devtools/reloadd/Cargo.lock
create mode 100644 devtools/reloadd/README.md
delete mode 100644 examples/calendar/components/calendar/src/controller/calendar.rs
create mode 100644 rhai_tera/Cargo.lock
create mode 100644 rhai_tera/Cargo.toml
create mode 100644 rhai_tera/src/lib.rs
create mode 100644 server/Cargo.lock
create mode 100644 server/Cargo.toml
create mode 100644 server/README.md
create mode 100755 server/develop.sh
create mode 100644 server/src/main.rs
create mode 100644 utils/Cargo.lock
create mode 100644 utils/Cargo.toml
create mode 100644 utils/src/lib.rs
diff --git a/rhai_engine/Cargo.lock b/_archive/rhai_engine/Cargo.lock
similarity index 100%
rename from rhai_engine/Cargo.lock
rename to _archive/rhai_engine/Cargo.lock
diff --git a/rhai_engine/Cargo.toml b/_archive/rhai_engine/Cargo.toml
similarity index 100%
rename from rhai_engine/Cargo.toml
rename to _archive/rhai_engine/Cargo.toml
diff --git a/rhai_engine/rhaibook/LICENSE-APACHE.txt b/_archive/rhai_engine/rhaibook/LICENSE-APACHE.txt
similarity index 100%
rename from rhai_engine/rhaibook/LICENSE-APACHE.txt
rename to _archive/rhai_engine/rhaibook/LICENSE-APACHE.txt
diff --git a/rhai_engine/rhaibook/LICENSE-MIT.txt b/_archive/rhai_engine/rhaibook/LICENSE-MIT.txt
similarity index 100%
rename from rhai_engine/rhaibook/LICENSE-MIT.txt
rename to _archive/rhai_engine/rhaibook/LICENSE-MIT.txt
diff --git a/rhai_engine/rhaibook/SUMMARY.md b/_archive/rhai_engine/rhaibook/SUMMARY.md
similarity index 100%
rename from rhai_engine/rhaibook/SUMMARY.md
rename to _archive/rhai_engine/rhaibook/SUMMARY.md
diff --git a/rhai_engine/rhaibook/about/features.md b/_archive/rhai_engine/rhaibook/about/features.md
similarity index 100%
rename from rhai_engine/rhaibook/about/features.md
rename to _archive/rhai_engine/rhaibook/about/features.md
diff --git a/rhai_engine/rhaibook/about/index.md b/_archive/rhai_engine/rhaibook/about/index.md
similarity index 100%
rename from rhai_engine/rhaibook/about/index.md
rename to _archive/rhai_engine/rhaibook/about/index.md
diff --git a/rhai_engine/rhaibook/appendix/keywords.md b/_archive/rhai_engine/rhaibook/appendix/keywords.md
similarity index 100%
rename from rhai_engine/rhaibook/appendix/keywords.md
rename to _archive/rhai_engine/rhaibook/appendix/keywords.md
diff --git a/rhai_engine/rhaibook/appendix/literals.md b/_archive/rhai_engine/rhaibook/appendix/literals.md
similarity index 100%
rename from rhai_engine/rhaibook/appendix/literals.md
rename to _archive/rhai_engine/rhaibook/appendix/literals.md
diff --git a/rhai_engine/rhaibook/appendix/operators.md b/_archive/rhai_engine/rhaibook/appendix/operators.md
similarity index 100%
rename from rhai_engine/rhaibook/appendix/operators.md
rename to _archive/rhai_engine/rhaibook/appendix/operators.md
diff --git a/rhai_engine/rhaibook/context.toml b/_archive/rhai_engine/rhaibook/context.toml
similarity index 100%
rename from rhai_engine/rhaibook/context.toml
rename to _archive/rhai_engine/rhaibook/context.toml
diff --git a/rhai_engine/rhaibook/engine/ast.md b/_archive/rhai_engine/rhaibook/engine/ast.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/ast.md
rename to _archive/rhai_engine/rhaibook/engine/ast.md
diff --git a/rhai_engine/rhaibook/engine/builtin.md b/_archive/rhai_engine/rhaibook/engine/builtin.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/builtin.md
rename to _archive/rhai_engine/rhaibook/engine/builtin.md
diff --git a/rhai_engine/rhaibook/engine/call-fn.md b/_archive/rhai_engine/rhaibook/engine/call-fn.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/call-fn.md
rename to _archive/rhai_engine/rhaibook/engine/call-fn.md
diff --git a/rhai_engine/rhaibook/engine/compile.md b/_archive/rhai_engine/rhaibook/engine/compile.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/compile.md
rename to _archive/rhai_engine/rhaibook/engine/compile.md
diff --git a/rhai_engine/rhaibook/engine/custom-op.md b/_archive/rhai_engine/rhaibook/engine/custom-op.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/custom-op.md
rename to _archive/rhai_engine/rhaibook/engine/custom-op.md
diff --git a/rhai_engine/rhaibook/engine/custom-syntax-parsers.md b/_archive/rhai_engine/rhaibook/engine/custom-syntax-parsers.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/custom-syntax-parsers.md
rename to _archive/rhai_engine/rhaibook/engine/custom-syntax-parsers.md
diff --git a/rhai_engine/rhaibook/engine/custom-syntax.md b/_archive/rhai_engine/rhaibook/engine/custom-syntax.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/custom-syntax.md
rename to _archive/rhai_engine/rhaibook/engine/custom-syntax.md
diff --git a/rhai_engine/rhaibook/engine/debugging/break-points.md b/_archive/rhai_engine/rhaibook/engine/debugging/break-points.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/debugging/break-points.md
rename to _archive/rhai_engine/rhaibook/engine/debugging/break-points.md
diff --git a/rhai_engine/rhaibook/engine/debugging/call-stack.md b/_archive/rhai_engine/rhaibook/engine/debugging/call-stack.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/debugging/call-stack.md
rename to _archive/rhai_engine/rhaibook/engine/debugging/call-stack.md
diff --git a/rhai_engine/rhaibook/engine/debugging/debugger.md b/_archive/rhai_engine/rhaibook/engine/debugging/debugger.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/debugging/debugger.md
rename to _archive/rhai_engine/rhaibook/engine/debugging/debugger.md
diff --git a/rhai_engine/rhaibook/engine/debugging/index.md b/_archive/rhai_engine/rhaibook/engine/debugging/index.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/debugging/index.md
rename to _archive/rhai_engine/rhaibook/engine/debugging/index.md
diff --git a/rhai_engine/rhaibook/engine/debugging/server.md b/_archive/rhai_engine/rhaibook/engine/debugging/server.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/debugging/server.md
rename to _archive/rhai_engine/rhaibook/engine/debugging/server.md
diff --git a/rhai_engine/rhaibook/engine/debugging/state.md b/_archive/rhai_engine/rhaibook/engine/debugging/state.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/debugging/state.md
rename to _archive/rhai_engine/rhaibook/engine/debugging/state.md
diff --git a/rhai_engine/rhaibook/engine/def-var.md b/_archive/rhai_engine/rhaibook/engine/def-var.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/def-var.md
rename to _archive/rhai_engine/rhaibook/engine/def-var.md
diff --git a/rhai_engine/rhaibook/engine/disable-keywords.md b/_archive/rhai_engine/rhaibook/engine/disable-keywords.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/disable-keywords.md
rename to _archive/rhai_engine/rhaibook/engine/disable-keywords.md
diff --git a/rhai_engine/rhaibook/engine/disable-looping.md b/_archive/rhai_engine/rhaibook/engine/disable-looping.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/disable-looping.md
rename to _archive/rhai_engine/rhaibook/engine/disable-looping.md
diff --git a/rhai_engine/rhaibook/engine/dsl.md b/_archive/rhai_engine/rhaibook/engine/dsl.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/dsl.md
rename to _archive/rhai_engine/rhaibook/engine/dsl.md
diff --git a/rhai_engine/rhaibook/engine/dynamic-lib.md b/_archive/rhai_engine/rhaibook/engine/dynamic-lib.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/dynamic-lib.md
rename to _archive/rhai_engine/rhaibook/engine/dynamic-lib.md
diff --git a/rhai_engine/rhaibook/engine/eval-context.md b/_archive/rhai_engine/rhaibook/engine/eval-context.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/eval-context.md
rename to _archive/rhai_engine/rhaibook/engine/eval-context.md
diff --git a/rhai_engine/rhaibook/engine/expressions.md b/_archive/rhai_engine/rhaibook/engine/expressions.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/expressions.md
rename to _archive/rhai_engine/rhaibook/engine/expressions.md
diff --git a/rhai_engine/rhaibook/engine/func.md b/_archive/rhai_engine/rhaibook/engine/func.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/func.md
rename to _archive/rhai_engine/rhaibook/engine/func.md
diff --git a/rhai_engine/rhaibook/engine/hello-world.md b/_archive/rhai_engine/rhaibook/engine/hello-world.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/hello-world.md
rename to _archive/rhai_engine/rhaibook/engine/hello-world.md
diff --git a/rhai_engine/rhaibook/engine/index.md b/_archive/rhai_engine/rhaibook/engine/index.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/index.md
rename to _archive/rhai_engine/rhaibook/engine/index.md
diff --git a/rhai_engine/rhaibook/engine/metadata/definitions.md b/_archive/rhai_engine/rhaibook/engine/metadata/definitions.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/metadata/definitions.md
rename to _archive/rhai_engine/rhaibook/engine/metadata/definitions.md
diff --git a/rhai_engine/rhaibook/engine/metadata/export_to_json.md b/_archive/rhai_engine/rhaibook/engine/metadata/export_to_json.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/metadata/export_to_json.md
rename to _archive/rhai_engine/rhaibook/engine/metadata/export_to_json.md
diff --git a/rhai_engine/rhaibook/engine/metadata/gen_fn_sig.md b/_archive/rhai_engine/rhaibook/engine/metadata/gen_fn_sig.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/metadata/gen_fn_sig.md
rename to _archive/rhai_engine/rhaibook/engine/metadata/gen_fn_sig.md
diff --git a/rhai_engine/rhaibook/engine/metadata/index.md b/_archive/rhai_engine/rhaibook/engine/metadata/index.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/metadata/index.md
rename to _archive/rhai_engine/rhaibook/engine/metadata/index.md
diff --git a/rhai_engine/rhaibook/engine/optimize/constants.md b/_archive/rhai_engine/rhaibook/engine/optimize/constants.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/constants.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/constants.md
diff --git a/rhai_engine/rhaibook/engine/optimize/dead-code.md b/_archive/rhai_engine/rhaibook/engine/optimize/dead-code.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/dead-code.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/dead-code.md
diff --git a/rhai_engine/rhaibook/engine/optimize/disable.md b/_archive/rhai_engine/rhaibook/engine/optimize/disable.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/disable.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/disable.md
diff --git a/rhai_engine/rhaibook/engine/optimize/eager.md b/_archive/rhai_engine/rhaibook/engine/optimize/eager.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/eager.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/eager.md
diff --git a/rhai_engine/rhaibook/engine/optimize/index.md b/_archive/rhai_engine/rhaibook/engine/optimize/index.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/index.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/index.md
diff --git a/rhai_engine/rhaibook/engine/optimize/op-eval.md b/_archive/rhai_engine/rhaibook/engine/optimize/op-eval.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/op-eval.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/op-eval.md
diff --git a/rhai_engine/rhaibook/engine/optimize/passes.md b/_archive/rhai_engine/rhaibook/engine/optimize/passes.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/passes.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/passes.md
diff --git a/rhai_engine/rhaibook/engine/optimize/reoptimize.md b/_archive/rhai_engine/rhaibook/engine/optimize/reoptimize.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/reoptimize.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/reoptimize.md
diff --git a/rhai_engine/rhaibook/engine/optimize/rewrite.md b/_archive/rhai_engine/rhaibook/engine/optimize/rewrite.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/rewrite.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/rewrite.md
diff --git a/rhai_engine/rhaibook/engine/optimize/semantics.md b/_archive/rhai_engine/rhaibook/engine/optimize/semantics.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/semantics.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/semantics.md
diff --git a/rhai_engine/rhaibook/engine/optimize/side-effects.md b/_archive/rhai_engine/rhaibook/engine/optimize/side-effects.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/side-effects.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/side-effects.md
diff --git a/rhai_engine/rhaibook/engine/optimize/volatility.md b/_archive/rhai_engine/rhaibook/engine/optimize/volatility.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/optimize/volatility.md
rename to _archive/rhai_engine/rhaibook/engine/optimize/volatility.md
diff --git a/rhai_engine/rhaibook/engine/options.md b/_archive/rhai_engine/rhaibook/engine/options.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/options.md
rename to _archive/rhai_engine/rhaibook/engine/options.md
diff --git a/rhai_engine/rhaibook/engine/precedence.md b/_archive/rhai_engine/rhaibook/engine/precedence.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/precedence.md
rename to _archive/rhai_engine/rhaibook/engine/precedence.md
diff --git a/rhai_engine/rhaibook/engine/raw.md b/_archive/rhai_engine/rhaibook/engine/raw.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/raw.md
rename to _archive/rhai_engine/rhaibook/engine/raw.md
diff --git a/rhai_engine/rhaibook/engine/scope.md b/_archive/rhai_engine/rhaibook/engine/scope.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/scope.md
rename to _archive/rhai_engine/rhaibook/engine/scope.md
diff --git a/rhai_engine/rhaibook/engine/strict-var.md b/_archive/rhai_engine/rhaibook/engine/strict-var.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/strict-var.md
rename to _archive/rhai_engine/rhaibook/engine/strict-var.md
diff --git a/rhai_engine/rhaibook/engine/token-mapper.md b/_archive/rhai_engine/rhaibook/engine/token-mapper.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/token-mapper.md
rename to _archive/rhai_engine/rhaibook/engine/token-mapper.md
diff --git a/rhai_engine/rhaibook/engine/var.md b/_archive/rhai_engine/rhaibook/engine/var.md
similarity index 100%
rename from rhai_engine/rhaibook/engine/var.md
rename to _archive/rhai_engine/rhaibook/engine/var.md
diff --git a/rhai_engine/rhaibook/index.md b/_archive/rhai_engine/rhaibook/index.md
similarity index 100%
rename from rhai_engine/rhaibook/index.md
rename to _archive/rhai_engine/rhaibook/index.md
diff --git a/rhai_engine/rhaibook/language/arrays-oob.md b/_archive/rhai_engine/rhaibook/language/arrays-oob.md
similarity index 100%
rename from rhai_engine/rhaibook/language/arrays-oob.md
rename to _archive/rhai_engine/rhaibook/language/arrays-oob.md
diff --git a/rhai_engine/rhaibook/language/arrays.md b/_archive/rhai_engine/rhaibook/language/arrays.md
similarity index 100%
rename from rhai_engine/rhaibook/language/arrays.md
rename to _archive/rhai_engine/rhaibook/language/arrays.md
diff --git a/rhai_engine/rhaibook/language/assignment-op.md b/_archive/rhai_engine/rhaibook/language/assignment-op.md
similarity index 100%
rename from rhai_engine/rhaibook/language/assignment-op.md
rename to _archive/rhai_engine/rhaibook/language/assignment-op.md
diff --git a/rhai_engine/rhaibook/language/assignment.md b/_archive/rhai_engine/rhaibook/language/assignment.md
similarity index 100%
rename from rhai_engine/rhaibook/language/assignment.md
rename to _archive/rhai_engine/rhaibook/language/assignment.md
diff --git a/rhai_engine/rhaibook/language/bit-fields.md b/_archive/rhai_engine/rhaibook/language/bit-fields.md
similarity index 100%
rename from rhai_engine/rhaibook/language/bit-fields.md
rename to _archive/rhai_engine/rhaibook/language/bit-fields.md
diff --git a/rhai_engine/rhaibook/language/blobs.md b/_archive/rhai_engine/rhaibook/language/blobs.md
similarity index 100%
rename from rhai_engine/rhaibook/language/blobs.md
rename to _archive/rhai_engine/rhaibook/language/blobs.md
diff --git a/rhai_engine/rhaibook/language/comments.md b/_archive/rhai_engine/rhaibook/language/comments.md
similarity index 100%
rename from rhai_engine/rhaibook/language/comments.md
rename to _archive/rhai_engine/rhaibook/language/comments.md
diff --git a/rhai_engine/rhaibook/language/constants.md b/_archive/rhai_engine/rhaibook/language/constants.md
similarity index 100%
rename from rhai_engine/rhaibook/language/constants.md
rename to _archive/rhai_engine/rhaibook/language/constants.md
diff --git a/rhai_engine/rhaibook/language/convert.md b/_archive/rhai_engine/rhaibook/language/convert.md
similarity index 100%
rename from rhai_engine/rhaibook/language/convert.md
rename to _archive/rhai_engine/rhaibook/language/convert.md
diff --git a/rhai_engine/rhaibook/language/do.md b/_archive/rhai_engine/rhaibook/language/do.md
similarity index 100%
rename from rhai_engine/rhaibook/language/do.md
rename to _archive/rhai_engine/rhaibook/language/do.md
diff --git a/rhai_engine/rhaibook/language/doc-comments.md b/_archive/rhai_engine/rhaibook/language/doc-comments.md
similarity index 100%
rename from rhai_engine/rhaibook/language/doc-comments.md
rename to _archive/rhai_engine/rhaibook/language/doc-comments.md
diff --git a/rhai_engine/rhaibook/language/dynamic-rust.md b/_archive/rhai_engine/rhaibook/language/dynamic-rust.md
similarity index 100%
rename from rhai_engine/rhaibook/language/dynamic-rust.md
rename to _archive/rhai_engine/rhaibook/language/dynamic-rust.md
diff --git a/rhai_engine/rhaibook/language/dynamic-tag.md b/_archive/rhai_engine/rhaibook/language/dynamic-tag.md
similarity index 100%
rename from rhai_engine/rhaibook/language/dynamic-tag.md
rename to _archive/rhai_engine/rhaibook/language/dynamic-tag.md
diff --git a/rhai_engine/rhaibook/language/dynamic.md b/_archive/rhai_engine/rhaibook/language/dynamic.md
similarity index 100%
rename from rhai_engine/rhaibook/language/dynamic.md
rename to _archive/rhai_engine/rhaibook/language/dynamic.md
diff --git a/rhai_engine/rhaibook/language/eval.md b/_archive/rhai_engine/rhaibook/language/eval.md
similarity index 100%
rename from rhai_engine/rhaibook/language/eval.md
rename to _archive/rhai_engine/rhaibook/language/eval.md
diff --git a/rhai_engine/rhaibook/language/fn-anon.md b/_archive/rhai_engine/rhaibook/language/fn-anon.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-anon.md
rename to _archive/rhai_engine/rhaibook/language/fn-anon.md
diff --git a/rhai_engine/rhaibook/language/fn-closure.md b/_archive/rhai_engine/rhaibook/language/fn-closure.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-closure.md
rename to _archive/rhai_engine/rhaibook/language/fn-closure.md
diff --git a/rhai_engine/rhaibook/language/fn-curry.md b/_archive/rhai_engine/rhaibook/language/fn-curry.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-curry.md
rename to _archive/rhai_engine/rhaibook/language/fn-curry.md
diff --git a/rhai_engine/rhaibook/language/fn-metadata.md b/_archive/rhai_engine/rhaibook/language/fn-metadata.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-metadata.md
rename to _archive/rhai_engine/rhaibook/language/fn-metadata.md
diff --git a/rhai_engine/rhaibook/language/fn-method.md b/_archive/rhai_engine/rhaibook/language/fn-method.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-method.md
rename to _archive/rhai_engine/rhaibook/language/fn-method.md
diff --git a/rhai_engine/rhaibook/language/fn-namespaces.md b/_archive/rhai_engine/rhaibook/language/fn-namespaces.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-namespaces.md
rename to _archive/rhai_engine/rhaibook/language/fn-namespaces.md
diff --git a/rhai_engine/rhaibook/language/fn-parent-scope.md b/_archive/rhai_engine/rhaibook/language/fn-parent-scope.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-parent-scope.md
rename to _archive/rhai_engine/rhaibook/language/fn-parent-scope.md
diff --git a/rhai_engine/rhaibook/language/fn-ptr.md b/_archive/rhai_engine/rhaibook/language/fn-ptr.md
similarity index 100%
rename from rhai_engine/rhaibook/language/fn-ptr.md
rename to _archive/rhai_engine/rhaibook/language/fn-ptr.md
diff --git a/rhai_engine/rhaibook/language/for.md b/_archive/rhai_engine/rhaibook/language/for.md
similarity index 100%
rename from rhai_engine/rhaibook/language/for.md
rename to _archive/rhai_engine/rhaibook/language/for.md
diff --git a/rhai_engine/rhaibook/language/functions.md b/_archive/rhai_engine/rhaibook/language/functions.md
similarity index 100%
rename from rhai_engine/rhaibook/language/functions.md
rename to _archive/rhai_engine/rhaibook/language/functions.md
diff --git a/rhai_engine/rhaibook/language/global.md b/_archive/rhai_engine/rhaibook/language/global.md
similarity index 100%
rename from rhai_engine/rhaibook/language/global.md
rename to _archive/rhai_engine/rhaibook/language/global.md
diff --git a/rhai_engine/rhaibook/language/if.md b/_archive/rhai_engine/rhaibook/language/if.md
similarity index 100%
rename from rhai_engine/rhaibook/language/if.md
rename to _archive/rhai_engine/rhaibook/language/if.md
diff --git a/rhai_engine/rhaibook/language/in.md b/_archive/rhai_engine/rhaibook/language/in.md
similarity index 100%
rename from rhai_engine/rhaibook/language/in.md
rename to _archive/rhai_engine/rhaibook/language/in.md
diff --git a/rhai_engine/rhaibook/language/iter.md b/_archive/rhai_engine/rhaibook/language/iter.md
similarity index 100%
rename from rhai_engine/rhaibook/language/iter.md
rename to _archive/rhai_engine/rhaibook/language/iter.md
diff --git a/rhai_engine/rhaibook/language/iterator.md b/_archive/rhai_engine/rhaibook/language/iterator.md
similarity index 100%
rename from rhai_engine/rhaibook/language/iterator.md
rename to _archive/rhai_engine/rhaibook/language/iterator.md
diff --git a/rhai_engine/rhaibook/language/json.md b/_archive/rhai_engine/rhaibook/language/json.md
similarity index 100%
rename from rhai_engine/rhaibook/language/json.md
rename to _archive/rhai_engine/rhaibook/language/json.md
diff --git a/rhai_engine/rhaibook/language/keywords.md b/_archive/rhai_engine/rhaibook/language/keywords.md
similarity index 100%
rename from rhai_engine/rhaibook/language/keywords.md
rename to _archive/rhai_engine/rhaibook/language/keywords.md
diff --git a/rhai_engine/rhaibook/language/logic.md b/_archive/rhai_engine/rhaibook/language/logic.md
similarity index 100%
rename from rhai_engine/rhaibook/language/logic.md
rename to _archive/rhai_engine/rhaibook/language/logic.md
diff --git a/rhai_engine/rhaibook/language/loop.md b/_archive/rhai_engine/rhaibook/language/loop.md
similarity index 100%
rename from rhai_engine/rhaibook/language/loop.md
rename to _archive/rhai_engine/rhaibook/language/loop.md
diff --git a/rhai_engine/rhaibook/language/modules/export.md b/_archive/rhai_engine/rhaibook/language/modules/export.md
similarity index 100%
rename from rhai_engine/rhaibook/language/modules/export.md
rename to _archive/rhai_engine/rhaibook/language/modules/export.md
diff --git a/rhai_engine/rhaibook/language/modules/import.md b/_archive/rhai_engine/rhaibook/language/modules/import.md
similarity index 100%
rename from rhai_engine/rhaibook/language/modules/import.md
rename to _archive/rhai_engine/rhaibook/language/modules/import.md
diff --git a/rhai_engine/rhaibook/language/modules/index.md b/_archive/rhai_engine/rhaibook/language/modules/index.md
similarity index 100%
rename from rhai_engine/rhaibook/language/modules/index.md
rename to _archive/rhai_engine/rhaibook/language/modules/index.md
diff --git a/rhai_engine/rhaibook/language/num-fn.md b/_archive/rhai_engine/rhaibook/language/num-fn.md
similarity index 100%
rename from rhai_engine/rhaibook/language/num-fn.md
rename to _archive/rhai_engine/rhaibook/language/num-fn.md
diff --git a/rhai_engine/rhaibook/language/num-op.md b/_archive/rhai_engine/rhaibook/language/num-op.md
similarity index 100%
rename from rhai_engine/rhaibook/language/num-op.md
rename to _archive/rhai_engine/rhaibook/language/num-op.md
diff --git a/rhai_engine/rhaibook/language/numbers.md b/_archive/rhai_engine/rhaibook/language/numbers.md
similarity index 100%
rename from rhai_engine/rhaibook/language/numbers.md
rename to _archive/rhai_engine/rhaibook/language/numbers.md
diff --git a/rhai_engine/rhaibook/language/object-maps-missing-prop.md b/_archive/rhai_engine/rhaibook/language/object-maps-missing-prop.md
similarity index 100%
rename from rhai_engine/rhaibook/language/object-maps-missing-prop.md
rename to _archive/rhai_engine/rhaibook/language/object-maps-missing-prop.md
diff --git a/rhai_engine/rhaibook/language/object-maps-oop.md b/_archive/rhai_engine/rhaibook/language/object-maps-oop.md
similarity index 100%
rename from rhai_engine/rhaibook/language/object-maps-oop.md
rename to _archive/rhai_engine/rhaibook/language/object-maps-oop.md
diff --git a/rhai_engine/rhaibook/language/object-maps.md b/_archive/rhai_engine/rhaibook/language/object-maps.md
similarity index 100%
rename from rhai_engine/rhaibook/language/object-maps.md
rename to _archive/rhai_engine/rhaibook/language/object-maps.md
diff --git a/rhai_engine/rhaibook/language/overload.md b/_archive/rhai_engine/rhaibook/language/overload.md
similarity index 100%
rename from rhai_engine/rhaibook/language/overload.md
rename to _archive/rhai_engine/rhaibook/language/overload.md
diff --git a/rhai_engine/rhaibook/language/print-debug.md b/_archive/rhai_engine/rhaibook/language/print-debug.md
similarity index 100%
rename from rhai_engine/rhaibook/language/print-debug.md
rename to _archive/rhai_engine/rhaibook/language/print-debug.md
diff --git a/rhai_engine/rhaibook/language/ranges.md b/_archive/rhai_engine/rhaibook/language/ranges.md
similarity index 100%
rename from rhai_engine/rhaibook/language/ranges.md
rename to _archive/rhai_engine/rhaibook/language/ranges.md
diff --git a/rhai_engine/rhaibook/language/return.md b/_archive/rhai_engine/rhaibook/language/return.md
similarity index 100%
rename from rhai_engine/rhaibook/language/return.md
rename to _archive/rhai_engine/rhaibook/language/return.md
diff --git a/rhai_engine/rhaibook/language/shadow.md b/_archive/rhai_engine/rhaibook/language/shadow.md
similarity index 100%
rename from rhai_engine/rhaibook/language/shadow.md
rename to _archive/rhai_engine/rhaibook/language/shadow.md
diff --git a/rhai_engine/rhaibook/language/statement-expression.md b/_archive/rhai_engine/rhaibook/language/statement-expression.md
similarity index 100%
rename from rhai_engine/rhaibook/language/statement-expression.md
rename to _archive/rhai_engine/rhaibook/language/statement-expression.md
diff --git a/rhai_engine/rhaibook/language/statements.md b/_archive/rhai_engine/rhaibook/language/statements.md
similarity index 100%
rename from rhai_engine/rhaibook/language/statements.md
rename to _archive/rhai_engine/rhaibook/language/statements.md
diff --git a/rhai_engine/rhaibook/language/string-fn.md b/_archive/rhai_engine/rhaibook/language/string-fn.md
similarity index 100%
rename from rhai_engine/rhaibook/language/string-fn.md
rename to _archive/rhai_engine/rhaibook/language/string-fn.md
diff --git a/rhai_engine/rhaibook/language/string-interp.md b/_archive/rhai_engine/rhaibook/language/string-interp.md
similarity index 100%
rename from rhai_engine/rhaibook/language/string-interp.md
rename to _archive/rhai_engine/rhaibook/language/string-interp.md
diff --git a/rhai_engine/rhaibook/language/strings-chars.md b/_archive/rhai_engine/rhaibook/language/strings-chars.md
similarity index 100%
rename from rhai_engine/rhaibook/language/strings-chars.md
rename to _archive/rhai_engine/rhaibook/language/strings-chars.md
diff --git a/rhai_engine/rhaibook/language/switch-expression.md b/_archive/rhai_engine/rhaibook/language/switch-expression.md
similarity index 100%
rename from rhai_engine/rhaibook/language/switch-expression.md
rename to _archive/rhai_engine/rhaibook/language/switch-expression.md
diff --git a/rhai_engine/rhaibook/language/switch.md b/_archive/rhai_engine/rhaibook/language/switch.md
similarity index 100%
rename from rhai_engine/rhaibook/language/switch.md
rename to _archive/rhai_engine/rhaibook/language/switch.md
diff --git a/rhai_engine/rhaibook/language/throw.md b/_archive/rhai_engine/rhaibook/language/throw.md
similarity index 100%
rename from rhai_engine/rhaibook/language/throw.md
rename to _archive/rhai_engine/rhaibook/language/throw.md
diff --git a/rhai_engine/rhaibook/language/timestamps.md b/_archive/rhai_engine/rhaibook/language/timestamps.md
similarity index 100%
rename from rhai_engine/rhaibook/language/timestamps.md
rename to _archive/rhai_engine/rhaibook/language/timestamps.md
diff --git a/rhai_engine/rhaibook/language/try-catch.md b/_archive/rhai_engine/rhaibook/language/try-catch.md
similarity index 100%
rename from rhai_engine/rhaibook/language/try-catch.md
rename to _archive/rhai_engine/rhaibook/language/try-catch.md
diff --git a/rhai_engine/rhaibook/language/type-of.md b/_archive/rhai_engine/rhaibook/language/type-of.md
similarity index 100%
rename from rhai_engine/rhaibook/language/type-of.md
rename to _archive/rhai_engine/rhaibook/language/type-of.md
diff --git a/rhai_engine/rhaibook/language/values-and-types.md b/_archive/rhai_engine/rhaibook/language/values-and-types.md
similarity index 100%
rename from rhai_engine/rhaibook/language/values-and-types.md
rename to _archive/rhai_engine/rhaibook/language/values-and-types.md
diff --git a/rhai_engine/rhaibook/language/variables.md b/_archive/rhai_engine/rhaibook/language/variables.md
similarity index 100%
rename from rhai_engine/rhaibook/language/variables.md
rename to _archive/rhai_engine/rhaibook/language/variables.md
diff --git a/rhai_engine/rhaibook/language/while.md b/_archive/rhai_engine/rhaibook/language/while.md
similarity index 100%
rename from rhai_engine/rhaibook/language/while.md
rename to _archive/rhai_engine/rhaibook/language/while.md
diff --git a/rhai_engine/rhaibook/lib/index.md b/_archive/rhai_engine/rhaibook/lib/index.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/index.md
rename to _archive/rhai_engine/rhaibook/lib/index.md
diff --git a/rhai_engine/rhaibook/lib/rhai-autodocs.md b/_archive/rhai_engine/rhaibook/lib/rhai-autodocs.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-autodocs.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-autodocs.md
diff --git a/rhai_engine/rhaibook/lib/rhai-dylib.md b/_archive/rhai_engine/rhaibook/lib/rhai-dylib.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-dylib.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-dylib.md
diff --git a/rhai_engine/rhaibook/lib/rhai-fs.md b/_archive/rhai_engine/rhaibook/lib/rhai-fs.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-fs.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-fs.md
diff --git a/rhai_engine/rhaibook/lib/rhai-ml.md b/_archive/rhai_engine/rhaibook/lib/rhai-ml.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-ml.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-ml.md
diff --git a/rhai_engine/rhaibook/lib/rhai-rand.md b/_archive/rhai_engine/rhaibook/lib/rhai-rand.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-rand.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-rand.md
diff --git a/rhai_engine/rhaibook/lib/rhai-sci.md b/_archive/rhai_engine/rhaibook/lib/rhai-sci.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-sci.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-sci.md
diff --git a/rhai_engine/rhaibook/lib/rhai-url.md b/_archive/rhai_engine/rhaibook/lib/rhai-url.md
similarity index 100%
rename from rhai_engine/rhaibook/lib/rhai-url.md
rename to _archive/rhai_engine/rhaibook/lib/rhai-url.md
diff --git a/rhai_engine/rhaibook/links.md b/_archive/rhai_engine/rhaibook/links.md
similarity index 100%
rename from rhai_engine/rhaibook/links.md
rename to _archive/rhai_engine/rhaibook/links.md
diff --git a/rhai_engine/rhaibook/patterns/blocking.md b/_archive/rhai_engine/rhaibook/patterns/blocking.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/blocking.md
rename to _archive/rhai_engine/rhaibook/patterns/blocking.md
diff --git a/rhai_engine/rhaibook/patterns/builder.md b/_archive/rhai_engine/rhaibook/patterns/builder.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/builder.md
rename to _archive/rhai_engine/rhaibook/patterns/builder.md
diff --git a/rhai_engine/rhaibook/patterns/config.md b/_archive/rhai_engine/rhaibook/patterns/config.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/config.md
rename to _archive/rhai_engine/rhaibook/patterns/config.md
diff --git a/rhai_engine/rhaibook/patterns/constants.md b/_archive/rhai_engine/rhaibook/patterns/constants.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/constants.md
rename to _archive/rhai_engine/rhaibook/patterns/constants.md
diff --git a/rhai_engine/rhaibook/patterns/control.md b/_archive/rhai_engine/rhaibook/patterns/control.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/control.md
rename to _archive/rhai_engine/rhaibook/patterns/control.md
diff --git a/rhai_engine/rhaibook/patterns/domain-tools.md b/_archive/rhai_engine/rhaibook/patterns/domain-tools.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/domain-tools.md
rename to _archive/rhai_engine/rhaibook/patterns/domain-tools.md
diff --git a/rhai_engine/rhaibook/patterns/dynamic-const.md b/_archive/rhai_engine/rhaibook/patterns/dynamic-const.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/dynamic-const.md
rename to _archive/rhai_engine/rhaibook/patterns/dynamic-const.md
diff --git a/rhai_engine/rhaibook/patterns/enums.md b/_archive/rhai_engine/rhaibook/patterns/enums.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/enums.md
rename to _archive/rhai_engine/rhaibook/patterns/enums.md
diff --git a/rhai_engine/rhaibook/patterns/events-1.md b/_archive/rhai_engine/rhaibook/patterns/events-1.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/events-1.md
rename to _archive/rhai_engine/rhaibook/patterns/events-1.md
diff --git a/rhai_engine/rhaibook/patterns/events-2.md b/_archive/rhai_engine/rhaibook/patterns/events-2.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/events-2.md
rename to _archive/rhai_engine/rhaibook/patterns/events-2.md
diff --git a/rhai_engine/rhaibook/patterns/events-3.md b/_archive/rhai_engine/rhaibook/patterns/events-3.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/events-3.md
rename to _archive/rhai_engine/rhaibook/patterns/events-3.md
diff --git a/rhai_engine/rhaibook/patterns/events.md b/_archive/rhai_engine/rhaibook/patterns/events.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/events.md
rename to _archive/rhai_engine/rhaibook/patterns/events.md
diff --git a/rhai_engine/rhaibook/patterns/global-mutable-state.md b/_archive/rhai_engine/rhaibook/patterns/global-mutable-state.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/global-mutable-state.md
rename to _archive/rhai_engine/rhaibook/patterns/global-mutable-state.md
diff --git a/rhai_engine/rhaibook/patterns/hot-reload.md b/_archive/rhai_engine/rhaibook/patterns/hot-reload.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/hot-reload.md
rename to _archive/rhai_engine/rhaibook/patterns/hot-reload.md
diff --git a/rhai_engine/rhaibook/patterns/macros.md b/_archive/rhai_engine/rhaibook/patterns/macros.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/macros.md
rename to _archive/rhai_engine/rhaibook/patterns/macros.md
diff --git a/rhai_engine/rhaibook/patterns/multi-layer.md b/_archive/rhai_engine/rhaibook/patterns/multi-layer.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/multi-layer.md
rename to _archive/rhai_engine/rhaibook/patterns/multi-layer.md
diff --git a/rhai_engine/rhaibook/patterns/multi-threading.md b/_archive/rhai_engine/rhaibook/patterns/multi-threading.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/multi-threading.md
rename to _archive/rhai_engine/rhaibook/patterns/multi-threading.md
diff --git a/rhai_engine/rhaibook/patterns/multiple.md b/_archive/rhai_engine/rhaibook/patterns/multiple.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/multiple.md
rename to _archive/rhai_engine/rhaibook/patterns/multiple.md
diff --git a/rhai_engine/rhaibook/patterns/objects.md b/_archive/rhai_engine/rhaibook/patterns/objects.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/objects.md
rename to _archive/rhai_engine/rhaibook/patterns/objects.md
diff --git a/rhai_engine/rhaibook/patterns/oop.md b/_archive/rhai_engine/rhaibook/patterns/oop.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/oop.md
rename to _archive/rhai_engine/rhaibook/patterns/oop.md
diff --git a/rhai_engine/rhaibook/patterns/parallel.md b/_archive/rhai_engine/rhaibook/patterns/parallel.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/parallel.md
rename to _archive/rhai_engine/rhaibook/patterns/parallel.md
diff --git a/rhai_engine/rhaibook/patterns/references.md b/_archive/rhai_engine/rhaibook/patterns/references.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/references.md
rename to _archive/rhai_engine/rhaibook/patterns/references.md
diff --git a/rhai_engine/rhaibook/patterns/serialize-ast.md b/_archive/rhai_engine/rhaibook/patterns/serialize-ast.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/serialize-ast.md
rename to _archive/rhai_engine/rhaibook/patterns/serialize-ast.md
diff --git a/rhai_engine/rhaibook/patterns/singleton.md b/_archive/rhai_engine/rhaibook/patterns/singleton.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/singleton.md
rename to _archive/rhai_engine/rhaibook/patterns/singleton.md
diff --git a/rhai_engine/rhaibook/patterns/static-hash.md b/_archive/rhai_engine/rhaibook/patterns/static-hash.md
similarity index 100%
rename from rhai_engine/rhaibook/patterns/static-hash.md
rename to _archive/rhai_engine/rhaibook/patterns/static-hash.md
diff --git a/rhai_engine/rhaibook/plugins/index.md b/_archive/rhai_engine/rhaibook/plugins/index.md
similarity index 100%
rename from rhai_engine/rhaibook/plugins/index.md
rename to _archive/rhai_engine/rhaibook/plugins/index.md
diff --git a/rhai_engine/rhaibook/ref/arrays.md b/_archive/rhai_engine/rhaibook/ref/arrays.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/arrays.md
rename to _archive/rhai_engine/rhaibook/ref/arrays.md
diff --git a/rhai_engine/rhaibook/ref/assignment-op.md b/_archive/rhai_engine/rhaibook/ref/assignment-op.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/assignment-op.md
rename to _archive/rhai_engine/rhaibook/ref/assignment-op.md
diff --git a/rhai_engine/rhaibook/ref/assignment.md b/_archive/rhai_engine/rhaibook/ref/assignment.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/assignment.md
rename to _archive/rhai_engine/rhaibook/ref/assignment.md
diff --git a/rhai_engine/rhaibook/ref/bit-fields.md b/_archive/rhai_engine/rhaibook/ref/bit-fields.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/bit-fields.md
rename to _archive/rhai_engine/rhaibook/ref/bit-fields.md
diff --git a/rhai_engine/rhaibook/ref/blobs.md b/_archive/rhai_engine/rhaibook/ref/blobs.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/blobs.md
rename to _archive/rhai_engine/rhaibook/ref/blobs.md
diff --git a/rhai_engine/rhaibook/ref/comments.md b/_archive/rhai_engine/rhaibook/ref/comments.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/comments.md
rename to _archive/rhai_engine/rhaibook/ref/comments.md
diff --git a/rhai_engine/rhaibook/ref/constants.md b/_archive/rhai_engine/rhaibook/ref/constants.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/constants.md
rename to _archive/rhai_engine/rhaibook/ref/constants.md
diff --git a/rhai_engine/rhaibook/ref/convert.md b/_archive/rhai_engine/rhaibook/ref/convert.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/convert.md
rename to _archive/rhai_engine/rhaibook/ref/convert.md
diff --git a/rhai_engine/rhaibook/ref/do.md b/_archive/rhai_engine/rhaibook/ref/do.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/do.md
rename to _archive/rhai_engine/rhaibook/ref/do.md
diff --git a/rhai_engine/rhaibook/ref/dynamic-tag.md b/_archive/rhai_engine/rhaibook/ref/dynamic-tag.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/dynamic-tag.md
rename to _archive/rhai_engine/rhaibook/ref/dynamic-tag.md
diff --git a/rhai_engine/rhaibook/ref/dynamic.md b/_archive/rhai_engine/rhaibook/ref/dynamic.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/dynamic.md
rename to _archive/rhai_engine/rhaibook/ref/dynamic.md
diff --git a/rhai_engine/rhaibook/ref/eval.md b/_archive/rhai_engine/rhaibook/ref/eval.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/eval.md
rename to _archive/rhai_engine/rhaibook/ref/eval.md
diff --git a/rhai_engine/rhaibook/ref/fn-closure.md b/_archive/rhai_engine/rhaibook/ref/fn-closure.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/fn-closure.md
rename to _archive/rhai_engine/rhaibook/ref/fn-closure.md
diff --git a/rhai_engine/rhaibook/ref/fn-metadata.md b/_archive/rhai_engine/rhaibook/ref/fn-metadata.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/fn-metadata.md
rename to _archive/rhai_engine/rhaibook/ref/fn-metadata.md
diff --git a/rhai_engine/rhaibook/ref/fn-method.md b/_archive/rhai_engine/rhaibook/ref/fn-method.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/fn-method.md
rename to _archive/rhai_engine/rhaibook/ref/fn-method.md
diff --git a/rhai_engine/rhaibook/ref/fn-ptr.md b/_archive/rhai_engine/rhaibook/ref/fn-ptr.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/fn-ptr.md
rename to _archive/rhai_engine/rhaibook/ref/fn-ptr.md
diff --git a/rhai_engine/rhaibook/ref/for.md b/_archive/rhai_engine/rhaibook/ref/for.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/for.md
rename to _archive/rhai_engine/rhaibook/ref/for.md
diff --git a/rhai_engine/rhaibook/ref/functions.md b/_archive/rhai_engine/rhaibook/ref/functions.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/functions.md
rename to _archive/rhai_engine/rhaibook/ref/functions.md
diff --git a/rhai_engine/rhaibook/ref/getters-setters.md b/_archive/rhai_engine/rhaibook/ref/getters-setters.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/getters-setters.md
rename to _archive/rhai_engine/rhaibook/ref/getters-setters.md
diff --git a/rhai_engine/rhaibook/ref/if.md b/_archive/rhai_engine/rhaibook/ref/if.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/if.md
rename to _archive/rhai_engine/rhaibook/ref/if.md
diff --git a/rhai_engine/rhaibook/ref/index.md b/_archive/rhai_engine/rhaibook/ref/index.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/index.md
rename to _archive/rhai_engine/rhaibook/ref/index.md
diff --git a/rhai_engine/rhaibook/ref/indexing.md b/_archive/rhai_engine/rhaibook/ref/indexing.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/indexing.md
rename to _archive/rhai_engine/rhaibook/ref/indexing.md
diff --git a/rhai_engine/rhaibook/ref/keywords.md b/_archive/rhai_engine/rhaibook/ref/keywords.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/keywords.md
rename to _archive/rhai_engine/rhaibook/ref/keywords.md
diff --git a/rhai_engine/rhaibook/ref/loop.md b/_archive/rhai_engine/rhaibook/ref/loop.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/loop.md
rename to _archive/rhai_engine/rhaibook/ref/loop.md
diff --git a/rhai_engine/rhaibook/ref/methods.md b/_archive/rhai_engine/rhaibook/ref/methods.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/methods.md
rename to _archive/rhai_engine/rhaibook/ref/methods.md
diff --git a/rhai_engine/rhaibook/ref/modules/export.md b/_archive/rhai_engine/rhaibook/ref/modules/export.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/modules/export.md
rename to _archive/rhai_engine/rhaibook/ref/modules/export.md
diff --git a/rhai_engine/rhaibook/ref/modules/import.md b/_archive/rhai_engine/rhaibook/ref/modules/import.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/modules/import.md
rename to _archive/rhai_engine/rhaibook/ref/modules/import.md
diff --git a/rhai_engine/rhaibook/ref/modules/index.md b/_archive/rhai_engine/rhaibook/ref/modules/index.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/modules/index.md
rename to _archive/rhai_engine/rhaibook/ref/modules/index.md
diff --git a/rhai_engine/rhaibook/ref/num-fn.md b/_archive/rhai_engine/rhaibook/ref/num-fn.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/num-fn.md
rename to _archive/rhai_engine/rhaibook/ref/num-fn.md
diff --git a/rhai_engine/rhaibook/ref/num-op.md b/_archive/rhai_engine/rhaibook/ref/num-op.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/num-op.md
rename to _archive/rhai_engine/rhaibook/ref/num-op.md
diff --git a/rhai_engine/rhaibook/ref/numbers.md b/_archive/rhai_engine/rhaibook/ref/numbers.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/numbers.md
rename to _archive/rhai_engine/rhaibook/ref/numbers.md
diff --git a/rhai_engine/rhaibook/ref/object-maps.md b/_archive/rhai_engine/rhaibook/ref/object-maps.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/object-maps.md
rename to _archive/rhai_engine/rhaibook/ref/object-maps.md
diff --git a/rhai_engine/rhaibook/ref/operators.md b/_archive/rhai_engine/rhaibook/ref/operators.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/operators.md
rename to _archive/rhai_engine/rhaibook/ref/operators.md
diff --git a/rhai_engine/rhaibook/ref/overload.md b/_archive/rhai_engine/rhaibook/ref/overload.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/overload.md
rename to _archive/rhai_engine/rhaibook/ref/overload.md
diff --git a/rhai_engine/rhaibook/ref/print-debug.md b/_archive/rhai_engine/rhaibook/ref/print-debug.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/print-debug.md
rename to _archive/rhai_engine/rhaibook/ref/print-debug.md
diff --git a/rhai_engine/rhaibook/ref/ranges.md b/_archive/rhai_engine/rhaibook/ref/ranges.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/ranges.md
rename to _archive/rhai_engine/rhaibook/ref/ranges.md
diff --git a/rhai_engine/rhaibook/ref/return.md b/_archive/rhai_engine/rhaibook/ref/return.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/return.md
rename to _archive/rhai_engine/rhaibook/ref/return.md
diff --git a/rhai_engine/rhaibook/ref/statements.md b/_archive/rhai_engine/rhaibook/ref/statements.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/statements.md
rename to _archive/rhai_engine/rhaibook/ref/statements.md
diff --git a/rhai_engine/rhaibook/ref/string-fn.md b/_archive/rhai_engine/rhaibook/ref/string-fn.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/string-fn.md
rename to _archive/rhai_engine/rhaibook/ref/string-fn.md
diff --git a/rhai_engine/rhaibook/ref/strings-chars.md b/_archive/rhai_engine/rhaibook/ref/strings-chars.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/strings-chars.md
rename to _archive/rhai_engine/rhaibook/ref/strings-chars.md
diff --git a/rhai_engine/rhaibook/ref/switch.md b/_archive/rhai_engine/rhaibook/ref/switch.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/switch.md
rename to _archive/rhai_engine/rhaibook/ref/switch.md
diff --git a/rhai_engine/rhaibook/ref/throw.md b/_archive/rhai_engine/rhaibook/ref/throw.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/throw.md
rename to _archive/rhai_engine/rhaibook/ref/throw.md
diff --git a/rhai_engine/rhaibook/ref/timestamps.md b/_archive/rhai_engine/rhaibook/ref/timestamps.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/timestamps.md
rename to _archive/rhai_engine/rhaibook/ref/timestamps.md
diff --git a/rhai_engine/rhaibook/ref/try-catch.md b/_archive/rhai_engine/rhaibook/ref/try-catch.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/try-catch.md
rename to _archive/rhai_engine/rhaibook/ref/try-catch.md
diff --git a/rhai_engine/rhaibook/ref/type-of.md b/_archive/rhai_engine/rhaibook/ref/type-of.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/type-of.md
rename to _archive/rhai_engine/rhaibook/ref/type-of.md
diff --git a/rhai_engine/rhaibook/ref/values-and-types.md b/_archive/rhai_engine/rhaibook/ref/values-and-types.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/values-and-types.md
rename to _archive/rhai_engine/rhaibook/ref/values-and-types.md
diff --git a/rhai_engine/rhaibook/ref/variables.md b/_archive/rhai_engine/rhaibook/ref/variables.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/variables.md
rename to _archive/rhai_engine/rhaibook/ref/variables.md
diff --git a/rhai_engine/rhaibook/ref/while.md b/_archive/rhai_engine/rhaibook/ref/while.md
similarity index 100%
rename from rhai_engine/rhaibook/ref/while.md
rename to _archive/rhai_engine/rhaibook/ref/while.md
diff --git a/rhai_engine/rhaibook/rust/build-type.md b/_archive/rhai_engine/rhaibook/rust/build-type.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/build-type.md
rename to _archive/rhai_engine/rhaibook/rust/build-type.md
diff --git a/rhai_engine/rhaibook/rust/collections.md b/_archive/rhai_engine/rhaibook/rust/collections.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/collections.md
rename to _archive/rhai_engine/rhaibook/rust/collections.md
diff --git a/rhai_engine/rhaibook/rust/context-restore.md b/_archive/rhai_engine/rhaibook/rust/context-restore.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/context-restore.md
rename to _archive/rhai_engine/rhaibook/rust/context-restore.md
diff --git a/rhai_engine/rhaibook/rust/context.md b/_archive/rhai_engine/rhaibook/rust/context.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/context.md
rename to _archive/rhai_engine/rhaibook/rust/context.md
diff --git a/rhai_engine/rhaibook/rust/custom-types.md b/_archive/rhai_engine/rhaibook/rust/custom-types.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/custom-types.md
rename to _archive/rhai_engine/rhaibook/rust/custom-types.md
diff --git a/rhai_engine/rhaibook/rust/derive-custom-type.md b/_archive/rhai_engine/rhaibook/rust/derive-custom-type.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/derive-custom-type.md
rename to _archive/rhai_engine/rhaibook/rust/derive-custom-type.md
diff --git a/rhai_engine/rhaibook/rust/disable-custom.md b/_archive/rhai_engine/rhaibook/rust/disable-custom.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/disable-custom.md
rename to _archive/rhai_engine/rhaibook/rust/disable-custom.md
diff --git a/rhai_engine/rhaibook/rust/dynamic-args.md b/_archive/rhai_engine/rhaibook/rust/dynamic-args.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/dynamic-args.md
rename to _archive/rhai_engine/rhaibook/rust/dynamic-args.md
diff --git a/rhai_engine/rhaibook/rust/dynamic-return.md b/_archive/rhai_engine/rhaibook/rust/dynamic-return.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/dynamic-return.md
rename to _archive/rhai_engine/rhaibook/rust/dynamic-return.md
diff --git a/rhai_engine/rhaibook/rust/fallible.md b/_archive/rhai_engine/rhaibook/rust/fallible.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/fallible.md
rename to _archive/rhai_engine/rhaibook/rust/fallible.md
diff --git a/rhai_engine/rhaibook/rust/functions-metadata.md b/_archive/rhai_engine/rhaibook/rust/functions-metadata.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/functions-metadata.md
rename to _archive/rhai_engine/rhaibook/rust/functions-metadata.md
diff --git a/rhai_engine/rhaibook/rust/functions.md b/_archive/rhai_engine/rhaibook/rust/functions.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/functions.md
rename to _archive/rhai_engine/rhaibook/rust/functions.md
diff --git a/rhai_engine/rhaibook/rust/generic.md b/_archive/rhai_engine/rhaibook/rust/generic.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/generic.md
rename to _archive/rhai_engine/rhaibook/rust/generic.md
diff --git a/rhai_engine/rhaibook/rust/getters-setters.md b/_archive/rhai_engine/rhaibook/rust/getters-setters.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/getters-setters.md
rename to _archive/rhai_engine/rhaibook/rust/getters-setters.md
diff --git a/rhai_engine/rhaibook/rust/immutable-string.md b/_archive/rhai_engine/rhaibook/rust/immutable-string.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/immutable-string.md
rename to _archive/rhai_engine/rhaibook/rust/immutable-string.md
diff --git a/rhai_engine/rhaibook/rust/index.md b/_archive/rhai_engine/rhaibook/rust/index.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/index.md
rename to _archive/rhai_engine/rhaibook/rust/index.md
diff --git a/rhai_engine/rhaibook/rust/indexer-prop-fallback.md b/_archive/rhai_engine/rhaibook/rust/indexer-prop-fallback.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/indexer-prop-fallback.md
rename to _archive/rhai_engine/rhaibook/rust/indexer-prop-fallback.md
diff --git a/rhai_engine/rhaibook/rust/indexers.md b/_archive/rhai_engine/rhaibook/rust/indexers.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/indexers.md
rename to _archive/rhai_engine/rhaibook/rust/indexers.md
diff --git a/rhai_engine/rhaibook/rust/methods-fn-call.md b/_archive/rhai_engine/rhaibook/rust/methods-fn-call.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/methods-fn-call.md
rename to _archive/rhai_engine/rhaibook/rust/methods-fn-call.md
diff --git a/rhai_engine/rhaibook/rust/methods.md b/_archive/rhai_engine/rhaibook/rust/methods.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/methods.md
rename to _archive/rhai_engine/rhaibook/rust/methods.md
diff --git a/rhai_engine/rhaibook/rust/modules/ast.md b/_archive/rhai_engine/rhaibook/rust/modules/ast.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/ast.md
rename to _archive/rhai_engine/rhaibook/rust/modules/ast.md
diff --git a/rhai_engine/rhaibook/rust/modules/create.md b/_archive/rhai_engine/rhaibook/rust/modules/create.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/create.md
rename to _archive/rhai_engine/rhaibook/rust/modules/create.md
diff --git a/rhai_engine/rhaibook/rust/modules/index.md b/_archive/rhai_engine/rhaibook/rust/modules/index.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/index.md
rename to _archive/rhai_engine/rhaibook/rust/modules/index.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/built-in.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/built-in.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/built-in.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/built-in.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/collection.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/collection.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/collection.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/collection.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/custom.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/custom.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/custom.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/custom.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/dummy.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/dummy.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/dummy.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/dummy.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/dylib.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/dylib.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/dylib.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/dylib.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/file.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/file.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/file.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/file.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/index.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/index.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/index.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/index.md
diff --git a/rhai_engine/rhaibook/rust/modules/resolvers/static.md b/_archive/rhai_engine/rhaibook/rust/modules/resolvers/static.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/resolvers/static.md
rename to _archive/rhai_engine/rhaibook/rust/modules/resolvers/static.md
diff --git a/rhai_engine/rhaibook/rust/modules/self-contained.md b/_archive/rhai_engine/rhaibook/rust/modules/self-contained.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/self-contained.md
rename to _archive/rhai_engine/rhaibook/rust/modules/self-contained.md
diff --git a/rhai_engine/rhaibook/rust/modules/use.md b/_archive/rhai_engine/rhaibook/rust/modules/use.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/modules/use.md
rename to _archive/rhai_engine/rhaibook/rust/modules/use.md
diff --git a/rhai_engine/rhaibook/rust/operators.md b/_archive/rhai_engine/rhaibook/rust/operators.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/operators.md
rename to _archive/rhai_engine/rhaibook/rust/operators.md
diff --git a/rhai_engine/rhaibook/rust/overloading.md b/_archive/rhai_engine/rhaibook/rust/overloading.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/overloading.md
rename to _archive/rhai_engine/rhaibook/rust/overloading.md
diff --git a/rhai_engine/rhaibook/rust/override.md b/_archive/rhai_engine/rhaibook/rust/override.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/override.md
rename to _archive/rhai_engine/rhaibook/rust/override.md
diff --git a/rhai_engine/rhaibook/rust/packages/builtin.md b/_archive/rhai_engine/rhaibook/rust/packages/builtin.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/packages/builtin.md
rename to _archive/rhai_engine/rhaibook/rust/packages/builtin.md
diff --git a/rhai_engine/rhaibook/rust/packages/crate.md b/_archive/rhai_engine/rhaibook/rust/packages/crate.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/packages/crate.md
rename to _archive/rhai_engine/rhaibook/rust/packages/crate.md
diff --git a/rhai_engine/rhaibook/rust/packages/create.md b/_archive/rhai_engine/rhaibook/rust/packages/create.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/packages/create.md
rename to _archive/rhai_engine/rhaibook/rust/packages/create.md
diff --git a/rhai_engine/rhaibook/rust/packages/index.md b/_archive/rhai_engine/rhaibook/rust/packages/index.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/packages/index.md
rename to _archive/rhai_engine/rhaibook/rust/packages/index.md
diff --git a/rhai_engine/rhaibook/rust/print-custom.md b/_archive/rhai_engine/rhaibook/rust/print-custom.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/print-custom.md
rename to _archive/rhai_engine/rhaibook/rust/print-custom.md
diff --git a/rhai_engine/rhaibook/rust/reg-custom-type.md b/_archive/rhai_engine/rhaibook/rust/reg-custom-type.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/reg-custom-type.md
rename to _archive/rhai_engine/rhaibook/rust/reg-custom-type.md
diff --git a/rhai_engine/rhaibook/rust/register-raw.md b/_archive/rhai_engine/rhaibook/rust/register-raw.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/register-raw.md
rename to _archive/rhai_engine/rhaibook/rust/register-raw.md
diff --git a/rhai_engine/rhaibook/rust/serde.md b/_archive/rhai_engine/rhaibook/rust/serde.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/serde.md
rename to _archive/rhai_engine/rhaibook/rust/serde.md
diff --git a/rhai_engine/rhaibook/rust/strings-interner.md b/_archive/rhai_engine/rhaibook/rust/strings-interner.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/strings-interner.md
rename to _archive/rhai_engine/rhaibook/rust/strings-interner.md
diff --git a/rhai_engine/rhaibook/rust/strings.md b/_archive/rhai_engine/rhaibook/rust/strings.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/strings.md
rename to _archive/rhai_engine/rhaibook/rust/strings.md
diff --git a/rhai_engine/rhaibook/rust/traits.md b/_archive/rhai_engine/rhaibook/rust/traits.md
similarity index 100%
rename from rhai_engine/rhaibook/rust/traits.md
rename to _archive/rhai_engine/rhaibook/rust/traits.md
diff --git a/rhai_engine/rhaibook/safety/checked.md b/_archive/rhai_engine/rhaibook/safety/checked.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/checked.md
rename to _archive/rhai_engine/rhaibook/safety/checked.md
diff --git a/rhai_engine/rhaibook/safety/index.md b/_archive/rhai_engine/rhaibook/safety/index.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/index.md
rename to _archive/rhai_engine/rhaibook/safety/index.md
diff --git a/rhai_engine/rhaibook/safety/limits.md b/_archive/rhai_engine/rhaibook/safety/limits.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/limits.md
rename to _archive/rhai_engine/rhaibook/safety/limits.md
diff --git a/rhai_engine/rhaibook/safety/max-array-size.md b/_archive/rhai_engine/rhaibook/safety/max-array-size.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-array-size.md
rename to _archive/rhai_engine/rhaibook/safety/max-array-size.md
diff --git a/rhai_engine/rhaibook/safety/max-call-stack.md b/_archive/rhai_engine/rhaibook/safety/max-call-stack.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-call-stack.md
rename to _archive/rhai_engine/rhaibook/safety/max-call-stack.md
diff --git a/rhai_engine/rhaibook/safety/max-functions.md b/_archive/rhai_engine/rhaibook/safety/max-functions.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-functions.md
rename to _archive/rhai_engine/rhaibook/safety/max-functions.md
diff --git a/rhai_engine/rhaibook/safety/max-map-size.md b/_archive/rhai_engine/rhaibook/safety/max-map-size.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-map-size.md
rename to _archive/rhai_engine/rhaibook/safety/max-map-size.md
diff --git a/rhai_engine/rhaibook/safety/max-modules.md b/_archive/rhai_engine/rhaibook/safety/max-modules.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-modules.md
rename to _archive/rhai_engine/rhaibook/safety/max-modules.md
diff --git a/rhai_engine/rhaibook/safety/max-operations.md b/_archive/rhai_engine/rhaibook/safety/max-operations.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-operations.md
rename to _archive/rhai_engine/rhaibook/safety/max-operations.md
diff --git a/rhai_engine/rhaibook/safety/max-stmt-depth.md b/_archive/rhai_engine/rhaibook/safety/max-stmt-depth.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-stmt-depth.md
rename to _archive/rhai_engine/rhaibook/safety/max-stmt-depth.md
diff --git a/rhai_engine/rhaibook/safety/max-string-size.md b/_archive/rhai_engine/rhaibook/safety/max-string-size.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-string-size.md
rename to _archive/rhai_engine/rhaibook/safety/max-string-size.md
diff --git a/rhai_engine/rhaibook/safety/max-variables.md b/_archive/rhai_engine/rhaibook/safety/max-variables.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/max-variables.md
rename to _archive/rhai_engine/rhaibook/safety/max-variables.md
diff --git a/rhai_engine/rhaibook/safety/memory.md b/_archive/rhai_engine/rhaibook/safety/memory.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/memory.md
rename to _archive/rhai_engine/rhaibook/safety/memory.md
diff --git a/rhai_engine/rhaibook/safety/progress.md b/_archive/rhai_engine/rhaibook/safety/progress.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/progress.md
rename to _archive/rhai_engine/rhaibook/safety/progress.md
diff --git a/rhai_engine/rhaibook/safety/sandbox.md b/_archive/rhai_engine/rhaibook/safety/sandbox.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/sandbox.md
rename to _archive/rhai_engine/rhaibook/safety/sandbox.md
diff --git a/rhai_engine/rhaibook/safety/stack.md b/_archive/rhai_engine/rhaibook/safety/stack.md
similarity index 100%
rename from rhai_engine/rhaibook/safety/stack.md
rename to _archive/rhai_engine/rhaibook/safety/stack.md
diff --git a/rhai_engine/rhaibook/start/bin.md b/_archive/rhai_engine/rhaibook/start/bin.md
similarity index 100%
rename from rhai_engine/rhaibook/start/bin.md
rename to _archive/rhai_engine/rhaibook/start/bin.md
diff --git a/rhai_engine/rhaibook/start/builds/index.md b/_archive/rhai_engine/rhaibook/start/builds/index.md
similarity index 100%
rename from rhai_engine/rhaibook/start/builds/index.md
rename to _archive/rhai_engine/rhaibook/start/builds/index.md
diff --git a/rhai_engine/rhaibook/start/builds/minimal.md b/_archive/rhai_engine/rhaibook/start/builds/minimal.md
similarity index 100%
rename from rhai_engine/rhaibook/start/builds/minimal.md
rename to _archive/rhai_engine/rhaibook/start/builds/minimal.md
diff --git a/rhai_engine/rhaibook/start/builds/no-std.md b/_archive/rhai_engine/rhaibook/start/builds/no-std.md
similarity index 100%
rename from rhai_engine/rhaibook/start/builds/no-std.md
rename to _archive/rhai_engine/rhaibook/start/builds/no-std.md
diff --git a/rhai_engine/rhaibook/start/builds/performance.md b/_archive/rhai_engine/rhaibook/start/builds/performance.md
similarity index 100%
rename from rhai_engine/rhaibook/start/builds/performance.md
rename to _archive/rhai_engine/rhaibook/start/builds/performance.md
diff --git a/rhai_engine/rhaibook/start/builds/wasm.md b/_archive/rhai_engine/rhaibook/start/builds/wasm.md
similarity index 100%
rename from rhai_engine/rhaibook/start/builds/wasm.md
rename to _archive/rhai_engine/rhaibook/start/builds/wasm.md
diff --git a/rhai_engine/rhaibook/start/examples/index.md b/_archive/rhai_engine/rhaibook/start/examples/index.md
similarity index 100%
rename from rhai_engine/rhaibook/start/examples/index.md
rename to _archive/rhai_engine/rhaibook/start/examples/index.md
diff --git a/rhai_engine/rhaibook/start/examples/rust.md b/_archive/rhai_engine/rhaibook/start/examples/rust.md
similarity index 100%
rename from rhai_engine/rhaibook/start/examples/rust.md
rename to _archive/rhai_engine/rhaibook/start/examples/rust.md
diff --git a/rhai_engine/rhaibook/start/examples/scripts.md b/_archive/rhai_engine/rhaibook/start/examples/scripts.md
similarity index 100%
rename from rhai_engine/rhaibook/start/examples/scripts.md
rename to _archive/rhai_engine/rhaibook/start/examples/scripts.md
diff --git a/rhai_engine/rhaibook/start/features.md b/_archive/rhai_engine/rhaibook/start/features.md
similarity index 100%
rename from rhai_engine/rhaibook/start/features.md
rename to _archive/rhai_engine/rhaibook/start/features.md
diff --git a/rhai_engine/rhaibook/start/index.md b/_archive/rhai_engine/rhaibook/start/index.md
similarity index 100%
rename from rhai_engine/rhaibook/start/index.md
rename to _archive/rhai_engine/rhaibook/start/index.md
diff --git a/rhai_engine/rhaibook/start/install.md b/_archive/rhai_engine/rhaibook/start/install.md
similarity index 100%
rename from rhai_engine/rhaibook/start/install.md
rename to _archive/rhai_engine/rhaibook/start/install.md
diff --git a/rhai_engine/rhaibook/start/playground.md b/_archive/rhai_engine/rhaibook/start/playground.md
similarity index 100%
rename from rhai_engine/rhaibook/start/playground.md
rename to _archive/rhai_engine/rhaibook/start/playground.md
diff --git a/rhai_engine/rhaibook/tools/index.md b/_archive/rhai_engine/rhaibook/tools/index.md
similarity index 100%
rename from rhai_engine/rhaibook/tools/index.md
rename to _archive/rhai_engine/rhaibook/tools/index.md
diff --git a/rhai_engine/rhaibook/tools/lsp.md b/_archive/rhai_engine/rhaibook/tools/lsp.md
similarity index 100%
rename from rhai_engine/rhaibook/tools/lsp.md
rename to _archive/rhai_engine/rhaibook/tools/lsp.md
diff --git a/rhai_engine/rhaibook/tools/playground.md b/_archive/rhai_engine/rhaibook/tools/playground.md
similarity index 100%
rename from rhai_engine/rhaibook/tools/playground.md
rename to _archive/rhai_engine/rhaibook/tools/playground.md
diff --git a/rhai_engine/rhaibook/tools/rhai-doc.md b/_archive/rhai_engine/rhaibook/tools/rhai-doc.md
similarity index 100%
rename from rhai_engine/rhaibook/tools/rhai-doc.md
rename to _archive/rhai_engine/rhaibook/tools/rhai-doc.md
diff --git a/rhai_engine/rhaiexamples/LICENSE-APACHE.txt b/_archive/rhai_engine/rhaiexamples/LICENSE-APACHE.txt
similarity index 100%
rename from rhai_engine/rhaiexamples/LICENSE-APACHE.txt
rename to _archive/rhai_engine/rhaiexamples/LICENSE-APACHE.txt
diff --git a/rhai_engine/rhaiexamples/LICENSE-MIT.txt b/_archive/rhai_engine/rhaiexamples/LICENSE-MIT.txt
similarity index 100%
rename from rhai_engine/rhaiexamples/LICENSE-MIT.txt
rename to _archive/rhai_engine/rhaiexamples/LICENSE-MIT.txt
diff --git a/rhai_engine/rhaiexamples/README.md b/_archive/rhai_engine/rhaiexamples/README.md
similarity index 100%
rename from rhai_engine/rhaiexamples/README.md
rename to _archive/rhai_engine/rhaiexamples/README.md
diff --git a/rhai_engine/rhaiexamples/arrays_and_structs.rs b/_archive/rhai_engine/rhaiexamples/arrays_and_structs.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/arrays_and_structs.rs
rename to _archive/rhai_engine/rhaiexamples/arrays_and_structs.rs
diff --git a/rhai_engine/rhaiexamples/callback.rs b/_archive/rhai_engine/rhaiexamples/callback.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/callback.rs
rename to _archive/rhai_engine/rhaiexamples/callback.rs
diff --git a/rhai_engine/rhaiexamples/custom_types.rs b/_archive/rhai_engine/rhaiexamples/custom_types.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/custom_types.rs
rename to _archive/rhai_engine/rhaiexamples/custom_types.rs
diff --git a/rhai_engine/rhaiexamples/custom_types_and_methods.rs b/_archive/rhai_engine/rhaiexamples/custom_types_and_methods.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/custom_types_and_methods.rs
rename to _archive/rhai_engine/rhaiexamples/custom_types_and_methods.rs
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/all_in_one.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/all_in_one.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/all_in_one.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/all_in_one.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/all_in_one_without_standard.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/all_in_one_without_standard.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/all_in_one_without_standard.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/all_in_one_without_standard.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin-operators__.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin-operators__.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin-operators__.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin-operators__.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin__.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin__.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin__.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__builtin__.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__scope__.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__scope__.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/definitions/__scope__.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__scope__.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__static__.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__static__.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/definitions/__static__.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/__static__.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/definitions/general_kenobi.d.rhai b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/general_kenobi.d.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/definitions/general_kenobi.d.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/definitions/general_kenobi.d.rhai
diff --git a/rhai_engine/rhaiexamples/definitions/.rhai/defs.json b/_archive/rhai_engine/rhaiexamples/definitions/.rhai/defs.json
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/.rhai/defs.json
rename to _archive/rhai_engine/rhaiexamples/definitions/.rhai/defs.json
diff --git a/rhai_engine/rhaiexamples/definitions/main.rs b/_archive/rhai_engine/rhaiexamples/definitions/main.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/main.rs
rename to _archive/rhai_engine/rhaiexamples/definitions/main.rs
diff --git a/rhai_engine/rhaiexamples/definitions/script.rhai b/_archive/rhai_engine/rhaiexamples/definitions/script.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/definitions/script.rhai
rename to _archive/rhai_engine/rhaiexamples/definitions/script.rhai
diff --git a/rhai_engine/rhaiexamples/event_handler_js/main.rs b/_archive/rhai_engine/rhaiexamples/event_handler_js/main.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/event_handler_js/main.rs
rename to _archive/rhai_engine/rhaiexamples/event_handler_js/main.rs
diff --git a/rhai_engine/rhaiexamples/event_handler_js/script.rhai b/_archive/rhai_engine/rhaiexamples/event_handler_js/script.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/event_handler_js/script.rhai
rename to _archive/rhai_engine/rhaiexamples/event_handler_js/script.rhai
diff --git a/rhai_engine/rhaiexamples/event_handler_main/main.rs b/_archive/rhai_engine/rhaiexamples/event_handler_main/main.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/event_handler_main/main.rs
rename to _archive/rhai_engine/rhaiexamples/event_handler_main/main.rs
diff --git a/rhai_engine/rhaiexamples/event_handler_main/script.rhai b/_archive/rhai_engine/rhaiexamples/event_handler_main/script.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/event_handler_main/script.rhai
rename to _archive/rhai_engine/rhaiexamples/event_handler_main/script.rhai
diff --git a/rhai_engine/rhaiexamples/event_handler_map/main.rs b/_archive/rhai_engine/rhaiexamples/event_handler_map/main.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/event_handler_map/main.rs
rename to _archive/rhai_engine/rhaiexamples/event_handler_map/main.rs
diff --git a/rhai_engine/rhaiexamples/event_handler_map/script.rhai b/_archive/rhai_engine/rhaiexamples/event_handler_map/script.rhai
similarity index 100%
rename from rhai_engine/rhaiexamples/event_handler_map/script.rhai
rename to _archive/rhai_engine/rhaiexamples/event_handler_map/script.rhai
diff --git a/rhai_engine/rhaiexamples/hello.rs b/_archive/rhai_engine/rhaiexamples/hello.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/hello.rs
rename to _archive/rhai_engine/rhaiexamples/hello.rs
diff --git a/rhai_engine/rhaiexamples/pause_and_resume.rs b/_archive/rhai_engine/rhaiexamples/pause_and_resume.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/pause_and_resume.rs
rename to _archive/rhai_engine/rhaiexamples/pause_and_resume.rs
diff --git a/rhai_engine/rhaiexamples/reuse_scope.rs b/_archive/rhai_engine/rhaiexamples/reuse_scope.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/reuse_scope.rs
rename to _archive/rhai_engine/rhaiexamples/reuse_scope.rs
diff --git a/rhai_engine/rhaiexamples/serde.rs b/_archive/rhai_engine/rhaiexamples/serde.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/serde.rs
rename to _archive/rhai_engine/rhaiexamples/serde.rs
diff --git a/rhai_engine/rhaiexamples/simple_fn.rs b/_archive/rhai_engine/rhaiexamples/simple_fn.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/simple_fn.rs
rename to _archive/rhai_engine/rhaiexamples/simple_fn.rs
diff --git a/rhai_engine/rhaiexamples/strings.rs b/_archive/rhai_engine/rhaiexamples/strings.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/strings.rs
rename to _archive/rhai_engine/rhaiexamples/strings.rs
diff --git a/rhai_engine/rhaiexamples/threading.rs b/_archive/rhai_engine/rhaiexamples/threading.rs
similarity index 100%
rename from rhai_engine/rhaiexamples/threading.rs
rename to _archive/rhai_engine/rhaiexamples/threading.rs
diff --git a/rhai_engine/specs/instructions_engine.md b/_archive/rhai_engine/specs/instructions_engine.md
similarity index 100%
rename from rhai_engine/specs/instructions_engine.md
rename to _archive/rhai_engine/specs/instructions_engine.md
diff --git a/rhai_engine/src/lib.rs b/_archive/rhai_engine/src/lib.rs
similarity index 100%
rename from rhai_engine/src/lib.rs
rename to _archive/rhai_engine/src/lib.rs
diff --git a/rhai_engine/src/main.rs b/_archive/rhai_engine/src/main.rs
similarity index 100%
rename from rhai_engine/src/main.rs
rename to _archive/rhai_engine/src/main.rs
diff --git a/rhai_engine/src/simple_example.rs b/_archive/rhai_engine/src/simple_example.rs
similarity index 100%
rename from rhai_engine/src/simple_example.rs
rename to _archive/rhai_engine/src/simple_example.rs
diff --git a/rhai_engine/src/terra_integration/README.md b/_archive/rhai_engine/src/terra_integration/README.md
similarity index 100%
rename from rhai_engine/src/terra_integration/README.md
rename to _archive/rhai_engine/src/terra_integration/README.md
diff --git a/rhai_engine/src/terra_integration/example.rs b/_archive/rhai_engine/src/terra_integration/example.rs
similarity index 100%
rename from rhai_engine/src/terra_integration/example.rs
rename to _archive/rhai_engine/src/terra_integration/example.rs
diff --git a/rhai_engine/src/terra_integration/mod.rs b/_archive/rhai_engine/src/terra_integration/mod.rs
similarity index 100%
rename from rhai_engine/src/terra_integration/mod.rs
rename to _archive/rhai_engine/src/terra_integration/mod.rs
diff --git a/rhai_engine/src/terra_integration/script_manager.rs b/_archive/rhai_engine/src/terra_integration/script_manager.rs
similarity index 100%
rename from rhai_engine/src/terra_integration/script_manager.rs
rename to _archive/rhai_engine/src/terra_integration/script_manager.rs
diff --git a/rhai_engine/src/terra_integration/scripts/math_utils.rhai b/_archive/rhai_engine/src/terra_integration/scripts/math_utils.rhai
similarity index 100%
rename from rhai_engine/src/terra_integration/scripts/math_utils.rhai
rename to _archive/rhai_engine/src/terra_integration/scripts/math_utils.rhai
diff --git a/rhai_engine/src/terra_integration/scripts/string_utils.rhai b/_archive/rhai_engine/src/terra_integration/scripts/string_utils.rhai
similarity index 100%
rename from rhai_engine/src/terra_integration/scripts/string_utils.rhai
rename to _archive/rhai_engine/src/terra_integration/scripts/string_utils.rhai
diff --git a/rhai_engine/src/terra_integration/scripts/test_utils.rhai b/_archive/rhai_engine/src/terra_integration/scripts/test_utils.rhai
similarity index 100%
rename from rhai_engine/src/terra_integration/scripts/test_utils.rhai
rename to _archive/rhai_engine/src/terra_integration/scripts/test_utils.rhai
diff --git a/rhai_engine/src/terra_integration/templates/example.terra b/_archive/rhai_engine/src/terra_integration/templates/example.terra
similarity index 100%
rename from rhai_engine/src/terra_integration/templates/example.terra
rename to _archive/rhai_engine/src/terra_integration/templates/example.terra
diff --git a/rhai_engine/src/terra_integration/terra_renderer.rs b/_archive/rhai_engine/src/terra_integration/terra_renderer.rs
similarity index 100%
rename from rhai_engine/src/terra_integration/terra_renderer.rs
rename to _archive/rhai_engine/src/terra_integration/terra_renderer.rs
diff --git a/rhai_engine/src/test_dynamic_loading.rs b/_archive/rhai_engine/src/test_dynamic_loading.rs
similarity index 100%
rename from rhai_engine/src/test_dynamic_loading.rs
rename to _archive/rhai_engine/src/test_dynamic_loading.rs
diff --git a/examples/calendar/components/calendar/.cargo/config.toml b/components/calendar/.cargo/config.toml
similarity index 100%
rename from examples/calendar/components/calendar/.cargo/config.toml
rename to components/calendar/.cargo/config.toml
diff --git a/components/calendar/Cargo.lock b/components/calendar/Cargo.lock
new file mode 100644
index 0000000..550f013
--- /dev/null
+++ b/components/calendar/Cargo.lock
@@ -0,0 +1,1546 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "addr2line"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "const-random",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy 0.7.35",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "backtrace"
+version = "0.3.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
+dependencies = [
+ "addr2line",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+ "windows-targets",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+
+[[package]]
+name = "bytes"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
+
+[[package]]
+name = "calendar"
+version = "0.1.0"
+dependencies = [
+ "http",
+ "httparse",
+ "hyper",
+ "once_cell",
+ "rhai",
+ "rhai_tera",
+ "serde",
+ "serde_json",
+ "tera",
+ "tokio",
+ "utils",
+]
+
+[[package]]
+name = "cc"
+version = "1.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-link",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crunchy"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc55fe0d1f6c107595572ec8b107c0999bb1a2e0b75e37429a4fb0d6474a0e7d"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+
+[[package]]
+name = "futures-task"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+
+[[package]]
+name = "futures-util"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+
+[[package]]
+name = "globset"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
+
+[[package]]
+name = "http"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humansize"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+[[package]]
+name = "js-sys"
+version = "0.3.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
+
+[[package]]
+name = "libm"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
+dependencies = [
+ "adler2",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "object"
+version = "0.36.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "portable-atomic"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy 0.8.24",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+
+[[package]]
+name = "rhai"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce4d759a4729a655ddfdbb3ff6e77fb9eadd902dae12319455557796e435d2a6"
+dependencies = [
+ "ahash",
+ "bitflags",
+ "instant",
+ "num-traits",
+ "once_cell",
+ "rhai_codegen",
+ "serde",
+ "smallvec",
+ "smartstring",
+ "thin-vec",
+]
+
+[[package]]
+name = "rhai_codegen"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "rhai_tera"
+version = "0.1.0"
+dependencies = [
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "rustversion"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
+
+[[package]]
+name = "ryu"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slug"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724"
+dependencies = [
+ "deunicode",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "serde",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "syn"
+version = "2.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tera"
+version = "1.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee"
+dependencies = [
+ "chrono",
+ "chrono-tz",
+ "globwalk",
+ "humansize",
+ "lazy_static",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "rand",
+ "regex",
+ "serde",
+ "serde_json",
+ "slug",
+ "unic-segment",
+]
+
+[[package]]
+name = "thin-vec"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tokio"
+version = "1.44.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+
+[[package]]
+name = "utils"
+version = "0.1.0"
+dependencies = [
+ "httparse",
+ "hyper",
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+dependencies = [
+ "bumpalo",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+
+[[package]]
+name = "windows-result"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
+dependencies = [
+ "zerocopy-derive 0.8.24",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/components/calendar/Cargo.toml b/components/calendar/Cargo.toml
new file mode 100644
index 0000000..7e8f2e1
--- /dev/null
+++ b/components/calendar/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "calendar"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+tokio = { version = "1", features = ["full"] }
+http = "0.2"
+hyper = { version = "0.14", features = ["full"] }
+httparse = "1"
+rhai = { version = "1.21", features = ["serde"] }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+tera = "1.0"
+once_cell = "1"
+rhai_tera = { path = "../../rhai_tera" }
+utils = { path = "../../utils" }
\ No newline at end of file
diff --git a/examples/calendar/components/calendar/README.md b/components/calendar/README.md
similarity index 100%
rename from examples/calendar/components/calendar/README.md
rename to components/calendar/README.md
diff --git a/examples/calendar/components/calendar/develop.sh b/components/calendar/develop.sh
similarity index 68%
rename from examples/calendar/components/calendar/develop.sh
rename to components/calendar/develop.sh
index 89f807f..cb726dc 100755
--- a/examples/calendar/components/calendar/develop.sh
+++ b/components/calendar/develop.sh
@@ -6,4 +6,6 @@ reloadd \
--watch src \
--watch src/templates \
--watch examples \
- -- run --example server
\ No newline at end of file
+ --port 8080 \
+ --run "cargo build" \
+ --run "cargo run --example server"
\ No newline at end of file
diff --git a/examples/calendar/components/calendar/examples/server.rs b/components/calendar/examples/server.rs
similarity index 96%
rename from examples/calendar/components/calendar/examples/server.rs
rename to components/calendar/examples/server.rs
index 92e8df8..868ae9b 100644
--- a/examples/calendar/components/calendar/examples/server.rs
+++ b/components/calendar/examples/server.rs
@@ -89,7 +89,12 @@ const ws = new WebSocket("ws://localhost:35729");
ws.onmessage = (msg) => {
if (msg.data === "reload") location.reload();
};
-"#;
+
+
+"#;
body.extend_from_slice(b"\n");
body.extend_from_slice(livereload_snippet);
diff --git a/components/calendar/src/controller/calendar.rs b/components/calendar/src/controller/calendar.rs
new file mode 100644
index 0000000..e691537
--- /dev/null
+++ b/components/calendar/src/controller/calendar.rs
@@ -0,0 +1,33 @@
+use hyper::{Request, Body, Response, StatusCode};
+use std::path::PathBuf;
+
+// Import the rhai_tera module
+extern crate rhai_tera;
+
+pub fn get_calendars(_req: Request
) -> Response {
+ let tera = setup_tera_with_rhai();
+ let context = tera::Context::new(); // no need to pass data β we're calling the Rhai function inside
+
+ let rendered = match tera.render("get_calendars.html.tera", &context) {
+ Ok(html) => Response::new(Body::from(html)),
+ Err(err) => {
+ // π Print the full error with source
+ eprintln!("Template render error: {:?}", err); // or use err.to_string() for cleaner message
+
+ let mut res = Response::new(Body::from(format!("Template error: {}", err)));
+ *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
+ res
+ }
+ };
+
+ rendered
+}
+
+fn setup_tera_with_rhai() -> tera::Tera {
+ rhai_tera::setup_tera_with_rhai(
+ "src/templates/**/*",
+ "get_calendars",
+ PathBuf::from("../../database/scripts/calendars.rhai"),
+ "get_calendars"
+ )
+}
\ No newline at end of file
diff --git a/components/calendar/src/lib.rs b/components/calendar/src/lib.rs
new file mode 100644
index 0000000..e64a8b1
--- /dev/null
+++ b/components/calendar/src/lib.rs
@@ -0,0 +1,19 @@
+use hyper::{Body, Method, Request, Response, StatusCode};
+use std::convert::Infallible;
+
+mod controller {
+ pub mod calendar;
+}
+
+use controller::calendar;
+
+pub async fn handle_request(req: Request) -> Result, Infallible> {
+ match (req.method(), req.uri().path()) {
+ (&Method::GET, "/calendars") => Ok(calendar::get_calendars(req)),
+ _ => {
+ let mut res = Response::new(Body::from("Not Found"));
+ *res.status_mut() = StatusCode::NOT_FOUND;
+ Ok(res)
+ }
+ }
+}
\ No newline at end of file
diff --git a/components/calendar/src/main.rs b/components/calendar/src/main.rs
new file mode 100644
index 0000000..acc2065
--- /dev/null
+++ b/components/calendar/src/main.rs
@@ -0,0 +1,14 @@
+// Import the rhai_tera module from the root of the repo
+extern crate rhai_tera;
+extern crate utils;
+
+use calendar::handle_request;
+
+#[tokio::main]
+async fn main() -> Result<(), Box> {
+ let input = utils::read_request_from_stdin()?;
+ let request = utils::parse_http_request(&input)?;
+ let response = handle_request(request).await?;
+ utils::print_http_response(response).await;
+ Ok(())
+}
diff --git a/examples/calendar/components/calendar/src/templates/get_calendars.html.tera b/components/calendar/src/templates/get_calendars.html.tera
similarity index 87%
rename from examples/calendar/components/calendar/src/templates/get_calendars.html.tera
rename to components/calendar/src/templates/get_calendars.html.tera
index aba9cc9..5eecf27 100644
--- a/examples/calendar/components/calendar/src/templates/get_calendars.html.tera
+++ b/components/calendar/src/templates/get_calendars.html.tera
@@ -9,6 +9,7 @@
diff --git a/components/website/.cargo/config.toml b/components/website/.cargo/config.toml
new file mode 100644
index 0000000..63b6ada
--- /dev/null
+++ b/components/website/.cargo/config.toml
@@ -0,0 +1,2 @@
+[alias]
+dev = "watch -w src -w examples -w src/templates -w src/scripts -x 'run --example server'"
\ No newline at end of file
diff --git a/examples/calendar/components/calendar/Cargo.lock b/components/website/Cargo.lock
similarity index 99%
rename from examples/calendar/components/calendar/Cargo.lock
rename to components/website/Cargo.lock
index 21ebcd3..c180cd1 100644
--- a/examples/calendar/components/calendar/Cargo.lock
+++ b/components/website/Cargo.lock
@@ -122,6 +122,7 @@ dependencies = [
"hyper",
"once_cell",
"rhai",
+ "rhai_tera",
"serde",
"serde_json",
"tera",
@@ -888,6 +889,15 @@ dependencies = [
"syn",
]
+[[package]]
+name = "rhai_tera"
+version = "0.1.0"
+dependencies = [
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
[[package]]
name = "rustc-demangle"
version = "0.1.24"
diff --git a/examples/calendar/components/calendar/Cargo.toml b/components/website/Cargo.toml
similarity index 85%
rename from examples/calendar/components/calendar/Cargo.toml
rename to components/website/Cargo.toml
index e73a4c5..a269363 100644
--- a/examples/calendar/components/calendar/Cargo.toml
+++ b/components/website/Cargo.toml
@@ -12,4 +12,5 @@ rhai = { version = "1.21", features = ["serde"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tera = "1.0"
-once_cell = "1"
\ No newline at end of file
+once_cell = "1"
+rhai_tera = { path = "../../rhai_tera" }
\ No newline at end of file
diff --git a/components/website/README.md b/components/website/README.md
new file mode 100644
index 0000000..3766fd9
--- /dev/null
+++ b/components/website/README.md
@@ -0,0 +1,51 @@
+# Calendar Server Example
+
+A simple Rust web server using Hyper that exposes an `/all_calendars` endpoint.
+
+## Running the server
+
+```bash
+# Navigate to the examples directory
+cd /path/to/examples
+
+# Build and run the server
+cargo run
+```
+
+Once the server is running, you can access the endpoint at:
+- http://127.0.0.1:8080/all_calendars
+
+## Features
+- Simple HTTP server using Hyper
+- Single endpoint that returns "Hello World"
+
+
+Sure thing! Hereβs the Markdown version you can copy-paste directly into your README.md:
+
+## π Live Reload (Hot Reload for Development)
+
+To automatically recompile and restart your example server on file changes (e.g. Rust code, templates, Rhai scripts), you can use [`cargo-watch`](https://github.com/watchexec/cargo-watch):
+
+### β
Step 1: Install `cargo-watch`
+
+```bash
+cargo install cargo-watch
+```
+
+### β
Step 2: Run the server with live reload
+
+cargo watch -x 'run --example server'
+
+This will:
+ β’ Watch for file changes in your project
+ β’ Rebuild and re-run examples/server.rs whenever you make a change
+
+### π§ Bonus: Watch additional folders
+
+To also reload when .tera templates or .rhai scripts change:
+
+cargo watch -w src -w examples -w src/templates -w src/scripts -x 'run --example server'
+
+### π‘ Optional: Clear terminal on each reload
+
+cargo watch -c -x 'run --example server'
\ No newline at end of file
diff --git a/components/website/develop.sh b/components/website/develop.sh
new file mode 100755
index 0000000..cb726dc
--- /dev/null
+++ b/components/website/develop.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+set -e
+
+# π Start dev server with file watching and browser reload
+reloadd \
+ --watch src \
+ --watch src/templates \
+ --watch examples \
+ --port 8080 \
+ --run "cargo build" \
+ --run "cargo run --example server"
\ No newline at end of file
diff --git a/components/website/examples/server.rs b/components/website/examples/server.rs
new file mode 100644
index 0000000..868ae9b
--- /dev/null
+++ b/components/website/examples/server.rs
@@ -0,0 +1,119 @@
+use hyper::{Body, Request, Response, Server};
+use hyper::service::{make_service_fn, service_fn};
+use hyper::{Method, StatusCode};
+use std::convert::Infallible;
+use std::net::SocketAddr;
+use tokio::io::{AsyncReadExt, AsyncWriteExt};
+use tokio::process::Command;
+use httparse;
+
+async fn handle_request(req: Request) -> Result, Infallible> {
+ // Serialize request into raw HTTP format
+ let raw_request = build_raw_http_request(req).await;
+
+ // Spawn the binary
+ let mut child = Command::new("./target/debug/calendar")
+ .stdin(std::process::Stdio::piped())
+ .stdout(std::process::Stdio::piped())
+ .spawn()
+ .expect("failed to spawn binary");
+
+ // Feed raw HTTP request to binary's stdin
+ if let Some(mut stdin) = child.stdin.take() {
+ let _ = stdin.write_all(&raw_request).await;
+ }
+
+ // Read response from binary's stdout
+ let mut stdout = child.stdout.take().expect("no stdout");
+ let mut output = Vec::new();
+ let _ = stdout.read_to_end(&mut output).await;
+
+ let _ = child.wait().await;
+
+ // Parse raw HTTP response
+ match parse_raw_http_response(&output) {
+ Ok(res) => Ok(res),
+ Err(e) => {
+ let mut resp = Response::new(Body::from(format!("Failed to parse response: {}", e)));
+ *resp.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
+ Ok(resp)
+ }
+ }
+}
+
+// Build raw HTTP request string
+async fn build_raw_http_request(req: Request) -> Vec {
+ let mut raw = String::new();
+
+ let method = req.method();
+ let path = req.uri().path();
+ let version = match req.version() {
+ hyper::Version::HTTP_11 => "HTTP/1.1",
+ _ => "HTTP/1.1",
+ };
+
+ raw.push_str(&format!("{method} {path} {version}\r\n"));
+
+ for (key, value) in req.headers() {
+ if let Ok(val_str) = value.to_str() {
+ raw.push_str(&format!("{}: {}\r\n", key, val_str));
+ }
+ }
+
+ raw.push_str("\r\n");
+
+ let body_bytes = hyper::body::to_bytes(req.into_body()).await.unwrap_or_default();
+ let mut full = raw.into_bytes();
+ full.extend_from_slice(&body_bytes);
+
+ full
+}
+
+// Parse raw HTTP response into hyper::Response
+fn parse_raw_http_response(bytes: &[u8]) -> Result, Box> {
+ let mut headers = [httparse::EMPTY_HEADER; 64];
+ let mut res = httparse::Response::new(&mut headers);
+ let parsed_len = res.parse(bytes)?.unwrap(); // returns offset
+
+ let status = res.code.unwrap_or(200);
+ let mut builder = Response::builder().status(status);
+
+ for h in res.headers.iter() {
+ builder = builder.header(h.name, std::str::from_utf8(h.value)?);
+ }
+
+ // Get body and append LiveReload script
+ let mut body = bytes[parsed_len..].to_vec();
+ let livereload_snippet = br#"
+
+"#;
+ body.extend_from_slice(b"\n");
+ body.extend_from_slice(livereload_snippet);
+
+ Ok(builder.body(Body::from(body))?)
+}
+
+#[tokio::main]
+async fn main() {
+ let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
+
+ let make_svc = make_service_fn(|_conn| async {
+ Ok::<_, Infallible>(service_fn(handle_request))
+ });
+
+ println!("Proxy server running at http://{}", addr);
+
+ if let Err(e) = Server::bind(&addr).serve(make_svc).await {
+ eprintln!("server error: {}", e);
+ }
+}
+
+
diff --git a/components/website/src/controller/calendar.rs b/components/website/src/controller/calendar.rs
new file mode 100644
index 0000000..e691537
--- /dev/null
+++ b/components/website/src/controller/calendar.rs
@@ -0,0 +1,33 @@
+use hyper::{Request, Body, Response, StatusCode};
+use std::path::PathBuf;
+
+// Import the rhai_tera module
+extern crate rhai_tera;
+
+pub fn get_calendars(_req: Request) -> Response {
+ let tera = setup_tera_with_rhai();
+ let context = tera::Context::new(); // no need to pass data β we're calling the Rhai function inside
+
+ let rendered = match tera.render("get_calendars.html.tera", &context) {
+ Ok(html) => Response::new(Body::from(html)),
+ Err(err) => {
+ // π Print the full error with source
+ eprintln!("Template render error: {:?}", err); // or use err.to_string() for cleaner message
+
+ let mut res = Response::new(Body::from(format!("Template error: {}", err)));
+ *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
+ res
+ }
+ };
+
+ rendered
+}
+
+fn setup_tera_with_rhai() -> tera::Tera {
+ rhai_tera::setup_tera_with_rhai(
+ "src/templates/**/*",
+ "get_calendars",
+ PathBuf::from("../../database/scripts/calendars.rhai"),
+ "get_calendars"
+ )
+}
\ No newline at end of file
diff --git a/examples/calendar/components/calendar/src/main.rs b/components/website/src/main.rs
similarity index 96%
rename from examples/calendar/components/calendar/src/main.rs
rename to components/website/src/main.rs
index 9f7d1b0..7091326 100644
--- a/examples/calendar/components/calendar/src/main.rs
+++ b/components/website/src/main.rs
@@ -1,3 +1,6 @@
+// Import the rhai_tera module from the root of the repo
+extern crate rhai_tera;
+
mod controller {
pub mod calendar;
}
diff --git a/components/website/src/templates/get_calendars.html.tera b/components/website/src/templates/get_calendars.html.tera
new file mode 100644
index 0000000..5eecf27
--- /dev/null
+++ b/components/website/src/templates/get_calendars.html.tera
@@ -0,0 +1,17 @@
+Calendars
+
+{% for cal in get_calendars() %}
+-
+
+
+
{{ cal.name }}
+ {{ cal.description }}
+
+
+
+
+{% endfor %}
+
\ No newline at end of file
diff --git a/examples/calendar/backend/Cargo.lock b/database/Cargo.lock
similarity index 100%
rename from examples/calendar/backend/Cargo.lock
rename to database/Cargo.lock
diff --git a/examples/calendar/backend/Cargo.toml b/database/Cargo.toml
similarity index 100%
rename from examples/calendar/backend/Cargo.toml
rename to database/Cargo.toml
diff --git a/examples/calendar/backend/data/calendars.json b/database/data/calendars.json
similarity index 100%
rename from examples/calendar/backend/data/calendars.json
rename to database/data/calendars.json
diff --git a/examples/calendar/backend/data/events.json b/database/data/events.json
similarity index 100%
rename from examples/calendar/backend/data/events.json
rename to database/data/events.json
diff --git a/examples/calendar/backend/data/users.json b/database/data/users.json
similarity index 100%
rename from examples/calendar/backend/data/users.json
rename to database/data/users.json
diff --git a/examples/calendar/backend/main.rhai b/database/main.rhai
similarity index 100%
rename from examples/calendar/backend/main.rhai
rename to database/main.rhai
diff --git a/examples/calendar/backend/main.rs b/database/main.rs
similarity index 100%
rename from examples/calendar/backend/main.rs
rename to database/main.rs
diff --git a/examples/calendar/backend/models/calendar_model.rhai b/database/models/calendar_model.rhai
similarity index 100%
rename from examples/calendar/backend/models/calendar_model.rhai
rename to database/models/calendar_model.rhai
diff --git a/examples/calendar/backend/models/event_model.rhai b/database/models/event_model.rhai
similarity index 100%
rename from examples/calendar/backend/models/event_model.rhai
rename to database/models/event_model.rhai
diff --git a/examples/calendar/backend/models/user_model.rhai b/database/models/user_model.rhai
similarity index 100%
rename from examples/calendar/backend/models/user_model.rhai
rename to database/models/user_model.rhai
diff --git a/examples/calendar/backend/scripts/calendars.rhai b/database/scripts/calendars.rhai
similarity index 100%
rename from examples/calendar/backend/scripts/calendars.rhai
rename to database/scripts/calendars.rhai
diff --git a/examples/calendar/backend/scripts/events.rhai b/database/scripts/events.rhai
similarity index 100%
rename from examples/calendar/backend/scripts/events.rhai
rename to database/scripts/events.rhai
diff --git a/examples/calendar/backend/scripts/users.rhai b/database/scripts/users.rhai
similarity index 100%
rename from examples/calendar/backend/scripts/users.rhai
rename to database/scripts/users.rhai
diff --git a/examples/calendar/backend/scripts/utils.rhai b/database/scripts/utils.rhai
similarity index 100%
rename from examples/calendar/backend/scripts/utils.rhai
rename to database/scripts/utils.rhai
diff --git a/devtools/reloadd/Cargo.lock b/devtools/reloadd/Cargo.lock
new file mode 100644
index 0000000..605fb28
--- /dev/null
+++ b/devtools/reloadd/Cargo.lock
@@ -0,0 +1,1320 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "addr2line"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+
+[[package]]
+name = "anstream"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is_terminal_polyfill",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
+dependencies = [
+ "anstyle",
+ "once_cell",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "backtrace"
+version = "0.3.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
+dependencies = [
+ "addr2line",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.5.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "libredox",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+
+[[package]]
+name = "futures-task"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+
+[[package]]
+name = "futures-util"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "http"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "icu_collections"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
+dependencies = [
+ "displaydoc",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
+dependencies = [
+ "displaydoc",
+ "litemap",
+ "tinystr",
+ "writeable",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_locid_transform_data"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d"
+
+[[package]]
+name = "icu_normalizer"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "smallvec",
+ "utf16_iter",
+ "utf8_iter",
+ "write16",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7"
+
+[[package]]
+name = "icu_properties"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "tinystr",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2"
+
+[[package]]
+name = "icu_provider"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "idna"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
+dependencies = [
+ "idna_adapter",
+ "smallvec",
+ "utf8_iter",
+]
+
+[[package]]
+name = "idna_adapter"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
+dependencies = [
+ "icu_normalizer",
+ "icu_properties",
+]
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "is_terminal_polyfill"
+version = "1.70.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
+
+[[package]]
+name = "itoa"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+[[package]]
+name = "kqueue"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
+
+[[package]]
+name = "libredox"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+dependencies = [
+ "bitflags 2.9.0",
+ "libc",
+ "redox_syscall",
+]
+
+[[package]]
+name = "litemap"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff70ce3e48ae43fa075863cef62e8b43b71a4f2382229920e0df362592919430"
+dependencies = [
+ "adler2",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.9.0",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log",
+ "mio 0.8.11",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "object"
+version = "0.36.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
+dependencies = [
+ "bitflags 2.9.0",
+]
+
+[[package]]
+name = "reloadd"
+version = "0.1.0"
+dependencies = [
+ "clap",
+ "futures-util",
+ "notify",
+ "tokio",
+ "tokio-tungstenite",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+
+[[package]]
+name = "socket2"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
+[[package]]
+name = "syn"
+version = "2.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "synstructure"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
+dependencies = [
+ "displaydoc",
+ "zerovec",
+]
+
+[[package]]
+name = "tokio"
+version = "1.44.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio 1.0.3",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38"
+dependencies = [
+ "futures-util",
+ "log",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "data-encoding",
+ "http",
+ "httparse",
+ "log",
+ "rand",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+
+[[package]]
+name = "url"
+version = "2.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf16_iter"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
+
+[[package]]
+name = "utf8_iter"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.6",
+ "windows_aarch64_msvc 0.52.6",
+ "windows_i686_gnu 0.52.6",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc 0.52.6",
+ "windows_x86_64_gnu 0.52.6",
+ "windows_x86_64_gnullvm 0.52.6",
+ "windows_x86_64_msvc 0.52.6",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "write16"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
+
+[[package]]
+name = "writeable"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
+
+[[package]]
+name = "yoke"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
+dependencies = [
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/devtools/reloadd/README.md b/devtools/reloadd/README.md
new file mode 100644
index 0000000..4267c24
--- /dev/null
+++ b/devtools/reloadd/README.md
@@ -0,0 +1,124 @@
+# Reloadd
+
+A powerful development tool for automatically restarting your application and reloading your browser when files change.
+
+## Features
+
+- π **File Watching**: Monitor multiple directories for changes
+- π **Auto-Restart**: Automatically restart your application when files change
+- π **Browser Reload**: Automatically reload connected browsers
+- π **WebSocket Integration**: Uses WebSockets for instant browser reloading
+- π **Sequential Commands**: Run multiple commands in sequence
+- π§ **Configurable Ports**: Customize web server and WebSocket ports
+- π οΈ **Robust Error Handling**: Clear error messages and graceful recovery
+
+## Installation
+
+### From Source
+
+```bash
+# Clone the repository
+git clone https://github.com/yourusername/reloadd.git
+cd reloadd
+
+# Build and install
+cargo install --path .
+```
+
+## Usage
+
+### Basic Usage
+
+```bash
+reloadd --watch src --watch templates -- run --example server
+```
+
+### With Sequential Commands
+
+```bash
+reloadd --watch src --run "cargo build" --run "cargo test" --run "cargo run --example server"
+```
+
+Commands will run in the order specified. All commands except the last one will run to completion. The last command is treated as the long-running server process.
+
+### With Custom Port
+
+```bash
+reloadd --watch src --port 3000 --run "cargo run --example server"
+```
+
+### In a Shell Script
+
+Create a `develop.sh` script for your project:
+
+```bash
+#!/usr/bin/env bash
+set -e
+
+# Start dev server with file watching and browser reload
+reloadd \
+ --watch src \
+ --watch templates \
+ --port 8080 \
+ --run "cargo run --example server"
+```
+
+Make it executable and run it:
+
+```bash
+chmod +x develop.sh
+./develop.sh
+```
+
+## Command Line Options
+
+```
+Usage: reloadd [OPTIONS] --watch ... [-- ...]
+
+Arguments:
+ [COMMAND]... Command to run on change (legacy format)
+
+Options:
+ -w, --watch ... Paths to watch (like src/, templates/, scripts/)
+ -p, --port Port for the web server [default: 8080]
+ -r, --run ... Multiple commands to run
+ -h, --help Print help
+ -V, --version Print version
+```
+
+## LiveReload Integration
+
+When you start the tool, it will output a script tag that you can add to your HTML files:
+
+```html
+
+```
+
+Add this script to your HTML templates to enable automatic browser reloading.
+
+## How It Works
+
+1. Reloadd watches specified directories for file changes
+2. When a change is detected, it runs your commands in sequence
+3. Build commands (all except the last) run to completion before proceeding
+4. The last command (typically a server) runs and stays active
+5. After a brief delay, it sends a reload signal to connected browsers
+6. Browsers with the LiveReload script will automatically refresh
+
+## Error Handling
+
+Reloadd includes robust error handling:
+
+- Validates watch paths before starting
+- Checks for port availability
+- Provides clear error messages
+- Gracefully exits with error codes when critical errors occur
+
+## License
+
+MIT
diff --git a/devtools/reloadd/src/main.rs b/devtools/reloadd/src/main.rs
index e0acc40..1c9c3a6 100644
--- a/devtools/reloadd/src/main.rs
+++ b/devtools/reloadd/src/main.rs
@@ -9,6 +9,7 @@ use futures_util::{SinkExt, StreamExt};
use tokio::time::{sleep, Duration};
use tokio::io::AsyncWriteExt;
use std::net::TcpListener as StdTcpListener;
+use std::net::SocketAddr;
#[derive(Parser, Debug)]
#[command(author, version, about)]
@@ -17,53 +18,142 @@ struct Args {
#[arg(short, long, value_name = "PATH", num_args = 1.., required = true)]
watch: Vec,
+ /// Port for the web server (default: 8080)
+ #[arg(short, long, default_value = "8080")]
+ port: u16,
+
+ /// Multiple commands to run (format: --run "cargo build" --run "cargo test")
+ #[arg(short, long, value_name = "COMMAND", num_args = 1..)]
+ run: Vec,
+
/// Command to run on change (like: -- run --example server)
+ /// This is kept for backward compatibility
#[arg(last = true)]
command: Vec,
}
-async fn wait_for_server(port: u16) -> bool {
- let address = format!("localhost:{}", port);
- let mut retries = 0;
-
- while retries < 10 {
- if let Ok(mut stream) = TcpStream::connect(&address).await {
- let _ = stream.write_all(b"GET / HTTP/1.1\r\n\r\n").await; // A dummy GET request
- println!("β
Server is ready on {}!", address);
- return true;
+// Run commands in sequence, with the last one potentially being a long-running server
+async fn run_commands_in_sequence(commands: &[Vec], server_process: Arc>>) -> bool {
+ // Run all commands in sequence
+ for (i, command) in commands.iter().enumerate() {
+ let is_last = i == commands.len() - 1;
+ let program = if command[0] == "cargo" || command[0].ends_with("/cargo") {
+ "cargo".to_string()
} else {
- retries += 1;
- println!("β³ Waiting for server to be ready (Attempt {}/10)...", retries);
- sleep(Duration::from_secs(1)).await;
+ command[0].clone()
+ };
+
+ let args = if command[0] == "cargo" || command[0].ends_with("/cargo") {
+ command.iter().skip(1).cloned().collect::>()
+ } else {
+ command.iter().skip(1).cloned().collect::>()
+ };
+
+ let mut cmd = Command::new(&program);
+ cmd.args(&args);
+ cmd.stdout(Stdio::inherit())
+ .stderr(Stdio::inherit());
+
+ if is_last {
+ // Last command might be a long-running server
+ match cmd.spawn() {
+ Ok(child) => {
+ *server_process.lock().unwrap() = Some(child);
+ println!("π Started server process: {} {}", program, args.join(" "));
+ },
+ Err(e) => {
+ eprintln!("β Failed to start server process: {}", e);
+ return false;
+ }
+ }
+ } else {
+ // For non-last commands, wait for them to complete
+ println!("π Running build step: {} {}", program, args.join(" "));
+ match cmd.output() {
+ Ok(output) => {
+ if !output.status.success() {
+ eprintln!("β Command failed: {} {}", program, args.join(" "));
+ return false;
+ }
+ println!("β
Command completed successfully");
+ },
+ Err(e) => {
+ eprintln!("β Failed to execute command: {}", e);
+ return false;
+ }
+ }
}
}
-
- eprintln!("β Server not ready after 10 attempts.");
- false
+
+ true
}
// Check if a port is already in use
fn is_port_in_use(port: u16) -> bool {
StdTcpListener::bind(format!("127.0.0.1:{}", port)).is_err()
}
+
+// Find an available port starting from the given port
+fn find_available_port(start_port: u16) -> Option {
+ let mut port = start_port;
+ // Try up to 10 ports (start_port through start_port+9)
+ for _ in 0..10 {
+ if !is_port_in_use(port) {
+ return Some(port);
+ }
+ port += 1;
+ }
+ None
+}
+
+// Generate LiveReload script with the given WebSocket port
+fn generate_livereload_script(ws_port: u16) -> String {
+ format!(
+ r#""#,
+ ws_port
+ )
+}
#[tokio::main]
async fn main() {
let args = Args::parse();
- println!("Command: {:?}", args.command);
+
+ // Handle both the new --run and legacy command format
+ let commands = if !args.run.is_empty() {
+ // New format: each --run is a separate command
+ args.run.iter().map(|cmd| {
+ // Split the command string into arguments
+ cmd.split_whitespace().map(String::from).collect::>()
+ }).collect::>>()
+ } else if !args.command.is_empty() {
+ // Legacy format: single command from the trailing arguments
+ println!("Command: {:?}", args.command);
+ vec![args.command.clone()]
+ } else {
+ // No commands provided
+ eprintln!("β Error: No commands provided. Use --run or trailing arguments.");
+ std::process::exit(1);
+ };
// Check if server port is already in use
- let server_port = 8080; // Adjust as needed
+ let server_port = args.port;
if is_port_in_use(server_port) {
eprintln!("β Error: Port {} is already in use. Stop any running instances before starting a new one.", server_port);
std::process::exit(1);
}
- // Check if WebSocket port is already in use
- let ws_port = 35729;
- if is_port_in_use(ws_port) {
- eprintln!("β Error: WebSocket port {} is already in use. Stop any running instances before starting a new one.", ws_port);
- std::process::exit(1);
- }
+ // Find an available WebSocket port
+ let ws_port = match find_available_port(35729) {
+ Some(port) => port,
+ None => {
+ eprintln!("β Error: Could not find an available WebSocket port. Please free up some ports and try again.");
+ std::process::exit(1);
+ }
+ };
let (tx, _) = broadcast::channel::<()>(10);
let tx_ws = tx.clone();
@@ -87,46 +177,34 @@ async fn main() {
}
// Start WebSocket reload server
- match start_websocket_server(tx_ws.clone()).await {
+ match start_websocket_server(tx_ws.clone(), ws_port).await {
Ok(_) => {},
Err(e) => {
eprintln!("β Failed to start WebSocket server: {}", e);
std::process::exit(1);
}
}
+
+ // Output the LiveReload script for users to add to their projects
+ println!("π Add this script to your HTML for live reloading:");
+ println!("{}", generate_livereload_script(ws_port));
- // π Run the server immediately
- {
- let mut cmd = Command::new("cargo");
- cmd.args(&args.command);
- cmd.stdout(Stdio::inherit())
- .stderr(Stdio::inherit());
- match cmd.spawn() {
- Ok(child) => {
- *server_process.lock().unwrap() = Some(child);
- },
- Err(e) => {
- eprintln!("β Failed to start initial process: {}", e);
- std::process::exit(1);
- }
- }
- }
-
- // Wait for the server to be ready before triggering reloads
- if !wait_for_server(server_port).await {
- eprintln!("β Server failed to start properly.");
+ // π Run all commands in sequence
+ if !run_commands_in_sequence(&commands, Arc::clone(&server_process)).await {
+ eprintln!("β Command execution failed.");
std::process::exit(1);
}
println!("π Watching paths: {:?}", args.watch);
println!("π Connect browser to ws://localhost:{}", ws_port);
+ println!("π₯οΈ Web server running on http://localhost:{}", server_port);
// Create a runtime handle for the watcher to use
let rt_handle = tokio::runtime::Handle::current();
// Clone necessary values before moving into the watcher thread
let watch_paths = args.watch.clone();
- let cmd_args = args.command.clone();
+ let commands_clone = commands.clone();
let server_process_clone = Arc::clone(&server_process);
let tx_clone = tx.clone();
@@ -143,27 +221,41 @@ async fn main() {
let _ = child.kill();
}
- // Run new process
- let mut cmd = Command::new("cargo");
- cmd.args(&cmd_args);
- cmd.stdout(Stdio::inherit())
- .stderr(Stdio::inherit());
-
- match cmd.spawn() {
- Ok(child) => {
- *server_process_clone.lock().unwrap() = Some(child);
-
- // Use the runtime handle to spawn a task
- let tx = tx_clone.clone();
- rt_handle.spawn(async move {
- if wait_for_server(server_port).await {
+ // Run new process (only the primary command gets restarted)
+ if let Some(first_command) = commands.first() {
+ let program = if first_command[0] == "cargo" || first_command[0].ends_with("/cargo") {
+ "cargo".to_string()
+ } else {
+ first_command[0].clone()
+ };
+
+ let args = if first_command[0] == "cargo" || first_command[0].ends_with("/cargo") {
+ first_command.iter().skip(1).cloned().collect::>()
+ } else {
+ first_command.iter().skip(1).cloned().collect::>()
+ };
+
+ let mut cmd = Command::new(&program);
+ cmd.args(&args);
+ cmd.stdout(Stdio::inherit())
+ .stderr(Stdio::inherit());
+
+ match cmd.spawn() {
+ Ok(child) => {
+ *server_process_clone.lock().unwrap() = Some(child);
+
+ // Immediately send reload signal without waiting for server
+ let tx = tx_clone.clone();
+ rt_handle.spawn(async move {
+ // Small delay to give the server a moment to start
+ sleep(Duration::from_millis(500)).await;
// Notify browser to reload
let _ = tx.send(());
- }
- });
- },
- Err(e) => {
- eprintln!("β Failed to spawn process: {}", e);
+ });
+ },
+ Err(e) => {
+ eprintln!("β Failed to spawn process: {}", e);
+ }
}
}
}
@@ -205,9 +297,10 @@ async fn main() {
}
}
-async fn start_websocket_server(tx: broadcast::Sender<()>) -> Result<(), Box> {
- let listener = tokio::net::TcpListener::bind("127.0.0.1:35729").await?;
- println!("WebSocket server started on ws://localhost:35729");
+async fn start_websocket_server(tx: broadcast::Sender<()>, ws_port: u16) -> Result<(), Box> {
+ let addr = format!("127.0.0.1:{}", ws_port);
+ let listener = tokio::net::TcpListener::bind(&addr).await?;
+ println!("WebSocket server started on ws://localhost:{}", ws_port);
// Spawn a task to handle WebSocket connections
tokio::spawn(async move {
diff --git a/examples/calendar/components/calendar/src/controller/calendar.rs b/examples/calendar/components/calendar/src/controller/calendar.rs
deleted file mode 100644
index 7364856..0000000
--- a/examples/calendar/components/calendar/src/controller/calendar.rs
+++ /dev/null
@@ -1,121 +0,0 @@
-use rhai::{Engine, Scope, Array, Dynamic, AST};
-use hyper::{Request, Body, Response, StatusCode};
-use std::collections::HashMap;
-use tera::{Function as TeraFunction, Value, to_value, Result as TeraResult};
-use tera::Tera;
-use std::path::PathBuf;
-use serde_json;
-use once_cell::sync::Lazy;
-
-pub fn get_calendars(_req: Request) -> Response {
- let engine = Engine::new();
-
- // Compile the script
- let ast = match engine.compile_file(
- "/Users/timurgordon/code/git.ourworld.tf/herocode/rhaj/examples/calendar/backend/scripts/calendars.rhai".into()
- ) {
- Ok(ast) => ast,
- Err(e) => {
- let mut res = Response::new(Body::from(format!("Rhai compile error: {}", e)));
- *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
- return res;
- }
- };
-
- let mut scope = Scope::new();
-
-
- let tera = setup_tera_with_rhai();
-
- let context = tera::Context::new(); // no need to pass data β we're calling the Rhai function inside
-
- let rendered = match tera.render("get_calendars.html.tera", &context) {
- Ok(html) => Response::new(Body::from(html)),
- Err(err) => {
- // π Print the full error with source
- eprintln!("Template render error: {:?}", err); // or use err.to_string() for cleaner message
-
- let mut res = Response::new(Body::from(format!("Template error: {}", err)));
- *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
- res
- }
- };
-
- rendered
-}
-
-// pub fn get_calendars(_req: Request) -> Response {
-// let engine = Engine::new();
-
-// // Compile the script
-// let ast = match engine.compile_file(
-// "/Users/timurgordon/code/git.ourworld.tf/herocode/rhaj/examples/calendar/backend/scripts/calendars.rhai".into()
-// ) {
-// Ok(ast) => ast,
-// Err(e) => {
-// let mut res = Response::new(Body::from(format!("Rhai compile error: {}", e)));
-// *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
-// return res;
-// }
-// };
-
-// let mut scope = Scope::new();
-
-// // Call the function in the Rhai script
-// match engine.call_fn::(&mut scope, &ast, "get_calendars", ()) {
-// Ok(result) => {
-// // Convert array to string representation
-// let response_text = format!("{:?}", result);
-// Response::new(Body::from(response_text))
-// },
-// Err(e) => {
-// let mut res = Response::new(Body::from(format!("Rhai call error: {}", e)));
-// *res.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
-// res
-// }
-// }
-// }
-
-pub struct RhaiFunctionAdapter {
- fn_name: String,
- script_path: PathBuf,
-}
-
-impl TeraFunction for RhaiFunctionAdapter {
- fn call(&self, args: &HashMap) -> TeraResult {
- let mut scope = Scope::new();
-
- // Convert args from Tera into Rhai's Dynamic
- for (key, value) in args {
- let json_str = serde_json::to_string(value).unwrap();
- let json_value: serde_json::Value = serde_json::from_str(&json_str).unwrap();
- let dynamic = rhai::serde::to_dynamic(json_value).unwrap();
- scope.push_dynamic(key.clone(), dynamic);
- }
-
- // Build engine and compile AST inside call (safe)
- let engine = Engine::new();
- let ast = engine
- .compile_file(self.script_path.clone())
- .map_err(|e| tera::Error::msg(format!("Rhai compile error: {}", e)))?;
-
- let result = engine
- .call_fn::(&mut scope, &ast, &self.fn_name, ())
- .map_err(|e| tera::Error::msg(format!("Rhai error: {}", e)))?;
-
- let tera_value = rhai::serde::from_dynamic(&result).unwrap();
- Ok(tera_value)
- }
-}
-
-fn setup_tera_with_rhai() -> Tera {
- let mut tera = Tera::new("src/templates/**/*").unwrap();
-
- let adapter = RhaiFunctionAdapter {
- fn_name: "get_calendars".into(),
- script_path: PathBuf::from("../../backend/scripts/calendars.rhai"),
- };
-
- tera.register_function("get_calendars", adapter);
- tera
-}
\ No newline at end of file
diff --git a/rhai_tera/Cargo.lock b/rhai_tera/Cargo.lock
new file mode 100644
index 0000000..01f105f
--- /dev/null
+++ b/rhai_tera/Cargo.lock
@@ -0,0 +1,1119 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "const-random",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy 0.7.35",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "bitflags"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+
+[[package]]
+name = "cc"
+version = "1.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-link",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crunchy"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc55fe0d1f6c107595572ec8b107c0999bb1a2e0b75e37429a4fb0d6474a0e7d"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "humansize"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+[[package]]
+name = "js-sys"
+version = "0.3.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
+
+[[package]]
+name = "libm"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
+
+[[package]]
+name = "log"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy 0.8.24",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "regex"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+
+[[package]]
+name = "rhai"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce4d759a4729a655ddfdbb3ff6e77fb9eadd902dae12319455557796e435d2a6"
+dependencies = [
+ "ahash",
+ "bitflags",
+ "instant",
+ "num-traits",
+ "once_cell",
+ "rhai_codegen",
+ "smallvec",
+ "smartstring",
+ "thin-vec",
+]
+
+[[package]]
+name = "rhai_codegen"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "rhai_tera"
+version = "0.1.0"
+dependencies = [
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
+
+[[package]]
+name = "ryu"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "siphasher"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
+[[package]]
+name = "slug"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724"
+dependencies = [
+ "deunicode",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "syn"
+version = "2.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tera"
+version = "1.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee"
+dependencies = [
+ "chrono",
+ "chrono-tz",
+ "globwalk",
+ "humansize",
+ "lazy_static",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "rand",
+ "regex",
+ "serde",
+ "serde_json",
+ "slug",
+ "unic-segment",
+]
+
+[[package]]
+name = "thin-vec"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d"
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+dependencies = [
+ "bumpalo",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+
+[[package]]
+name = "windows-result"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
+dependencies = [
+ "zerocopy-derive 0.8.24",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/rhai_tera/Cargo.toml b/rhai_tera/Cargo.toml
new file mode 100644
index 0000000..ef95b16
--- /dev/null
+++ b/rhai_tera/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "rhai_tera"
+version = "0.1.0"
+edition = "2021"
+description = "Integration between Rhai scripting and Tera templating"
+
+[dependencies]
+rhai = { version = "1.15.1", features = ["serde"] }
+tera = "1.19.0"
+serde_json = "1.0.107"
diff --git a/rhai_tera/src/lib.rs b/rhai_tera/src/lib.rs
new file mode 100644
index 0000000..bc084b9
--- /dev/null
+++ b/rhai_tera/src/lib.rs
@@ -0,0 +1,65 @@
+use rhai::{Engine, Scope, Dynamic};
+use std::collections::HashMap;
+use tera::{Function as TeraFunction, Value, Result as TeraResult};
+use tera::Tera;
+use std::path::PathBuf;
+use serde_json;
+
+pub struct RhaiFunctionAdapter {
+ fn_name: String,
+ script_path: PathBuf,
+}
+
+impl TeraFunction for RhaiFunctionAdapter {
+ fn call(&self, args: &HashMap) -> TeraResult {
+ let mut scope = Scope::new();
+
+ // Convert args from Tera into Rhai's Dynamic
+ for (key, value) in args {
+ let json_str = serde_json::to_string(value).unwrap();
+ let json_value: serde_json::Value = serde_json::from_str(&json_str).unwrap();
+ let dynamic = rhai::serde::to_dynamic(json_value).unwrap();
+ scope.push_dynamic(key.clone(), dynamic);
+ }
+
+ // Build engine and compile AST inside call (safe)
+ let engine = Engine::new();
+ let ast = engine
+ .compile_file(self.script_path.clone())
+ .map_err(|e| tera::Error::msg(format!("Rhai compile error: {}", e)))?;
+
+ let result = engine
+ .call_fn::(&mut scope, &ast, &self.fn_name, ())
+ .map_err(|e| tera::Error::msg(format!("Rhai error: {}", e)))?;
+
+ let tera_value = rhai::serde::from_dynamic(&result).unwrap();
+ Ok(tera_value)
+ }
+}
+
+/// Sets up a Tera instance with a Rhai function adapter
+///
+/// # Arguments
+/// * `templates_path` - Path to the templates directory
+/// * `fn_name` - Name of the Rhai function to call
+/// * `script_path` - Path to the Rhai script file
+/// * `tera_fn_name` - Name to register the function as in Tera
+///
+/// # Returns
+/// A configured Tera instance with the Rhai function registered
+pub fn setup_tera_with_rhai(
+ templates_path: &str,
+ fn_name: &str,
+ script_path: PathBuf,
+ tera_fn_name: &str
+) -> Tera {
+ let mut tera = Tera::new(templates_path).unwrap();
+
+ let adapter = RhaiFunctionAdapter {
+ fn_name: fn_name.into(),
+ script_path,
+ };
+
+ tera.register_function(tera_fn_name, adapter);
+ tera
+}
diff --git a/server/Cargo.lock b/server/Cargo.lock
new file mode 100644
index 0000000..6e528c8
--- /dev/null
+++ b/server/Cargo.lock
@@ -0,0 +1,1563 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "addr2line"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler2"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "const-random",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy 0.7.35",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "backtrace"
+version = "0.3.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
+dependencies = [
+ "addr2line",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+ "windows-targets",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+
+[[package]]
+name = "bytes"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
+
+[[package]]
+name = "calendar"
+version = "0.1.0"
+dependencies = [
+ "http",
+ "httparse",
+ "hyper",
+ "once_cell",
+ "rhai",
+ "rhai_tera",
+ "serde",
+ "serde_json",
+ "tera",
+ "tokio",
+ "utils",
+]
+
+[[package]]
+name = "cc"
+version = "1.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-link",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crunchy"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc55fe0d1f6c107595572ec8b107c0999bb1a2e0b75e37429a4fb0d6474a0e7d"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "futures-channel"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
+
+[[package]]
+name = "futures-task"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
+
+[[package]]
+name = "futures-util"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
+
+[[package]]
+name = "globset"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
+
+[[package]]
+name = "http"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humansize"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+[[package]]
+name = "js-sys"
+version = "0.3.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
+
+[[package]]
+name = "libm"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
+dependencies = [
+ "adler2",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "object"
+version = "0.36.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "portable-atomic"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy 0.8.24",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+
+[[package]]
+name = "rhai"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce4d759a4729a655ddfdbb3ff6e77fb9eadd902dae12319455557796e435d2a6"
+dependencies = [
+ "ahash",
+ "bitflags",
+ "instant",
+ "num-traits",
+ "once_cell",
+ "rhai_codegen",
+ "serde",
+ "smallvec",
+ "smartstring",
+ "thin-vec",
+]
+
+[[package]]
+name = "rhai_codegen"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "rhai_tera"
+version = "0.1.0"
+dependencies = [
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
+[[package]]
+name = "rustversion"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
+
+[[package]]
+name = "ryu"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "server"
+version = "0.1.0"
+dependencies = [
+ "calendar",
+ "http",
+ "httparse",
+ "hyper",
+ "once_cell",
+ "rhai",
+ "rhai_tera",
+ "serde",
+ "serde_json",
+ "tera",
+ "tokio",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "siphasher"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slug"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724"
+dependencies = [
+ "deunicode",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "serde",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "syn"
+version = "2.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tera"
+version = "1.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee"
+dependencies = [
+ "chrono",
+ "chrono-tz",
+ "globwalk",
+ "humansize",
+ "lazy_static",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "rand",
+ "regex",
+ "serde",
+ "serde_json",
+ "slug",
+ "unic-segment",
+]
+
+[[package]]
+name = "thin-vec"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tokio"
+version = "1.44.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
+[[package]]
+name = "tracing"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
+dependencies = [
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
+
+[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+
+[[package]]
+name = "utils"
+version = "0.1.0"
+dependencies = [
+ "httparse",
+ "hyper",
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+dependencies = [
+ "bumpalo",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+
+[[package]]
+name = "windows-result"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
+dependencies = [
+ "zerocopy-derive 0.8.24",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/server/Cargo.toml b/server/Cargo.toml
new file mode 100644
index 0000000..f7d4dc4
--- /dev/null
+++ b/server/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "server"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+hyper = { version = "0.14", features = ["full"] }
+tokio = { version = "1", features = ["full"] }
+http = "0.2"
+httparse = "1"
+rhai = { version = "1.21", features = ["serde"] }
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+tera = "1.0"
+once_cell = "1"
+rhai_tera = { path = "../rhai_tera" }
+calendar = { path = "../components/calendar" }
\ No newline at end of file
diff --git a/server/README.md b/server/README.md
new file mode 100644
index 0000000..3766fd9
--- /dev/null
+++ b/server/README.md
@@ -0,0 +1,51 @@
+# Calendar Server Example
+
+A simple Rust web server using Hyper that exposes an `/all_calendars` endpoint.
+
+## Running the server
+
+```bash
+# Navigate to the examples directory
+cd /path/to/examples
+
+# Build and run the server
+cargo run
+```
+
+Once the server is running, you can access the endpoint at:
+- http://127.0.0.1:8080/all_calendars
+
+## Features
+- Simple HTTP server using Hyper
+- Single endpoint that returns "Hello World"
+
+
+Sure thing! Hereβs the Markdown version you can copy-paste directly into your README.md:
+
+## π Live Reload (Hot Reload for Development)
+
+To automatically recompile and restart your example server on file changes (e.g. Rust code, templates, Rhai scripts), you can use [`cargo-watch`](https://github.com/watchexec/cargo-watch):
+
+### β
Step 1: Install `cargo-watch`
+
+```bash
+cargo install cargo-watch
+```
+
+### β
Step 2: Run the server with live reload
+
+cargo watch -x 'run --example server'
+
+This will:
+ β’ Watch for file changes in your project
+ β’ Rebuild and re-run examples/server.rs whenever you make a change
+
+### π§ Bonus: Watch additional folders
+
+To also reload when .tera templates or .rhai scripts change:
+
+cargo watch -w src -w examples -w src/templates -w src/scripts -x 'run --example server'
+
+### π‘ Optional: Clear terminal on each reload
+
+cargo watch -c -x 'run --example server'
\ No newline at end of file
diff --git a/server/develop.sh b/server/develop.sh
new file mode 100755
index 0000000..cb726dc
--- /dev/null
+++ b/server/develop.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+set -e
+
+# π Start dev server with file watching and browser reload
+reloadd \
+ --watch src \
+ --watch src/templates \
+ --watch examples \
+ --port 8080 \
+ --run "cargo build" \
+ --run "cargo run --example server"
\ No newline at end of file
diff --git a/server/src/main.rs b/server/src/main.rs
new file mode 100644
index 0000000..7268120
--- /dev/null
+++ b/server/src/main.rs
@@ -0,0 +1,80 @@
+use hyper::{Body, Request, Response, Server};
+use hyper::service::{make_service_fn, service_fn};
+use hyper::StatusCode;
+use std::convert::Infallible;
+use std::net::SocketAddr;
+
+extern crate calendar;
+
+#[tokio::main]
+async fn main() {
+ let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
+
+ let make_svc = make_service_fn(|_conn| async {
+ Ok::<_, Infallible>(service_fn(|req| async {
+ // Remove the /calendar prefix and pass the modified request to the calendar handler
+ if req.uri().path().starts_with("/calendar/") {
+ calendar::handle_request(remove_path_prefix(req, "/calendar")).await
+ } else {
+ let mut resp = Response::new(Body::from("Not Found"));
+ *resp.status_mut() = StatusCode::NOT_FOUND;
+ Ok(resp)
+ }
+ }))
+ });
+
+ println!("Proxy server running at http://{}", addr);
+
+ if let Err(e) = Server::bind(&addr).serve(make_svc).await {
+ eprintln!("server error: {}", e);
+ }
+}
+
+/// Removes a specified prefix from the request's URI path
+///
+/// # Arguments
+/// * `req` - The original request
+/// * `prefix` - The prefix to remove from the path (e.g., "/calendar")
+///
+/// # Returns
+/// A new request with the modified path
+fn remove_path_prefix(req: Request, prefix: &str) -> Request {
+ let (parts, body) = req.into_parts();
+ let mut new_parts = parts;
+
+ // Get the original path for prefix calculation
+ let original_path = new_parts.uri.path();
+
+ // Calculate the prefix length (including the trailing slash if present)
+ let prefix_len = if original_path.starts_with(&format!("{}/", prefix)) {
+ prefix.len() + 1
+ } else {
+ prefix.len()
+ };
+
+ // Build a new URI with the prefix removed
+ let mut uri_builder = hyper::Uri::builder()
+ .scheme(new_parts.uri.scheme_str().unwrap_or("http"));
+
+ // Only set authority if it exists
+ if let Some(auth) = new_parts.uri.authority() {
+ uri_builder = uri_builder.authority(auth.clone());
+ }
+
+ // Create path and query string
+ let mut path_query = original_path[prefix_len..].to_string();
+
+ // Add query parameters if they exist
+ if let Some(q) = new_parts.uri.query() {
+ path_query.push('?');
+ path_query.push_str(q);
+ }
+
+ let new_uri = uri_builder
+ .path_and_query(path_query)
+ .build()
+ .unwrap_or(new_parts.uri.clone());
+
+ new_parts.uri = new_uri;
+ Request::from_parts(new_parts, body)
+}
diff --git a/utils/Cargo.lock b/utils/Cargo.lock
new file mode 100644
index 0000000..01f105f
--- /dev/null
+++ b/utils/Cargo.lock
@@ -0,0 +1,1119 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 4
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+ "cfg-if",
+ "const-random",
+ "getrandom",
+ "once_cell",
+ "version_check",
+ "zerocopy 0.7.35",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "bitflags"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
+
+[[package]]
+name = "cc"
+version = "1.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "num-traits",
+ "windows-link",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
+dependencies = [
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
+
+[[package]]
+name = "crunchy"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc55fe0d1f6c107595572ec8b107c0999bb1a2e0b75e37429a4fb0d6474a0e7d"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "globset"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a1028dfc5f5df5da8a56a73e6c153c9a9708ec57232470703592a3f18e49f5"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "humansize"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "log",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+
+[[package]]
+name = "js-sys"
+version = "0.3.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
+
+[[package]]
+name = "libm"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
+
+[[package]]
+name = "log"
+version = "0.4.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[package]]
+name = "num-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+dependencies = [
+ "portable-atomic",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
+dependencies = [
+ "zerocopy 0.8.24",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "regex"
+version = "1.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+
+[[package]]
+name = "rhai"
+version = "1.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce4d759a4729a655ddfdbb3ff6e77fb9eadd902dae12319455557796e435d2a6"
+dependencies = [
+ "ahash",
+ "bitflags",
+ "instant",
+ "num-traits",
+ "once_cell",
+ "rhai_codegen",
+ "smallvec",
+ "smartstring",
+ "thin-vec",
+]
+
+[[package]]
+name = "rhai_codegen"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5a11a05ee1ce44058fa3d5961d05194fdbe3ad6b40f904af764d81b86450e6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "rhai_tera"
+version = "0.1.0"
+dependencies = [
+ "rhai",
+ "serde_json",
+ "tera",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
+
+[[package]]
+name = "ryu"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.219"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
+dependencies = [
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "siphasher"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
+
+[[package]]
+name = "slug"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724"
+dependencies = [
+ "deunicode",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg",
+ "static_assertions",
+ "version_check",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "syn"
+version = "2.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tera"
+version = "1.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee"
+dependencies = [
+ "chrono",
+ "chrono-tz",
+ "globwalk",
+ "humansize",
+ "lazy_static",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "rand",
+ "regex",
+ "serde",
+ "serde_json",
+ "slug",
+ "unic-segment",
+]
+
+[[package]]
+name = "thin-vec"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d"
+
+[[package]]
+name = "thiserror"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "typenum"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
+
+[[package]]
+name = "version_check"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
+dependencies = [
+ "bumpalo",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "windows-core"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
+dependencies = [
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-link"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+
+[[package]]
+name = "windows-result"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.59.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879"
+dependencies = [
+ "zerocopy-derive 0.8.24",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/utils/Cargo.toml b/utils/Cargo.toml
new file mode 100644
index 0000000..9159f93
--- /dev/null
+++ b/utils/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "utils"
+version = "0.1.0"
+edition = "2021"
+description = "Integration between Rhai scripting and Tera templating"
+
+[dependencies]
+rhai = { version = "1.15.1", features = ["serde"] }
+tera = "1.19.0"
+serde_json = "1.0.107"
+hyper = { version = "0.14", features = ["full"] }
+httparse = "1"
\ No newline at end of file
diff --git a/utils/src/lib.rs b/utils/src/lib.rs
new file mode 100644
index 0000000..acbf319
--- /dev/null
+++ b/utils/src/lib.rs
@@ -0,0 +1,42 @@
+use hyper::{Body, Method, Request, Response};
+use std::io::{self, Read};
+
+pub fn read_request_from_stdin() -> io::Result {
+ let mut buffer = String::new();
+ io::stdin().read_to_string(&mut buffer)?;
+ Ok(buffer)
+}
+
+pub fn parse_http_request(input: &str) -> Result, Box> {
+ let mut headers = [httparse::EMPTY_HEADER; 32];
+ let mut req = httparse::Request::new(&mut headers);
+
+ let bytes = input.as_bytes();
+ let parsed_len = req.parse(bytes)?.unwrap();
+
+ let method = req.method.ok_or("missing method")?.parse::()?;
+ let path = req.path.ok_or("missing path")?;
+ let uri = path.parse::()?;
+
+ let body = &bytes[parsed_len..];
+ let request = Request::builder()
+ .method(method)
+ .uri(uri)
+ .body(Body::from(body.to_vec()))?;
+
+ Ok(request)
+}
+
+pub async fn print_http_response(res: Response) {
+ println!("HTTP/1.1 {}", res.status());
+
+ for (key, value) in res.headers() {
+ println!("{}: {}", key, value.to_str().unwrap_or_default());
+ }
+
+ println!(); // blank line before body
+
+ let body_bytes = hyper::body::to_bytes(res.into_body()).await.unwrap();
+ let body = String::from_utf8_lossy(&body_bytes);
+ println!("{}", body);
+}
\ No newline at end of file