mirror of
https://github.com/elicpeter/nyx.git
synced 2026-06-06 19:35:13 +02:00
- Standardized spacing and indentation across multiple modules for improved readability. - Reorganized `patterns` and `utils` imports for consistency. - Updated `NyxError` and `NyxResult` related implementations to maintain consistent formatting. - Enhanced readability in AST patterns for better clarity and maintainability.
30 lines
976 B
Rust
30 lines
976 B
Rust
use crate::errors::{NyxError, NyxResult};
|
|
use std::path::{Path, PathBuf};
|
|
|
|
/// Determine `<project-name, path/to/<project>.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::<String>()
|
|
.split('_')
|
|
.filter(|s| !s.is_empty())
|
|
.collect::<Vec<_>>()
|
|
.join("_")
|
|
}
|