Skip to content

Commit 2d9fa3d

Browse files
Merge pull request #195 from matiaskorhonen/cli-feature
CLI feature
2 parents 8c341a1 + e2d0f9e commit 2d9fa3d

6 files changed

Lines changed: 60 additions & 42 deletions

File tree

Cargo.toml

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,25 @@ pre-release-replacements = [
2222
{file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/matiaskorhonen/paper-age/compare/{{tag_name}}...HEAD", exactly=1},
2323
]
2424

25+
[features]
26+
default = ["cli"]
27+
cli = ["dep:clap", "dep:clap-verbosity-flag", "dep:exitcode", "dep:rpassword", "dep:env_logger"]
28+
29+
[[bin]]
30+
name = "paper-age"
31+
path = "src/main.rs"
32+
required-features = ["cli"]
33+
2534
[dependencies]
2635
age = { version = "0.11.2", features = ["armor"] }
27-
clap = { version = "4.5", features = ["derive"] }
28-
clap-verbosity-flag = "3.0"
29-
exitcode = "1.1.2"
36+
clap = { version = "4.5", features = ["derive"], optional = true }
37+
clap-verbosity-flag = { version = "3.0", optional = true }
38+
exitcode = { version = "1.1.2", optional = true }
3039
printpdf = { version = "0.9.1", features = ["text_layout"], default-features = false }
3140
qrcode = { version = "0.14.1", default-features = false }
32-
rpassword = "7"
41+
rpassword = { version = "7", optional = true }
3342
log = "0.4"
34-
env_logger = "0.11"
43+
env_logger = { version = "0.11", optional = true }
3544

3645
[dev-dependencies]
3746
assert_cmd = "2.1"

build.rs

Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,55 @@
1+
#[cfg(feature = "cli")]
12
use clap::CommandFactory;
3+
#[cfg(feature = "cli")]
24
use clap_complete::{generate_to, shells::Shell};
5+
#[cfg(feature = "cli")]
36
use path_absolutize::*;
47

8+
#[cfg(feature = "cli")]
59
#[path = "src/cli.rs"]
610
mod cli;
711

12+
#[cfg(feature = "cli")]
813
#[path = "src/page.rs"]
914
pub mod page;
1015

1116
fn main() -> std::io::Result<()> {
12-
let out_dir =
13-
std::path::PathBuf::from(std::env::var_os("OUT_DIR").ok_or(std::io::ErrorKind::NotFound)?);
14-
let mut cmd = cli::Args::command();
15-
16-
let man = clap_mangen::Man::new(cmd.clone());
17-
let mut buffer: Vec<u8> = Default::default();
18-
man.render(&mut buffer)?;
19-
20-
// Create a man directory at the same level as the binary, even though build
21-
// scripts shouldn't
22-
let man_dir = &out_dir.join("../../../man");
23-
let absolute_man_dir = man_dir.absolutize()?;
24-
std::fs::create_dir_all(&absolute_man_dir)?;
25-
let man_path = absolute_man_dir.join("paper-age.1");
26-
std::fs::write(man_path, buffer)?;
27-
28-
// Create a completion directory the same level as the binary
29-
let completion_dir = out_dir.join("../../../completion");
30-
let absolute_completion_dir = completion_dir.absolutize()?;
31-
std::fs::create_dir_all(absolute_completion_dir.clone())?;
32-
for shell in [Shell::Bash, Shell::Fish, Shell::Zsh] {
33-
generate_to(
34-
shell,
35-
&mut cmd,
36-
"paper-age",
37-
absolute_completion_dir.as_ref(),
38-
)?;
17+
#[cfg(feature = "cli")]
18+
{
19+
let out_dir = std::path::PathBuf::from(
20+
std::env::var_os("OUT_DIR").ok_or(std::io::ErrorKind::NotFound)?,
21+
);
22+
let mut cmd = cli::Args::command();
23+
24+
let man = clap_mangen::Man::new(cmd.clone());
25+
let mut buffer: Vec<u8> = Default::default();
26+
man.render(&mut buffer)?;
27+
28+
// Create a man directory at the same level as the binary, even though build
29+
// scripts shouldn't
30+
let man_dir = &out_dir.join("../../../man");
31+
let absolute_man_dir = man_dir.absolutize()?;
32+
std::fs::create_dir_all(&absolute_man_dir)?;
33+
let man_path = absolute_man_dir.join("paper-age.1");
34+
std::fs::write(man_path, buffer)?;
35+
36+
// Create a completion directory the same level as the binary
37+
let completion_dir = out_dir.join("../../../completion");
38+
let absolute_completion_dir = completion_dir.absolutize()?;
39+
std::fs::create_dir_all(absolute_completion_dir.clone())?;
40+
for shell in [Shell::Bash, Shell::Fish, Shell::Zsh] {
41+
generate_to(
42+
shell,
43+
&mut cmd,
44+
"paper-age",
45+
absolute_completion_dir.as_ref(),
46+
)?;
47+
}
48+
49+
// Re-run if the cli or page files change
50+
println!("cargo:rerun-if-changed=src/cli.rs");
51+
println!("cargo:rerun-if-changed=src/page.rs");
3952
}
4053

41-
// Re-run if the cli or page files change
42-
println!("cargo:rerun-if-changed=src/cli.rs");
43-
println!("cargo:rerun-if-changed=src/page.rs");
44-
4554
Ok(())
4655
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod builder;
2+
#[cfg(feature = "cli")]
23
pub mod cli;
34
pub mod convenience;
45
pub mod encryption;

src/main.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,10 @@ use std::{
1313

1414
use age::secrecy::{ExposeSecret, SecretString};
1515
use clap::Parser;
16+
use paper_age::{builder, cli, encryption};
1617
use qrcode::types::QrError;
1718
use rpassword::prompt_password;
1819

19-
pub mod builder;
20-
pub mod cli;
21-
pub mod encryption;
22-
pub mod page;
23-
2420
#[macro_use]
2521
extern crate log;
2622

src/page.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ impl Default for PageDimensions {
7575
}
7676
}
7777

78-
#[derive(clap::ValueEnum, Clone, Debug, PartialEq, Eq)]
78+
#[derive(Clone, Debug, PartialEq, Eq)]
79+
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
7980
pub enum PageSize {
8081
A4,
8182
Letter,

tests/cli.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![cfg(feature = "cli")]
2+
13
use assert_cmd::cargo::cargo_bin_cmd;
24
use assert_fs::prelude::*;
35
use predicates::prelude::*;

0 commit comments

Comments
 (0)