aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
blob: c2c103da7492681964dd900f0636cfd5585792ac (plain)
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
use std::process::exit;
use clap::Parser;
use crate::cli::{Cli, CliCommand};
use crate::config::{Config, ConfigLoadError};
use crate::dots::{deploy_dots, unlink_dots};

mod config;
mod cli;
mod dots;

fn main() {
    let cli = Cli::parse();
    
    let config = Config::load(cli.config).map_err(|err|
        match err {
            ConfigLoadError::IOError(err) => {
                eprintln!("failed to load config file: {}", err);
                exit(1)
            }
            ConfigLoadError::DeserializationError(err) => {
                eprintln!("failed to deserialize config file: {}", err);
                exit(1)
            }
        }
    ).unwrap();
    
    match cli.command {
        CliCommand::Deploy => deploy_dots(config.dots, config.dots_dir),
        CliCommand::Unlink => unlink_dots(config.dots, config.dots_dir),
    }
}