1mod enums;
26
27use config::{Config, File, FileFormat};
28use serde::{Deserialize, Serialize};
29use std::env;
30
31pub use crate::enums::{Categories, PluginType};
32
33#[derive(Debug, Default, Serialize, Deserialize)]
34#[serde(rename_all = "kebab-case")]
35#[non_exhaustive]
36pub struct PluginMetadata {
37 pub vendor: String,
39
40 pub categories: Option<Vec<Categories>>,
42
43 pub plugin_type: Option<PluginType>,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
48#[serde(rename_all = "kebab-case")]
49#[serde(default)]
50#[non_exhaustive]
51pub struct PluginProcessing {
52 pub block_size: usize,
53}
54
55impl Default for PluginProcessing {
56 fn default() -> Self {
57 Self { block_size: 512 }
58 }
59}
60
61#[derive(Debug, Serialize, Deserialize)]
62#[serde(rename_all = "kebab-case")]
63pub struct Metadata {
64 pub metadata: PluginMetadata,
66
67 #[serde(default)]
69 pub processing: PluginProcessing,
70}
71
72#[derive(Debug, Serialize, Deserialize)]
73#[serde(rename_all = "kebab-case")]
74#[serde(default)]
75pub struct PackageInfo {
76 pub name: String,
77 pub version: String,
78 pub description: Option<String>,
79 pub authors: Option<Vec<String>>,
80}
81
82impl Default for PackageInfo {
83 fn default() -> Self {
84 let authors = match env::var("CARGO_PKG_AUTHORS").ok() {
85 Some(authors) if authors.is_empty() => None,
86 Some(authors) => Some(authors.split(':').map(|s| s.trim().to_string()).collect()),
87 None => None,
88 };
89
90 Self {
92 name: env::var("CARGO_PKG_NAME").unwrap(),
93 version: env::var("CARGO_PKG_VERSION").unwrap(),
94 description: env::var("CARGO_PKG_DESCRIPTION").ok(),
95 authors,
96 }
97 }
98}
99
100#[derive(Debug, Serialize, Deserialize)]
101#[serde(rename_all = "kebab-case")]
102pub struct ShizenConfig {
103 pub shizen: Metadata,
105 #[serde(default)]
112 pub package: PackageInfo,
113}
114
115impl ShizenConfig {
116 pub fn new() -> Result<Self, config::ConfigError> {
117 let conf = Config::builder()
118 .add_source(File::new("Shizen.toml", FileFormat::Toml))
119 .build()?
120 .try_deserialize()?;
121
122 Ok(conf)
123 }
124}