1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
use std::path::PathBuf;
use std::process;

use anyhow::Result;

use crate::core::module::WintsModule;
use crate::core::storage::WintsStorage;
use crate::util::log::{CAUTION, DRY_RUN, WRITE};

pub struct InitOptions {
    pub local_basedir: PathBuf,
    pub global_basedir: PathBuf,
    pub module_name: String,
    pub global_module: bool,
    pub template: String,
    pub dry_run: bool,
}

pub fn init(options: InitOptions) -> Result<()> {
    if options.dry_run {
        println!(" {} Dry-run mode activated.", DRY_RUN);
    }

    println!(
        " {} Initialise '{}' with template '{}'...",
        WRITE, options.module_name, options.template
    );

    let module = match options.template.as_str() {
        "empty" => WintsModule::empty_module(),
        "default" => WintsModule::default_module(),
        _ => {
            println!(
                " {} Need a valid template : '{}' is unknown",
                CAUTION, options.template
            );
            process::exit(1);
        }
    };

    match options.dry_run {
        true => {
            println!(
                " {} Add '{}' module with {} contexts and {} URLs",
                DRY_RUN,
                options.module_name,
                &module.list_of_all_contexts().len(),
                &module.list_of_all_urls().len()
            );
        }
        false => {
            let mut storage = WintsStorage::load(
                options.local_basedir.clone(),
                options.global_basedir.clone(),
            )?;
            storage.add_module(
                options.module_name.clone(),
                module.clone(),
                options.global_module,
            );
            storage.store()?;
            println!(
                " {} A new '{}' module have been created with {} contexts and {} URLs",
                WRITE,
                options.module_name,
                &module.list_of_all_contexts().len(),
                &module.list_of_all_urls().len()
            );
        }
    }

    Ok(())
}