fixed template args

This commit is contained in:
Ruben Moor 2020-07-06 10:27:14 -05:00
parent 0557afcb71
commit 7a2db60d22

View File

@ -252,17 +252,15 @@ fn parse_range_or_anchor(parts: Option<&str>) -> RangeOrAnchor {
} }
} }
fn parse_template_path(arg: &str) -> LinkType<'static> { fn parse_template_path(filepath: &str, params: Vec<&str>) -> LinkType<'static> {
let mut param_pairs = arg.split_whitespace();
let path: PathBuf = param_pairs.next().unwrap().into();
let mut dict = HashMap::new(); let mut dict = HashMap::new();
param_pairs.for_each(|p| { params.iter().for_each(|p| {
let mut pair = p.splitn(2, ':'); let mut pair = p.splitn(2, ':');
let key = pair.next().unwrap().to_string(); let key = pair.next().unwrap().to_owned();
let value = pair.next().unwrap().to_string(); let value = pair.next().unwrap().to_owned();
dict.insert(key, value); dict.insert(key, value);
}); });
LinkType::Template(path, dict) LinkType::Template(filepath.into(), dict)
} }
fn parse_include_path(path: &str) -> LinkType<'static> { fn parse_include_path(path: &str) -> LinkType<'static> {
@ -314,7 +312,7 @@ impl<'a> Link<'a> {
Some(LinkType::Playground(pth.into(), props)) Some(LinkType::Playground(pth.into(), props))
} }
("rustdoc_include", Some(pth)) => Some(parse_rustdoc_include_path(pth)), ("rustdoc_include", Some(pth)) => Some(parse_rustdoc_include_path(pth)),
("template", Some(pth)) => Some(parse_template_path(pth)), ("template", Some(pth)) => Some(parse_template_path(pth, props)),
_ => None, _ => None,
} }
} }
@ -408,14 +406,20 @@ impl<'a> Link<'a> {
fs::read_to_string(&target) fs::read_to_string(&target)
.map(|s| { .map(|s| {
dict.iter().fold(s, |r, (key, value)| { dict.iter().fold(s, |r, (key, value)| {
r.replace(format!("{{ {} }}", key).as_str(), value) r.replace(format!("{{{{ {} }}}}", key).as_str(), value)
}) })
}) })
.with_context(|| { .with_context(|| {
format!( format!(
"Could not read file for template {} ({})", "Could not read file for template {} ({}), dict:{}",
self.link_text, self.link_text,
target.display(), target.display(),
dict.iter()
.fold("".to_owned(), |s, (key, value)| s + format!(
" {} => {},",
key, value
)
.as_str())
) )
}) })
} }