quad_compat_rhai/module/resolvers/
mod.rs

1use crate::func::native::SendSync;
2use crate::{Engine, EvalAltResult, Module, Position, Shared, AST};
3#[cfg(feature = "no_std")]
4use std::prelude::v1::*;
5
6mod collection;
7mod dummy;
8mod file;
9mod stat;
10
11pub use collection::ModuleResolversCollection;
12pub use dummy::DummyModuleResolver;
13#[cfg(not(feature = "no_std"))]
14#[cfg(not(any(target_arch = "wasm32", target_arch = "wasm64")))]
15pub use file::FileModuleResolver;
16pub use stat::StaticModuleResolver;
17
18/// Trait that encapsulates a module resolution service.
19pub trait ModuleResolver: SendSync {
20    /// Resolve a module based on a path string.
21    fn resolve(
22        &self,
23        engine: &Engine,
24        source_path: Option<&str>,
25        path: &str,
26        pos: Position,
27    ) -> Result<Shared<Module>, Box<EvalAltResult>>;
28
29    /// Resolve an `AST` based on a path string.
30    ///
31    /// Returns [`None`] (default) if such resolution is not supported
32    /// (e.g. if the module is Rust-based).
33    ///
34    /// # WARNING - Low Level API
35    ///
36    /// Override the default implementation of this method if the module resolver
37    /// serves modules based on compiled Rhai scripts.
38    #[allow(unused_variables)]
39    #[must_use]
40    fn resolve_ast(
41        &self,
42        engine: &Engine,
43        source_path: Option<&str>,
44        path: &str,
45        pos: Position,
46    ) -> Option<Result<AST, Box<EvalAltResult>>> {
47        None
48    }
49}