plugin_interfaces/
config.rs

1use std::fs;
2
3/// 插件配置结构
4#[derive(Debug, Clone)]
5pub struct PluginConfig {
6    pub id: String,
7    pub disabled: bool,
8    pub name: String,
9    pub description: String,
10    pub version: String,
11    pub author: Option<String>,
12}
13
14impl PluginConfig {
15    /// 从config.toml文件读取配置
16    pub fn from_file() -> Result<Self, Box<dyn std::error::Error>> {
17        // 读取当前目录下的config.toml文件
18        let config_content = fs::read_to_string("config.toml")?;
19
20        // 解析TOML配置
21        let config: toml::Value = toml::from_str(&config_content)?;
22
23        // 提取插件信息
24        let plugin = config.get("plugin")
25            .ok_or("Missing [plugin] section in config.toml")?;
26
27        let id = plugin.get("id")
28            .and_then(|v| v.as_str())
29            .ok_or("Missing 'id' in [plugin] section")?
30            .to_string();
31
32        let disabled = plugin.get("disabled")
33            .and_then(|v| v.as_bool())
34            .unwrap_or(false);
35
36        let name = plugin.get("name")
37            .and_then(|v| v.as_str())
38            .ok_or("Missing 'name' in [plugin] section")?
39            .to_string();
40
41        let description = plugin.get("description")
42            .and_then(|v| v.as_str())
43            .ok_or("Missing 'description' in [plugin] section")?
44            .to_string();
45
46        let version = plugin.get("version")
47            .and_then(|v| v.as_str())
48            .ok_or("Missing 'version' in [plugin] section")?
49            .to_string();
50
51        let author = plugin.get("author")
52            .and_then(|v| v.as_str())
53            .map(|s| s.to_string());
54
55        Ok(PluginConfig {
56            id,
57            disabled,
58            name,
59            description,
60            version,
61            author,
62        })
63    }
64}