use crate::error::InklogError;
#[allow(dead_code)]
pub trait ConfigValidator {
fn validate(&self) -> Result<(), InklogError>;
}
pub fn validate_log_level(level: &str) -> Result<(), InklogError> {
let valid_levels = ["trace", "debug", "info", "warn", "error"];
if !valid_levels.contains(&level.to_lowercase().as_str()) {
return Err(InklogError::ConfigError(format!(
"Invalid log level: {}. Valid levels are: {}",
level,
valid_levels.join(", ")
)));
}
Ok(())
}
pub fn validate_path(path: &std::path::Path) -> Result<(), InklogError> {
if path.as_os_str().is_empty() {
return Err(InklogError::ConfigError("Path cannot be empty".into()));
}
if let Some(parent) = path.parent() {
if !parent.exists() {
std::fs::create_dir_all(parent).map_err(|e| {
InklogError::ConfigError(format!(
"Cannot create directory {}: {}",
parent.display(),
e
))
})?;
}
}
Ok(())
}
pub fn validate_url(url: &str, field_name: &str) -> Result<(), InklogError> {
if url.is_empty() {
return Err(InklogError::ConfigError(format!(
"{} cannot be empty",
field_name
)));
}
Ok(())
}
pub fn validate_positive<T>(value: T, field_name: &str) -> Result<(), InklogError>
where
T: std::ops::Sub<T, Output = T>
+ std::cmp::PartialOrd<T>
+ std::fmt::Display
+ Copy
+ num_traits::Zero,
{
if value <= T::zero() {
return Err(InklogError::ConfigError(format!(
"{} must be > 0, got {}",
field_name, value
)));
}
Ok(())
}
pub fn validate_non_empty(value: &str, field_name: &str) -> Result<(), InklogError> {
if value.is_empty() {
return Err(InklogError::ConfigError(format!(
"{} cannot be empty",
field_name
)));
}
Ok(())
}