Change PreProcessor::supports_renderer to return a Result

This changes `PreProcessor::supports_renderer` to return a `Result` in
preparation to allow preprocessors to be optional when the command
fails.
This commit is contained in:
Eric Huss
2025-08-16 13:26:01 -07:00
parent 235c1f87f0
commit 4d9095b603
6 changed files with 14 additions and 24 deletions

View File

@@ -114,24 +114,14 @@ impl Preprocessor for CmdPreprocessor {
})
}
fn supports_renderer(&self, renderer: &str) -> bool {
fn supports_renderer(&self, renderer: &str) -> Result<bool> {
debug!(
"Checking if the \"{}\" preprocessor supports \"{}\"",
self.name(),
renderer
);
let mut cmd = match crate::compose_command(&self.cmd, &self.root) {
Ok(c) => c,
Err(e) => {
warn!(
"Unable to create the command for the \"{}\" preprocessor, {}",
self.name(),
e
);
return false;
}
};
let mut cmd = crate::compose_command(&self.cmd, &self.root)?;
let outcome = cmd
.arg("supports")
@@ -153,7 +143,7 @@ impl Preprocessor for CmdPreprocessor {
}
}
outcome.unwrap_or(false)
Ok(outcome.unwrap_or(false))
}
}

View File

@@ -542,7 +542,7 @@ fn preprocessor_should_run(
) -> Result<bool> {
// default preprocessors should be run by default (if supported)
if cfg.build.use_default_preprocessors && is_default_preprocessor(preprocessor) {
return Ok(preprocessor.supports_renderer(renderer.name()));
return preprocessor.supports_renderer(renderer.name());
}
let key = format!("preprocessor.{}.renderers", preprocessor.name());
@@ -552,7 +552,7 @@ fn preprocessor_should_run(
Ok(Some(explicit_renderers)) => {
Ok(explicit_renderers.iter().any(|name| name == renderer_name))
}
Ok(None) => Ok(preprocessor.supports_renderer(renderer_name)),
Ok(None) => preprocessor.supports_renderer(renderer_name),
Err(e) => bail!("failed to get `{key}`: {e}"),
}
}

View File

@@ -247,8 +247,8 @@ impl Preprocessor for BoolPreprocessor {
unimplemented!()
}
fn supports_renderer(&self, _renderer: &str) -> bool {
self.0
fn supports_renderer(&self, _renderer: &str) -> Result<bool> {
Ok(self.0)
}
}

View File

@@ -39,8 +39,8 @@ pub trait Preprocessor {
/// particular renderer.
///
/// By default, always returns `true`.
fn supports_renderer(&self, _renderer: &str) -> bool {
true
fn supports_renderer(&self, _renderer: &str) -> Result<bool> {
Ok(true)
}
}

View File

@@ -59,7 +59,7 @@ fn handle_supports(pre: &dyn Preprocessor, sub_args: &ArgMatches) -> ! {
let renderer = sub_args
.get_one::<String>("renderer")
.expect("Required argument");
let supported = pre.supports_renderer(renderer);
let supported = pre.supports_renderer(renderer).unwrap();
// Signal whether the renderer is supported by exiting with 1 or 0.
if supported {
@@ -105,8 +105,8 @@ mod nop_lib {
Ok(book)
}
fn supports_renderer(&self, renderer: &str) -> bool {
renderer != "not-supported"
fn supports_renderer(&self, renderer: &str) -> Result<bool> {
Ok(renderer != "not-supported")
}
}

View File

@@ -83,7 +83,7 @@ fn example() -> CmdPreprocessor {
fn example_supports_whatever() {
let cmd = example();
let got = cmd.supports_renderer("whatever");
let got = cmd.supports_renderer("whatever").unwrap();
assert_eq!(got, true);
}
@@ -92,7 +92,7 @@ fn example_supports_whatever() {
fn example_doesnt_support_not_supported() {
let cmd = example();
let got = cmd.supports_renderer("not-supported");
let got = cmd.supports_renderer("not-supported").unwrap();
assert_eq!(got, false);
}