dotfiles_processor/process.rs
1// Copyright (c) 2021-2022 Miguel Barreto and others
2//
3// Permission is hereby granted, free of charge, to any person obtaining
4// a copy of this software and associated documentation files (the
5// "Software"), to deal in the Software without restriction, including
6// without limitation the rights to use, copy, modify, merge, publish,
7// distribute, sublicense, and/or sell copies of the Software, and to
8// permit persons to whom the Software is furnished to do so, subject to
9// the following conditions:
10//
11// The above copyright notice and this permission notice shall be
12// included in all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22use std::convert::TryFrom;
23
24use dotfiles_core::Action;
25
26use dotfiles_actions::ohmyzsh_install::action::OhMyZshInstallAction;
27
28use dotfiles_actions::homebrew_install::action::HomebrewInstallAction;
29use log::info;
30
31use crate::{
32 context::Context,
33 flags::{Command, FlagData},
34};
35
36use dotfiles_core::error::DotfilesError;
37
38pub fn process(flag_data: &FlagData) -> Result<(), DotfilesError> {
39 match &flag_data.command {
40 #[cfg(any(target_os = "linux", target_os = "macos"))]
41 Command::InstallHomebrew => {
42 info!("Installing homebrew.");
43 HomebrewInstallAction::new().execute()
44 }
45 #[cfg(unix)]
46 Command::InstallOhMyZsh { skip_chsh } => {
47 info!("Installing Oh My Zsh!");
48 OhMyZshInstallAction::new(skip_chsh.to_owned()).execute()
49 }
50 Command::ApplyConfig { file, dry_run } => {
51 let mut ctx = Context::try_from(file.as_str())?;
52 ctx.parse_file()?;
53 if !dry_run {
54 Context::run_actions(ctx)?;
55 }
56 Ok(())
57 }
58 }
59}