Skip to main content

Module resolvers

Module resolvers 

Source
Expand description

Resolver implementations: leaves and combinators.

§Leaf Resolvers

Terminal resolvers that directly produce values.

ResolverSourceMatch conditionUse case
MemoryResolverHashMap<String, String>Name is registeredinclude_str! embedding, preload
NativeResolverFn(&Lua) -> Result<Value>Name is registeredBuild tables from Rust (@std/*, etc.)
FsResolverFilesystemFile existsSandboxed, init.lua fallback
AssetResolverFilesystemKnown extension + file existsAuto-convert non-Lua resources (JSON->Table, etc.)

§Combinators

Resolvers that compose other Resolvers. Since they implement the Resolver trait, they can be added to a Registry just like leaves, and combinators can nest.

CombinatorBehaviorUse case
PrefixResolver"prefix.rest" -> strip prefix -> delegate to inner ResolverNamespace mounting

§Composition patterns

Registry (Chain)
+- NativeResolver                 @std/http  -> Rust factory
+- PrefixResolver("game", ...)    game.xxx   -> delegate to inner Resolver
|   +- FsResolver(game_dir/)      xxx        -> game_dir/xxx.lua
+- FsResolver(scripts/)           game       -> scripts/game/init.lua
|                                  lib.utils  -> scripts/lib/utils.lua
+- AssetResolver(assets/)         config.json -> JSON parse -> Table

PrefixResolver acts as a namespace mount point. require("game") (init.lua) is handled by the outer FsResolver, while require("game.engine") is handled by PrefixResolver. Responsibilities are clearly separated.

Structs§

AssetResolver
Resolver that registers parsers by extension and auto-converts non-Lua resources.
FsResolver
Sandboxed filesystem Resolver.
MemoryResolver
Resolver that holds Lua source strings in memory.
NativeResolver
Resolver that builds Lua Values directly from Rust functions.
PrefixResolver
Combinator that routes to an inner Resolver by name prefix.

Functions§

json_parser
JSON -> Lua Table parser.
text_parser
Text -> Lua String parser.