Skip to main content

spo_rhai/module/resolvers/
mod.rs

1use crate::eval::GlobalRuntimeState;
2use crate::func::SendSync;
3use crate::{Engine, Position, RhaiResultOf, Scope, SharedModule, AST};
4#[cfg(feature = "no_std")]
5use std::prelude::v1::*;
6
7mod collection;
8mod dummy;
9mod file;
10mod stat;
11
12pub use collection::ModuleResolversCollection;
13pub use dummy::DummyModuleResolver;
14#[cfg(not(feature = "no_std"))]
15#[cfg(any(not(target_family = "wasm"), not(target_os = "unknown")))]
16pub use file::FileModuleResolver;
17pub use stat::StaticModuleResolver;
18
19/// Trait that encapsulates a module resolution service.
20pub trait ModuleResolver: SendSync {
21    /// Resolve a module based on a path string.
22    fn resolve(
23        &self,
24        engine: &Engine,
25        source: Option<&str>,
26        path: &str,
27        pos: Position,
28    ) -> RhaiResultOf<SharedModule>;
29
30    /// Resolve a module based on a path string, given a [`GlobalRuntimeState`] and the current [`Scope`].
31    ///
32    /// # WARNING - Low Level API
33    ///
34    /// This function is very low level.
35    #[allow(unused_variables)]
36    fn resolve_raw(
37        &self,
38        engine: &Engine,
39        global: &mut GlobalRuntimeState,
40        scope: &mut Scope,
41        path: &str,
42        pos: Position,
43    ) -> RhaiResultOf<SharedModule> {
44        self.resolve(engine, global.source(), path, pos)
45    }
46
47    /// Resolve an `AST` based on a path string.
48    ///
49    /// Returns [`None`] (default) if such resolution is not supported
50    /// (e.g. if the module is Rust-based).
51    ///
52    /// # WARNING - Low Level API
53    ///
54    /// Override the default implementation of this method if the module resolver
55    /// serves modules based on compiled Rhai scripts.
56    #[allow(unused_variables)]
57    #[must_use]
58    fn resolve_ast(
59        &self,
60        engine: &Engine,
61        source: Option<&str>,
62        path: &str,
63        pos: Position,
64    ) -> Option<RhaiResultOf<AST>> {
65        None
66    }
67}