use crate::dir_context::path_consts::SUPPORT_PACK;
use crate::dir_context::{DirContext, find_pack_dirs};
use crate::pack::{PackRef, PackRefSubPathScope};
use crate::{Error, Result};
use simple_fs::SPath;
pub fn resolve_pack_ref_base_path(dir_context: &DirContext, pack_ref: &PackRef) -> Result<SPath> {
match pack_ref.sub_path_scope {
PackRefSubPathScope::PackDir => {
let pack_dirs = find_pack_dirs(dir_context, pack_ref)?;
let Some(pack_dir) = pack_dirs.into_iter().next() else {
return Err(Error::custom(format!("Cannot find the base path for {}", pack_ref)));
};
Ok(pack_dir.path)
}
PackRefSubPathScope::BaseSupport => {
let aipack_base_dir = dir_context.aipack_paths().aipack_base_dir();
let path = join_support_pack_ref(aipack_base_dir.path(), &pack_ref.identity_as_path());
Ok(path)
}
PackRefSubPathScope::WorkspaceSupport => {
let wks_dir = dir_context.aipack_paths().aipack_wks_dir().ok_or_else(|| {
format!("Cannot load reference support file in workspace for '{pack_ref}' because no workspace")
})?;
let path = join_support_pack_ref(wks_dir.path(), &pack_ref.identity_as_path());
Ok(path)
}
}
}
pub fn join_support_pack_ref(aipack_path: &SPath, identity_path: &SPath) -> SPath {
aipack_path.join(SUPPORT_PACK).join(identity_path)
}