Skip to main content

git_simple_encrypt/
lib.rs

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