Files
rhai/doc/src/rust/modules/resolvers.md
2020-09-25 09:39:18 +08:00

4.4 KiB

Module Resolvers

{{#include ../../links.md}}

When encountering an [import] statement, Rhai attempts to resolve the module based on the path string.

Module Resolvers are service types that implement the [ModuleResolver][traits] trait.

Built-In Module Resolvers

There are a number of standard resolvers built into Rhai, the default being the FileModuleResolver which simply loads a script file based on the path (with .rhai extension attached) and execute it to form a module.

Built-in module resolvers are grouped under the rhai::module_resolvers module namespace.

Module Resolver Description Namespace
FileModuleResolver The default module resolution service, not available under [no_std] or [WASM] builds. Loads a script file (based off the current directory) with .rhai extension.
The base directory can be changed via the FileModuleResolver::new_with_path() constructor function.
FileModuleResolver::create_module() loads a script file and returns a module.
Module (cannot access global namespace)
GlobalFileModuleResolver A simpler but more efficient version of FileModuleResolver, intended for short utility modules. Not available under [no_std] or [WASM] builds. Loads a script file (based off the current directory) with .rhai extension.
Note: All functions are assumed independent and cannot cross-call each other.
The base directory can be changed via the FileModuleResolver::new_with_path() constructor function.
FileModuleResolver::create_module() loads a script file and returns a module.
Global
StaticModuleResolver Loads modules that are statically added. This can be used under [no_std]. Global
ModuleResolversCollection A collection of module resolvers. Modules will be resolved from each resolver in sequential order.
This is useful when multiple types of modules are needed simultaneously.
Global

Set into Engine

An [Engine]'s module resolver is set via a call to Engine::set_module_resolver:

// Use the 'StaticModuleResolver'
let resolver = rhai::module_resolvers::StaticModuleResolver::new();
engine.set_module_resolver(Some(resolver));

// Effectively disable 'import' statements by setting module resolver to 'None'
engine.set_module_resolver(None);