Skip to main content

solar_core/subcommand/
init.rs

1use std::{
2    fs::File,
3    path::{Path, PathBuf},
4};
5
6use clap::Parser;
7
8use crate::{Action, Global, SolarError, ToolTrait, config::ProjConfig};
9
10#[derive(Parser, Clone)]
11pub struct Init {
12    /// The project configuration to initialize.
13    #[arg(default_value = "cargobinbasic")]
14    project: ProjConfig,
15
16    /// The destination to initialize the project.
17    #[arg(short, long, default_value = ".")]
18    destination: PathBuf,
19}
20
21impl Init {
22    pub fn run(&mut self) -> Result<(), SolarError> {
23        solar_init(&self.project, &self.destination)
24    }
25}
26
27pub fn solar_init(config: &ProjConfig, destination: &Path) -> Result<(), SolarError> {
28    // Initialize git repository if it's not already.
29    Global::git_init(destination)?;
30
31    // Create a README.md file
32    File::create(destination.join("README.md"))?;
33
34    // Install project configuration
35    config.get().act(&Action::INSTALL, Some(destination))
36}