Skip to content

Commit b651cb1

Browse files
committed
feat: Auto-detect interactive shell for pretty output
1 parent 2be036e commit b651cb1

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

rust/boil/src/show/images/cli.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use clap::Args;
1+
use clap::{Args, ValueEnum};
22

33
use crate::build::image::Image;
44

@@ -8,6 +8,15 @@ pub struct ShowImagesArguments {
88
pub image: Vec<Image>,
99

1010
/// Pretty print the structured output.
11-
#[arg(long)]
12-
pub pretty: bool,
11+
#[arg(long, value_enum, default_value_t = Pretty::default())]
12+
pub pretty: Pretty,
13+
}
14+
15+
// #[derive(Clone, Debug, Default, strum::Display, strum::EnumString)]
16+
#[derive(Clone, Debug, Default, ValueEnum)]
17+
pub enum Pretty {
18+
#[default]
19+
Auto,
20+
Always,
21+
Never,
1322
}

rust/boil/src/show/images/mod.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
use std::collections::BTreeMap;
1+
use std::{collections::BTreeMap, io::IsTerminal};
22

3-
use serde::{Serialize, ser::SerializeSeq};
43
use snafu::{ResultExt, Snafu};
54

65
use crate::{
76
build::bakefile::{Targets, TargetsError, TargetsOptions},
8-
show::images::cli::ShowImagesArguments,
7+
show::images::cli::{Pretty, ShowImagesArguments},
98
};
109

1110
pub mod cli;
@@ -66,14 +65,14 @@ pub fn run_command(arguments: ShowImagesArguments) -> Result<(), Error> {
6665
print_to_stdout(list, arguments.pretty)
6766
}
6867

69-
fn print_to_stdout(list: BTreeMap<String, Vec<String>>, pretty: bool) -> Result<(), Error> {
68+
fn print_to_stdout(list: BTreeMap<String, Vec<String>>, pretty: Pretty) -> Result<(), Error> {
7069
let stdout = std::io::stdout();
7170

72-
let list = OneOrMany(list);
73-
74-
if pretty {
75-
serde_json::to_writer_pretty(stdout, &list).context(SerializeListSnafu)
76-
} else {
77-
serde_json::to_writer(stdout, &list).context(SerializeListSnafu)
71+
match pretty {
72+
Pretty::Always | Pretty::Auto if stdout.is_terminal() => {
73+
serde_json::to_writer_pretty(stdout, &list)
74+
}
75+
_ => serde_json::to_writer(stdout, &list),
7876
}
77+
.context(SerializeListSnafu)
7978
}

0 commit comments

Comments
 (0)