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:
parent
8cdb8d0367
commit
3958260353
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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(¤t_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 == ¤t_path || is_first_chapter {
|
||||||
out.write(&utils::fs::path_to_root(¤t_path))?;
|
is_first_chapter = false;
|
||||||
out.write(&tmp)?;
|
out.write(" class=\"active\"")?;
|
||||||
out.write("\"")?;
|
}
|
||||||
|
|
||||||
if path == ¤t_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
|
||||||
|
|
Loading…
Reference in New Issue