mdbook-rustdoc-links 3.0.0

mdBook preprocessor to support intra-doc links
use std::path::{Path, PathBuf};

use anyhow::Result;
use mdbook_preprocessor::PreprocessorContext;
use url::Url;

use mdbookkit::{book::PreprocessorHelper, config::BaseDir, url::UrlFromPath};

use crate::options::EnvConfig;

#[derive(Debug)]
pub struct Environment {
    book_dir: PathBuf,
    page_dir: Url,
    base_dir: BaseDir,
}

impl Environment {
    pub fn new(config: EnvConfig, book: &PreprocessorContext) -> Result<Self> {
        let book_dir = book.book_dir()?;
        let page_dir = book.page_dir()?;
        let base_dir = config.base_url.take().resolve(&page_dir);
        let page_dir = page_dir.dir_to_url();
        Ok(Self {
            book_dir,
            page_dir,
            base_dir,
        })
    }

    pub fn book_dir(&self) -> &Path {
        &self.book_dir
    }

    pub fn page_dir(&self) -> &Url {
        &self.page_dir
    }

    pub fn base_dir(&self) -> &BaseDir {
        &self.base_dir
    }
}

#[cfg(test)]
impl Default for Environment {
    fn default() -> Self {
        use crate::options::default_base_url;

        let page_dir = std::env::current_dir().unwrap();
        let base_dir = default_base_url().resolve(&page_dir);

        Self {
            page_dir: page_dir.dir_to_url(),
            book_dir: page_dir,
            base_dir,
        }
    }
}