weaver_lib/tasks/
public_copy_task.rs

1use std::{collections::HashMap, fs, sync::Arc};
2
3use async_trait::async_trait;
4use liquid::model::KString;
5
6use crate::{
7    BuildError,
8    config::WeaverConfig,
9    renderers::{WritableFile, globals::LiquidGlobalsPage},
10    tasks::common::copy_dir_all,
11};
12
13use super::WeaverTask;
14
15#[derive(Default)]
16pub struct PublicCopyTask;
17
18unsafe impl Send for PublicCopyTask {}
19unsafe impl Sync for PublicCopyTask {}
20
21#[async_trait]
22impl WeaverTask for PublicCopyTask {
23    async fn run(
24        &self,
25        config: Arc<WeaverConfig>,
26        _content: &Arc<HashMap<KString, LiquidGlobalsPage>>,
27    ) -> Result<Option<WritableFile>, BuildError> {
28        let folder_name = config
29            .public_dir
30            .clone()
31            .split('/')
32            .next_back()
33            .unwrap()
34            .to_string();
35        let target = format!("{}/{}", config.build_dir.clone(), folder_name);
36
37        if fs::exists(&config.public_dir).expect("failed to check if there was a public directory")
38        {
39            println!("Copying {} to {}", config.public_dir.clone(), &target);
40
41            copy_dir_all(config.public_dir.clone(), target)
42        } else {
43            Ok(None)
44        }
45    }
46}