Skip to main content

cli/
init.rs

1use anyhow::Result;
2
3use crate::{colors, config::Config};
4
5pub async fn handle_init(yes: bool) -> Result<()> {
6    let current_dir = std::env::current_dir()?;
7    let display_dir = tokio::fs::canonicalize(&current_dir)
8        .await
9        .unwrap_or(current_dir);
10
11    if !yes && !confirm_init(&display_dir)? {
12        println!("{}", colors::dim("Init cancelled."));
13        return Ok(());
14    }
15
16    let path = Config::init_current_dir_config().await?;
17    println!(
18        "{}",
19        colors::green(&format!("Initialized shine config at {}", path.display()))
20    );
21    println!(
22        "{}",
23        colors::dim(&format!("presets_dir = {}", display_dir.display()))
24    );
25    Ok(())
26}
27
28fn confirm_init(dir: &std::path::Path) -> Result<bool> {
29    use std::io::Write as _;
30
31    print!(
32        "Initialize {} as the shine presets directory? [y/N] ",
33        dir.display()
34    );
35    std::io::stdout().flush()?;
36
37    let mut input = String::new();
38    std::io::stdin().read_line(&mut input)?;
39    let answer = input.trim();
40    Ok(answer.eq_ignore_ascii_case("y") || answer.eq_ignore_ascii_case("yes"))
41}