Expand description
§SZ-Rust Addons Loader — 插件加载器
对标 PHP zzstudio/think-addons 的 Rust 实现,提供插件发现/清单解析/注册/路由解析能力。
§PHP 对齐
| PHP 模块 | Rust 模块 | 子任务 |
|---|---|---|
think\addons\Service | loader::AddonLoader | 10.1 |
think\Addons::getInfo() | manifest::parse_manifest | 10.1 |
spl_autoload_register(helper.php) | autoload::AddonAutoload | 10.1 |
| 隐式插件状态管理 | registry::AddonRegistry | 10.2 |
think\addons\Route::execute | route::parse_route | 10.3 |
think\Route::resource | resource::build_resource_routes | 10.3.5 |
§模块结构
sz-rust-addons-loader/
├── Cargo.toml
└── src/
├── lib.rs # 主入口(重导出)
├── error.rs # 错误类型
├── loader.rs # AddonLoader(对齐 Service.php)
├── manifest.rs # 清单解析(对齐 Addons::getInfo)
├── autoload.rs # 自动加载(对齐 spl_autoload_register)
├── registry.rs # 注册中心(对齐插件状态管理)
├── route.rs # 路由解析(对齐 Route::execute)
└── resource.rs # 资源路由注入(对齐 Route::resource)§用法
ⓘ
use sz_rust_addons_loader::loader::AddonLoader;
let loader = AddonLoader::new("/path/to/addons");
let errors = loader.register().unwrap();
// errors 包含解析失败的插件错误(不中断整体扫描)
let route = loader.parse_route("/addons/operate/Order/index").unwrap();
assert_eq!(route.addon, "operate");
assert_eq!(route.controller, "Order");
assert_eq!(route.action, "index");§不支持(与 PHP 差异)
- 不实际加载 PHP 文件:Rust 无法直接执行 PHP,仅解析
$info数组 - 不实现钩子自动扫描:PHP 通过反射收集 Plugin.php 非基类方法作为钩子,Rust 侧需调用方显式注册
- 不实现
service.ini容器绑定:Rust 侧无容器概念,由调用方根据需要处理 - 不实现
_empty兜底方法:对齐 PHPis_callable([$instance, '_empty']),但需调用方实现
Re-exports§
pub use autoload::AddonAutoload;pub use error::AddonLoaderError;pub use error::AddonLoaderResult;pub use loader::AddonLoader;pub use manifest::AddonManifest;pub use registry::AddonRegistry;pub use resource::build_resource_routes;pub use resource::HttpMethod;pub use resource::ResourceAction;pub use resource::ResourceOptions;pub use resource::ResourceRoute;pub use resource::ResourceRouteEntry;pub use route::AddonRoute;