plugin_interfaces/
config.rs1use std::fs;
2
3#[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 pub fn from_file() -> Result<Self, Box<dyn std::error::Error>> {
17 let config_content = fs::read_to_string("config.toml")?;
19
20 let config: toml::Value = toml::from_str(&config_content)?;
22
23 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}