moduforge_runtime/
extension_manager.rs

1use 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};
10/// 扩展管理器
11pub 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}