1pub mod cli;
5pub mod paths;
6pub mod rulesets;
7pub mod sources;
8pub mod update;
9
10use anyhow::Result;
11
12pub fn run(cli: cli::Cli) -> Result<()> {
13 let user = cfg!(target_os = "windows") || cli.user;
15
16 let path_provider = paths::get_path_provider(user);
17
18 match cli.command {
19 cli::Commands::Update { force, quiet } => {
20 let update_manager = update::UpdateManager::new(path_provider.as_ref());
21 update_manager.update(force, quiet)
22 }
23
24 cli::Commands::EnableRuleset { name } => {
25 let source_manager = sources::SourceManager::new(path_provider.as_ref());
26 let ruleset_manager = rulesets::RulesetManager::new(path_provider.as_ref());
27
28 let source_index = source_manager.get_or_download_index()?;
30
31 let source_name = match name {
32 Some(n) => n,
33 None => match ruleset_manager.select_source(&source_index)? {
34 Some(n) => n,
35 None => return Ok(()),
36 },
37 };
38
39 let source_info = source_index.sources.get(&source_name);
40 if source_info.is_none() {
41 return Err(anyhow::anyhow!("Unknown ruleset: {}", source_name));
42 }
43
44 ruleset_manager.enable_source(&source_name, source_info)
45 }
46 cli::Commands::DisableRuleset { name } => {
47 let ruleset_manager = rulesets::RulesetManager::new(path_provider.as_ref());
48
49 let source_name = match name {
50 Some(n) => n,
51 None => match ruleset_manager.select_enabled_source()? {
52 Some(n) => n,
53 None => return Ok(()),
54 },
55 };
56
57 ruleset_manager.disable_source(&source_name)
58 }
59 cli::Commands::UpdateSources => {
60 let source_manager = sources::SourceManager::new(path_provider.as_ref());
61 source_manager.update_sources()
62 }
63 }
64}