weaver-lib 0.3.0

static site generator as a library, markdown and liquid in, HTML out.
Documentation
use std::{collections::HashMap, fs, sync::Arc};

use async_trait::async_trait;
use liquid::model::KString;

use crate::{
    BuildError,
    config::WeaverConfig,
    renderers::{WritableFile, globals::LiquidGlobalsPage},
    tasks::common::copy_dir_all,
};

use super::WeaverTask;

#[derive(Default)]
pub struct PublicCopyTask;

unsafe impl Send for PublicCopyTask {}
unsafe impl Sync for PublicCopyTask {}

#[async_trait]
impl WeaverTask for PublicCopyTask {
    async fn run(
        &self,
        config: Arc<WeaverConfig>,
        _content: &Arc<HashMap<KString, LiquidGlobalsPage>>,
    ) -> Result<Option<WritableFile>, BuildError> {
        let folder_name = config
            .public_dir
            .clone()
            .split('/')
            .next_back()
            .unwrap()
            .to_string();
        let target = format!("{}/{}", config.build_dir.clone(), folder_name);

        if fs::exists(&config.public_dir).expect("failed to check if there was a public directory")
        {
            println!("Copying {} to {}", config.public_dir.clone(), &target);

            copy_dir_all(config.public_dir.clone(), target)
        } else {
            Ok(None)
        }
    }
}