moduforge_runtime/
extension_manager.rs1use std::sync::Arc;
2
3use moduforge_model::schema::Schema;
4use moduforge_state::plugin::Plugin;
5
6use crate::{
7 helpers::get_schema_by_resolved_extensions::get_schema_by_resolved_extensions,
8 types::Extensions,
9};
10pub struct ExtensionManager {
12 plugins: Vec<Arc<Plugin>>,
13 schema: Arc<Schema>,
14}
15impl ExtensionManager {
16 pub fn new(extensions: &Vec<Extensions>) -> Self {
17 let schema = Arc::new(
18 get_schema_by_resolved_extensions(extensions).unwrap_or_else(|e| {
19 panic!("schema 构建失败: {}", e);
20 }),
21 );
22 let mut plugins = vec![];
23 for extension in extensions {
24 if let Extensions::E(extension) = extension {
25 for plugin in extension.get_plugins() {
26 plugins.push(plugin.clone());
27 }
28 }
29 }
30
31 ExtensionManager { schema, plugins }
32 }
33
34 pub fn get_schema(&self) -> Arc<Schema> {
35 self.schema.clone()
36 }
37 pub fn get_plugins(&self) -> &Vec<Arc<Plugin>> {
38 &self.plugins
39 }
40}