From 5eb6a3c3bf6294e084167ecfa6cd20c4aabe15fc Mon Sep 17 00:00:00 2001 From: Asherah Connor Date: Mon, 1 Jun 2020 12:17:13 +1000 Subject: [PATCH] use FnMut, drop a bunch of refcells --- src/changelog.rs | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/changelog.rs b/src/changelog.rs index 9563104..179b064 100644 --- a/src/changelog.rs +++ b/src/changelog.rs @@ -1,7 +1,6 @@ use anyhow::Result; use comrak::nodes::{AstNode, NodeValue}; use comrak::{format_commonmark, parse_document, Arena, ComrakOptions}; -use std::cell::RefCell; use std::fs::read_to_string; use std::path::PathBuf; @@ -10,41 +9,35 @@ pub(crate) fn read(fname: PathBuf, tag: String) -> Result { let arena = Arena::new(); let mut root = parse_document(&arena, &data, &ComrakOptions::default()); - let collect = RefCell::new(false); - let buf = RefCell::new(Vec::::new()); + let mut collect = false; + let mut buf = Vec::::new(); - iter_nodes(&mut root, &|node| { + iter_nodes(&mut root, &mut |node| { let nd = node.data.borrow(); match nd.value { NodeValue::Heading(ref hdr) => { if hdr.level == 2 { - if *collect.borrow() { - collect.swap(&RefCell::new(false)); + if collect { + collect = false; } let found_tag = String::from_utf8(nd.content.clone())?; if found_tag == tag { - collect.swap(&RefCell::new(true)); + collect = true; } } else { - if *collect.borrow() { - let mut apd = buf.borrow_mut(); - let mut new_buf = Vec::::new(); - format_commonmark(&node, &ComrakOptions::default(), &mut new_buf)?; - apd.append(&mut new_buf); + if collect { + format_commonmark(&node, &ComrakOptions::default(), &mut buf)?; } } Ok(()) } NodeValue::Item(_) => Ok(()), _ => { - if *collect.borrow() { - let mut apd = buf.borrow_mut(); - let mut new_buf = Vec::::new(); - format_commonmark(&node, &ComrakOptions::default(), &mut new_buf)?; - apd.append(&mut new_buf); + if collect { + format_commonmark(&node, &ComrakOptions::default(), &mut buf)?; } Ok(()) @@ -52,12 +45,12 @@ pub(crate) fn read(fname: PathBuf, tag: String) -> Result { } })?; - Ok(String::from_utf8(buf.into_inner())?) + Ok(String::from_utf8(buf)?) } -fn iter_nodes<'a, F>(node: &'a AstNode<'a>, f: &F) -> Result<()> +fn iter_nodes<'a, F>(node: &'a AstNode<'a>, f: &mut F) -> Result<()> where - F: Fn(&'a AstNode<'a>) -> Result<()>, + F: FnMut(&'a AstNode<'a>) -> Result<()>, { f(node)?; for c in node.children() { -- 2.44.0