nativeshell_build 0.1.16

Integrate Flutter build process with Cargo
Documentation
use std::path::{Path, PathBuf};

use crate::{
    util::{get_absolute_path, get_artifacts_dir, mkdir, symlink},
    BuildResult,
};

pub struct Resources {
    pub(super) resources_dir: PathBuf,
}

impl Resources {
    pub fn new<P: AsRef<Path>>(folder_name: P) -> BuildResult<Self> {
        let dir = mkdir(get_artifacts_dir()?, Some(folder_name))?;
        Ok(Self { resources_dir: dir })
    }

    pub fn mkdir<P: AsRef<Path>>(&self, sub_path: P) -> BuildResult<()> {
        mkdir(&self.resources_dir, Some(sub_path))?;
        Ok(())
    }

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

    pub fn link<P, Q>(&self, src: P, dst: Q) -> BuildResult<()>
    where
        P: AsRef<Path>,
        Q: AsRef<Path>,
    {
        let src = get_absolute_path(src);
        let dst = self.resources_dir.join(dst);

        let dst = if dst.exists() {
            dst.join(src.file_name().unwrap())
        } else {
            dst
        };

        symlink(src, dst)?;

        Ok(())
    }
}