Simplify the use of `Option::and_then`

I found a few places where `Option::and_then` could be simplified (in
my opinion) with `?` or with `match`.
This commit is contained in:
Martin Geisler 2022-09-11 00:46:26 +02:00
parent 8cdb8d0367
commit 3958260353
3 changed files with 32 additions and 36 deletions

View File

@ -89,8 +89,7 @@ pub fn execute(args: &ArgMatches) -> Result<()> {
let input_404 = book let input_404 = book
.config .config
.get("output.html.input-404") .get("output.html.input-404")
.map(toml::Value::as_str) .and_then(toml::Value::as_str)
.and_then(std::convert::identity) // flatten
.map(ToString::to_string); .map(ToString::to_string);
let file_404 = get_404_output_file(&input_404); let file_404 = get_404_output_file(&input_404);

View File

@ -148,15 +148,12 @@ fn render(
trace!("Render template"); trace!("Render template");
_h.template() let t = _h
.ok_or_else(|| RenderError::new("Error with the handlebars template")) .template()
.and_then(|t| { .ok_or_else(|| RenderError::new("Error with the handlebars template"))?;
let local_ctx = Context::wraps(&context)?; let local_ctx = Context::wraps(&context)?;
let mut local_rc = rc.clone(); let mut local_rc = rc.clone();
t.render(r, &local_ctx, &mut local_rc, out) t.render(r, &local_ctx, &mut local_rc, out)
})?;
Ok(())
} }
pub fn previous( pub fn previous(

View File

@ -117,35 +117,35 @@ impl HelperDef for RenderToc {
} }
// Link // Link
let path_exists = if let Some(path) = let path_exists: bool;
item.get("path") match item.get("path") {
.and_then(|p| if p.is_empty() { None } else { Some(p) }) Some(path) if !path.is_empty() => {
{ out.write("<a href=\"")?;
out.write("<a href=\"")?; let tmp = Path::new(path)
.with_extension("html")
.to_str()
.unwrap()
// Hack for windows who tends to use `\` as separator instead of `/`
.replace('\\', "/");
let tmp = Path::new(item.get("path").expect("Error: path should be Some(_)")) // Add link
.with_extension("html") out.write(&utils::fs::path_to_root(&current_path))?;
.to_str() out.write(&tmp)?;
.unwrap() out.write("\"")?;
// Hack for windows who tends to use `\` as separator instead of `/`
.replace('\\', "/");
// Add link if path == &current_path || is_first_chapter {
out.write(&utils::fs::path_to_root(&current_path))?; is_first_chapter = false;
out.write(&tmp)?; out.write(" class=\"active\"")?;
out.write("\"")?; }
if path == &current_path || is_first_chapter { out.write(">")?;
is_first_chapter = false; path_exists = true;
out.write(" class=\"active\"")?;
} }
_ => {
out.write(">")?; out.write("<div>")?;
true path_exists = false;
} else { }
out.write("<div>")?; }
false
};
if !self.no_section_label { if !self.no_section_label {
// Section does not necessarily exist // Section does not necessarily exist