Files
nginx-serve/src/config.rs
Edward Langley 56c6045e3b Use ngx_log_error! macro and fix formatting
- Switched from ngx_log_error_core() to ngx_log_error! macro
- Changed error_log level from debug to info (cleaner output)
- Formatting cleanup across all modules (cargo fmt)
- Removed trailing newlines and fixed indentation

Logging now properly uses nginx's macro system for better
integration with nginx's log handling.
2025-11-15 17:16:55 -08:00

133 lines
3.6 KiB
Rust

//! Configuration structures for the sqlite-serve module
use ngx::http::MergeConfigError;
/// Location-specific configuration
#[derive(Debug, Default)]
pub struct ModuleConfig {
pub db_path: String,
pub query: String,
pub template_path: String,
pub query_params: Vec<(String, String)>, // (param_name, variable_name) pairs
}
/// Global (HTTP main) configuration for shared templates
#[derive(Debug, Default)]
pub struct MainConfig {
pub global_templates_dir: String,
}
impl ngx::http::Merge for ModuleConfig {
fn merge(&mut self, prev: &ModuleConfig) -> Result<(), MergeConfigError> {
if self.db_path.is_empty() {
self.db_path = prev.db_path.clone();
}
if self.query.is_empty() {
self.query = prev.query.clone();
}
if self.template_path.is_empty() {
self.template_path = prev.template_path.clone();
}
if self.query_params.is_empty() {
self.query_params = prev.query_params.clone();
}
Ok(())
}
}
impl ngx::http::Merge for MainConfig {
fn merge(&mut self, prev: &MainConfig) -> Result<(), MergeConfigError> {
if self.global_templates_dir.is_empty() {
self.global_templates_dir = prev.global_templates_dir.clone();
}
Ok(())
}
}
#[cfg(test)]
mod tests {
use super::*;
use ngx::http::Merge;
#[test]
fn test_module_config_default() {
let config = ModuleConfig::default();
assert!(config.db_path.is_empty());
assert!(config.query.is_empty());
assert!(config.template_path.is_empty());
assert!(config.query_params.is_empty());
}
#[test]
fn test_module_config_merge() {
let mut config = ModuleConfig {
db_path: String::new(),
query: String::new(),
template_path: String::new(),
query_params: vec![],
};
let prev = ModuleConfig {
db_path: "test.db".to_string(),
query: "SELECT * FROM test".to_string(),
template_path: "test.hbs".to_string(),
query_params: vec![("id".to_string(), "$arg_id".to_string())],
};
config.merge(&prev).unwrap();
assert_eq!(config.db_path, "test.db");
assert_eq!(config.query, "SELECT * FROM test");
assert_eq!(config.template_path, "test.hbs");
assert_eq!(config.query_params.len(), 1);
}
#[test]
fn test_module_config_merge_preserves_existing() {
let mut config = ModuleConfig {
db_path: "existing.db".to_string(),
query: "SELECT 1".to_string(),
template_path: "existing.hbs".to_string(),
query_params: vec![],
};
let prev = ModuleConfig {
db_path: "prev.db".to_string(),
query: "SELECT 2".to_string(),
template_path: "prev.hbs".to_string(),
query_params: vec![],
};
config.merge(&prev).unwrap();
// Should keep existing values
assert_eq!(config.db_path, "existing.db");
assert_eq!(config.query, "SELECT 1");
assert_eq!(config.template_path, "existing.hbs");
}
#[test]
fn test_main_config_default() {
let config = MainConfig::default();
assert!(config.global_templates_dir.is_empty());
}
#[test]
fn test_main_config_merge() {
let mut config = MainConfig {
global_templates_dir: String::new(),
};
let prev = MainConfig {
global_templates_dir: "templates/global".to_string(),
};
config.merge(&prev).unwrap();
assert_eq!(config.global_templates_dir, "templates/global");
}
}