✨ Añade gestión de recursos en binario o de disco
- Añade dosnuevas macros `include_files` y `include_files_service` para incluir los recursos preparados con `pagetop-build`. - Añade nueva función útil `absolute_dir` y sus tests correspondientes.
This commit is contained in:
parent
500f69fa4f
commit
34c4ac262f
7 changed files with 340 additions and 13 deletions
49
src/util.rs
49
src/util.rs
|
@ -1,7 +1,56 @@
|
|||
//! Funciones y macros útiles.
|
||||
|
||||
use crate::trace;
|
||||
|
||||
use std::io;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
|
||||
/// Devuelve la ruta absoluta a un directorio existente.
|
||||
///
|
||||
/// * Si `relative_path` es una ruta absoluta, entonces se ignora `root_path`.
|
||||
/// * Si la ruta final es relativa, se convierte en absoluta respecto al directorio actual.
|
||||
/// * Devuelve error si la ruta no existe o no es un directorio.
|
||||
///
|
||||
/// # Ejemplo
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// use pagetop::prelude::*;
|
||||
///
|
||||
/// let root = "/home/user";
|
||||
/// let rel = "documents";
|
||||
/// println!("{:#?}", util::absolute_dir(root, rel));
|
||||
/// ```
|
||||
pub fn absolute_dir<P, Q>(root_path: P, relative_path: Q) -> io::Result<PathBuf>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
Q: AsRef<Path>,
|
||||
{
|
||||
// Une ambas rutas:
|
||||
// - Si `relative_path` es absoluta, el `join` la devuelve tal cual, descartando `root_path`.
|
||||
// - Si el resultado es aún relativo, lo será respecto al directorio actual.
|
||||
let candidate = root_path.as_ref().join(relative_path.as_ref());
|
||||
|
||||
// Resuelve `.`/`..`, enlaces simbólicos y obtiene la ruta absoluta en un único paso.
|
||||
let absolute_dir = candidate.canonicalize()?;
|
||||
|
||||
// Asegura que realmente es un directorio existente.
|
||||
if absolute_dir.is_dir() {
|
||||
Ok(absolute_dir)
|
||||
} else {
|
||||
Err({
|
||||
let msg = format!("Path \"{}\" is not a directory", absolute_dir.display());
|
||||
trace::warn!(msg);
|
||||
io::Error::new(io::ErrorKind::InvalidInput, msg)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// MACROS ÚTILES ***********************************************************************************
|
||||
|
||||
#[doc(hidden)]
|
||||
pub use paste::paste;
|
||||
|
||||
#[macro_export]
|
||||
/// Macro para construir una colección de pares clave-valor.
|
||||
///
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue