poet 0.7.0

Static site generator with optional MCP server and LLM SEO optimizations
Documentation
use std::path::PathBuf;

use anyhow::Result;
use anyhow::anyhow;

pub fn validate_is_directory(path_string: &str) -> Result<PathBuf> {
    let path = PathBuf::from(path_string);

    if !path.exists() {
        return Err(anyhow!("Path does not exist: {path_string}"));
    }

    if !path.is_dir() {
        return Err(anyhow!("Path is not a directory: {path_string}"));
    }

    Ok(path)
}

#[cfg(test)]
mod tests {
    use std::fs;

    use tempfile::tempdir;

    use super::*;

    #[test]
    fn returns_path_for_existing_directory() -> Result<()> {
        let directory = tempdir()?;

        assert_eq!(
            validate_is_directory(&directory.path().display().to_string())?.as_path(),
            directory.path()
        );

        Ok(())
    }

    #[test]
    fn errors_when_path_does_not_exist() -> Result<()> {
        let directory = tempdir()?;
        let missing = directory.path().join("missing");

        assert!(validate_is_directory(&missing.display().to_string()).is_err());

        Ok(())
    }

    #[test]
    fn errors_when_path_is_a_file() -> Result<()> {
        let directory = tempdir()?;
        let file_path = directory.path().join("file.txt");

        fs::write(&file_path, "contents")?;

        assert!(validate_is_directory(&file_path.display().to_string()).is_err());

        Ok(())
    }
}