Init
This commit is contained in:
46
src/cli/project_initializer.rs
Normal file
46
src/cli/project_initializer.rs
Normal file
@@ -0,0 +1,46 @@
|
||||
use std::path::PathBuf;
|
||||
use tokio::fs;
|
||||
use crate::helpers::FILE_EXTENSION;
|
||||
use crate::types::MagmaProjectConfig;
|
||||
|
||||
pub(crate) struct ProjectInitializer {
|
||||
name: String,
|
||||
path: PathBuf,
|
||||
}
|
||||
|
||||
impl ProjectInitializer {
|
||||
pub fn new(name: Option<String>, path: Option<PathBuf>) -> color_eyre::Result<Self> {
|
||||
let project_path = path.unwrap_or(std::env::current_dir()?);
|
||||
let project_name = name.unwrap_or(
|
||||
project_path.
|
||||
file_name()
|
||||
.and_then(|n|n.to_str())
|
||||
.unwrap_or("magma-project")
|
||||
.to_string()
|
||||
);
|
||||
Ok(Self { name: project_name, path: project_path })
|
||||
}
|
||||
|
||||
pub async fn init(&self) -> color_eyre::Result<()> {
|
||||
if !self.path.exists() {
|
||||
fs::create_dir_all(&self.path).await?;
|
||||
}
|
||||
let magma_file = self.path.join(format!(".{}", FILE_EXTENSION));
|
||||
let magma_config = MagmaProjectConfig::default();
|
||||
fs::write(&magma_file, toml::to_string(&magma_config)?).await?;
|
||||
|
||||
let src_dir = self.path.join("src");
|
||||
fs::create_dir_all(&src_dir).await?;
|
||||
|
||||
let main_file = src_dir.join(format!("main.{}", FILE_EXTENSION));
|
||||
fs::write(&main_file, include_str!("../../assets/main.mg")).await?;
|
||||
|
||||
println!("✓ Initialized magma project: {}", self.name);
|
||||
println!("\tLocation: {}", self.path.display());
|
||||
println!("\tCreated:");
|
||||
println!("\t\t- .mg");
|
||||
println!("\t\t- src/");
|
||||
println!("\t\t- src/main.mg");
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user