use std::path::{Path, PathBuf}; use crate::errors::{NyxError, NyxResult}; /// Determine `.sqlite>`. pub fn get_project_info( project_path: &Path, config_dir: &Path, ) -> NyxResult<(String, PathBuf)> { let project_name = project_path .file_name() .and_then(|n| n.to_str()) .ok_or_else(|| NyxError::Other("Unable to determine project name".into()))?; let db_name = sanitize_project_name(project_name); let db_path = config_dir.join(format!("{}.sqlite", db_name)); Ok((project_name.to_owned(), db_path)) } pub fn sanitize_project_name(name: &str) -> String { name.to_lowercase() .chars() .map(|c| match c { ' ' | '\t' | '\n' | '\r' => '_', c if c.is_alphanumeric() || c == '_' || c == '-' => c, _ => '_', }) .collect::() .split('_') .filter(|s| !s.is_empty()) .collect::>() .join("_") }