// use std::path::PathBuf; use derive_more::Deref; /// The path to the directory containing the git repository. #[derive( Clone, Debug, derive_more::From, PartialEq, Eq, PartialOrd, Ord, derive_more::AsRef, derive_more::Constructor, )] pub struct GitDir { pathbuf: PathBuf, /// Whether the directory is under the control of git-next (Internal) or not (External). storage_path_type: StoragePathType, } impl GitDir { pub const fn pathbuf(&self) -> &PathBuf { &self.pathbuf } pub const fn storage_path_type(&self) -> &StoragePathType { &self.storage_path_type } } impl std::fmt::Display for GitDir { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", &self.pathbuf.display()) } } impl Deref for GitDir { type Target = PathBuf; fn deref(&self) -> &Self::Target { &self.pathbuf } } impl From<&GitDir> for PathBuf { fn from(value: &GitDir) -> Self { value.to_path_buf() } } #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] pub enum StoragePathType { Internal, External, }