weaver_lib/tasks/
public_copy_task.rs1use 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}