Skip to main content

reinhardt_conf/settings/
template_settings.rs

1//! Template settings fragment
2//!
3//! Composable fragment for template engine configuration.
4
5use reinhardt_core::macros::settings;
6use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8use std::path::PathBuf;
9
10/// Template engine configuration for a single backend.
11#[settings(fragment = true, default_policy = "required")]
12#[derive(Clone, Debug, Serialize, Deserialize)]
13pub struct FragmentTemplateConfig {
14	/// Template backend identifier.
15	pub backend: String,
16	/// Template search directories.
17	#[setting(optional)]
18	#[serde(default)]
19	pub dirs: Vec<PathBuf>,
20	/// Whether to search app directories for templates.
21	#[setting(optional)]
22	#[serde(default)]
23	pub app_dirs: bool,
24	/// Backend-specific options.
25	#[setting(optional)]
26	#[serde(default)]
27	pub options: HashMap<String, serde_json::Value>,
28}
29
30/// Template engine settings fragment.
31///
32/// Django compatibility: wraps template engine configurations.
33#[settings(fragment = true, section = "templates")]
34#[derive(Clone, Debug, Default, Serialize, Deserialize)]
35pub struct TemplateSettings {
36	/// Template configurations list.
37	#[serde(default)]
38	pub configs: Vec<FragmentTemplateConfig>,
39}
40
41#[cfg(test)]
42mod tests {
43	use super::*;
44	use crate::settings::fragment::SettingsFragment;
45	use rstest::rstest;
46
47	#[rstest]
48	fn test_template_settings_section() {
49		// Arrange / Act / Assert
50		assert_eq!(TemplateSettings::section(), "templates");
51	}
52
53	#[rstest]
54	fn test_template_settings_default() {
55		// Arrange / Act
56		let settings = TemplateSettings::default();
57
58		// Assert
59		assert!(settings.configs.is_empty());
60	}
61}