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
use std::path::PathBuf;

use anyhow::Result;

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

pub struct AddOptions {
    pub local_basedir: PathBuf,
    pub global_basedir: PathBuf,
    pub module_name: String,
    pub global_module: bool,
    pub url: String,
    pub context: String,
    pub dry_run: bool,
}

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

    println!(
        " {} Add '{}' to '{}' in '{}'...",
        WRITE, options.url, options.context, options.module_name,
    );

    match options.dry_run {
        true => {
            println!(
                " {} Add '{}' to '{}' in '{}'",
                DRY_RUN, options.url, options.context, options.module_name
            );
        }
        false => {
            let mut storage = WintsStorage::load(
                options.local_basedir.clone(),
                options.global_basedir.clone(),
            )?;
            storage.contextualise_urls(
                options.module_name.clone(),
                options.global_module,
                options.context.as_str(),
                vec![options.url.clone()],
            );
            storage.store()?;
            println!(
                " {} '{}' have been added to '{}' in '{}'",
                WRITE, options.url, options.context, options.module_name
            );
        }
    }

    Ok(())
}