use super::*;
use chrono::prelude::{DateTime, Utc};
use glob::Paths;
use hconf::{BriefFormat, SnapshotPurpose, TurntableSource};
use mkutil::FileCopySpec;
pub trait ProductionStorage: fmt::Debug {
fn project_root(&self, project: &Project, workspace: &Workspace) -> AnyResult<PathBuf>;
fn render_image_root(&self, project: &Project) -> AnyResult<PathBuf>;
}
pub trait SourceArts: DynClone + fmt::Debug {
fn asset_root_dir(
&self,
project: &Project,
asset: &ProductionAsset,
workspace: &Workspace,
) -> AnyResult<PathBuf>;
fn asset_lod_root_dir(
&self,
project: &Project,
asset: &ProductionAsset,
lod: &AssetLod,
workspace: &Workspace,
) -> AnyResult<PathBuf>;
fn make_templates(
&self,
project: &Project,
asset: &ProductionAsset,
lod: &AssetLod,
) -> AnyResult<Vec<FileCopySpec>>;
fn delete_asset_dir(
&self,
project: &Project,
asset: &ProductionAsset,
workspace: &Workspace,
) -> AnyResult<()>;
fn maya_model(
&self,
project: &Project,
asset: &ProductionAsset,
lod: &AssetLod,
workspace: &Workspace,
) -> AnyResult<PathBuf>;
fn maya_rig(
&self,
project: &Project,
asset: &ProductionAsset,
lod: &AssetLod,
workspace: &Workspace,
) -> AnyResult<PathBuf>;
}
dyn_clone::clone_trait_object!(SourceArts);
pub trait BriefDocImg: DynClone + fmt::Debug {
fn asset_brief_main_dir(
&self,
project: &Project,
asset: &ProductionAsset,
) -> AnyResult<PathBuf>;
fn asset_brief_repo_dir(
&self,
project: &Project,
asset: &ProductionAsset,
) -> AnyResult<PathBuf>;
fn asset_brief_reference_images(
&self,
project: &Project,
asset: &ProductionAsset,
format: &BriefFormat,
) -> AnyResult<PathBuf>;
}
dyn_clone::clone_trait_object!(BriefDocImg);
pub trait UniversalDefects: DynClone + fmt::Debug {
fn universal_defect_root(&self) -> AnyResult<PathBuf>;
fn is_universal_defect_accessible(&self, path: &Path) -> bool;
fn asset_defect_dated_dir(
&self,
project: &Project,
asset: &ProductionAsset,
date: &DateTime<Utc>,
) -> AnyResult<PathBuf>;
fn make_defect_file_universal(
&self,
file: &Path,
project: &Project,
asset: &ProductionAsset,
) -> AnyResult<PathBuf>;
}
dyn_clone::clone_trait_object!(UniversalDefects);
pub trait SnapshotReview: DynClone + fmt::Debug + Send + Sync {
fn asset_snapshot_subdirs(
&self,
project: &Project,
asset: &ProductionAsset,
purpose: &SnapshotPurpose,
) -> AnyResult<Paths>;
fn upload_snapshot(
&self,
img: &Path,
project: &Project,
asset: &ProductionAsset,
purpose: &SnapshotPurpose,
) -> AnyResult<PathBuf>;
}
dyn_clone::clone_trait_object!(SnapshotReview);
pub trait TurntableReview: DynClone + fmt::Debug + Send + Sync {
fn asset_turntable_subdirs(
&self,
project: &Project,
asset: &ProductionAsset,
source: &TurntableSource,
lod: &AssetLod,
) -> AnyResult<Paths>;
fn img_extension(&self, source: &TurntableSource) -> PathBuf;
}
dyn_clone::clone_trait_object!(TurntableReview);