git_simple_encrypt/
lib.rs

1#![feature(let_chains)]
2#![feature(test)]
3#![warn(clippy::nursery, clippy::cargo, clippy::pedantic)]
4#![allow(clippy::multiple_crate_versions)]
5
6mod cli;
7mod config;
8mod crypt;
9mod repo;
10mod utils;
11
12use anyhow::Result;
13use crypt::{decrypt_repo, encrypt_repo};
14use repo::Repo;
15
16pub use crate::cli::{Cli, SetField, SubCommand};
17
18#[allow(clippy::missing_panics_doc, clippy::missing_errors_doc)]
19pub fn run(cli: Cli) -> Result<()> {
20    let repo = Repo::open(&cli.repo)?;
21    let repo = Box::leak(Box::new(repo));
22    match cli.command {
23        SubCommand::Encrypt => encrypt_repo(repo)?,
24        SubCommand::Decrypt { path } => decrypt_repo(repo, path)?,
25        SubCommand::Add { paths } => repo.conf.add_to_crypt_list(&paths)?,
26        SubCommand::Set { field } => field.set(repo)?,
27        SubCommand::Pwd => repo.set_key_interactive()?,
28    }
29    anyhow::Ok::<()>(())
30}