diff --git a/src/librustdoc/externalfiles.rs b/src/librustdoc/externalfiles.rs
index 2ecb071fcc2..d78f00497ca 100644
--- a/src/librustdoc/externalfiles.rs
+++ b/src/librustdoc/externalfiles.rs
@@ -11,64 +11,79 @@
use std::fs::File;
use std::io::prelude::*;
use std::io;
-use std::path::{PathBuf, Path};
+use std::path::Path;
use std::str;
#[derive(Clone)]
pub struct ExternalHtml{
+ /// Content that will be included inline in the
section of a
+ /// rendered Markdown file or generated documentation
pub in_header: String,
+ /// Content that will be included inline between and the content of
+ /// a rendered Markdown file or generated documentation
pub before_content: String,
+ /// Content that will be included inline between the content and of
+ /// a rendered Markdown file or generated documentation
pub after_content: String
}
impl ExternalHtml {
pub fn load(in_header: &[String], before_content: &[String], after_content: &[String])
-> Option {
- match (load_external_files(in_header),
- load_external_files(before_content),
- load_external_files(after_content)) {
- (Some(ih), Some(bc), Some(ac)) => Some(ExternalHtml {
- in_header: ih,
- before_content: bc,
- after_content: ac
- }),
- _ => None
+ load_external_files(in_header)
+ .and_then(|ih|
+ load_external_files(before_content)
+ .map(|bc| (ih, bc))
+ )
+ .and_then(|(ih, bc)|
+ load_external_files(after_content)
+ .map(|ac| (ih, bc, ac))
+ )
+ .map(|(ih, bc, ac)|
+ ExternalHtml {
+ in_header: ih,
+ before_content: bc,
+ after_content: ac,
+ }
+ )
+ }
+}
+
+pub enum LoadStringError {
+ ReadFail,
+ BadUtf8,
+}
+
+pub fn load_string>(file_path: P) -> Result {
+ let file_path = file_path.as_ref();
+ let mut contents = vec![];
+ let result = File::open(file_path)
+ .and_then(|mut f| f.read_to_end(&mut contents));
+ if let Err(e) = result {
+ let _ = writeln!(&mut io::stderr(),
+ "error reading `{}`: {}",
+ file_path.display(), e);
+ return Err(LoadStringError::ReadFail);
+ }
+ match str::from_utf8(&contents) {
+ Ok(s) => Ok(s.to_string()),
+ Err(_) => {
+ let _ = writeln!(&mut io::stderr(),
+ "error reading `{}`: not UTF-8",
+ file_path.display());
+ Err(LoadStringError::BadUtf8)
}
}
}
-pub fn load_string(input: &Path) -> io::Result