use std::path::PathBuf;
#[derive(Clone, Debug)]
pub struct Repo {
name: String,
local: bool,
project_dir: Option<String>,
}
impl PartialEq for Repo {
fn eq(&self, other: &Self) -> bool {
self.name == other.name()
}
}
impl Repo {
pub fn new<T: Into<String>>(name: T, local: bool, project_dir: Option<T>) -> Self {
let name = name.into();
let project_dir = project_dir.map(|project_dir| project_dir.into());
Self {
name,
local,
project_dir,
}
}
pub fn name(&self) -> String {
self.name.clone()
}
pub fn list_name(&self, indicator: &str) -> String {
format!(
"{}{}",
match self.local {
true => "",
false => indicator,
},
self.name()
)
}
pub fn local(&self) -> bool {
self.local
}
pub fn get_project_root(&self) -> Option<PathBuf> {
let project_root = dirs::home_dir()?
.join(self.project_dir.clone()?)
.join(format!("{}/", self.name));
Some(project_root)
}
pub fn set_project_dir(&mut self, project_dir: Option<String>) {
self.project_dir = project_dir;
}
}
impl From<Repo> for String {
fn from(value: Repo) -> Self {
value.name()
}
}