use std::path::{Path, PathBuf};
pub struct ProjectLayout {
plugin_root: PathBuf,
}
impl ProjectLayout {
pub fn single(root: impl Into<PathBuf>) -> Self {
Self {
plugin_root: root.into(),
}
}
pub fn workspace_plugin(workspace_root: &Path, plugin_name: &str) -> Self {
Self {
plugin_root: workspace_root.join("plugins").join(plugin_name),
}
}
pub fn src_dir(&self) -> PathBuf {
self.plugin_root.join("src")
}
pub fn cargo_dir(&self) -> PathBuf {
self.plugin_root.join(".cargo")
}
pub fn cargo_toml(&self) -> PathBuf {
self.plugin_root.join("Cargo.toml")
}
pub fn lib_rs(&self) -> PathBuf {
self.plugin_root.join("src/lib.rs")
}
pub fn main_rs(&self) -> PathBuf {
self.plugin_root.join("src/main.rs")
}
pub fn gitignore(&self) -> PathBuf {
self.plugin_root.join(".gitignore")
}
pub fn cargo_config(&self) -> PathBuf {
self.plugin_root.join(".cargo/config.toml")
}
pub fn truce_toml(&self) -> PathBuf {
self.plugin_root.join("truce.toml")
}
}
pub struct WorkspaceLayout {
root: PathBuf,
}
impl WorkspaceLayout {
pub fn new(root: impl Into<PathBuf>) -> Self {
Self { root: root.into() }
}
pub fn cargo_dir(&self) -> PathBuf {
self.root.join(".cargo")
}
pub fn cargo_toml(&self) -> PathBuf {
self.root.join("Cargo.toml")
}
pub fn truce_toml(&self) -> PathBuf {
self.root.join("truce.toml")
}
pub fn gitignore(&self) -> PathBuf {
self.root.join(".gitignore")
}
pub fn cargo_config(&self) -> PathBuf {
self.root.join(".cargo/config.toml")
}
}