diff options
Diffstat (limited to 'src/md.rs')
-rw-r--r-- | src/md.rs | 38 |
1 files changed, 23 insertions, 15 deletions
@@ -142,16 +142,16 @@ impl Markdown { /// Find embedded files. // FIXME: this should return a result - pub fn embedded_files(&self) -> EmbeddedFiles { + pub fn embedded_files(&self) -> Result<EmbeddedFiles, MdError> { let mut files = EmbeddedFiles::default(); for e in Self::visit(&self.html) { - if let Ok(file) = embedded_file(e) { + if let MaybeEmbeddedFile::IsFile(file) = embedded_file(e)? { files.push(file); } } - files + Ok(files) } } @@ -175,21 +175,23 @@ impl StructureElement { } } -fn embedded_file(e: &Element) -> Result<EmbeddedFile, MdError> { +enum MaybeEmbeddedFile { + IsFile(EmbeddedFile), + NotFile, +} + +fn embedded_file(e: &Element) -> Result<MaybeEmbeddedFile, MdError> { if e.tag() != ElementTag::Pre { - return Err(MdError::NotCodeBlockElement( - e.tag().name().to_string(), - e.location(), - )); + return Ok(MaybeEmbeddedFile::NotFile); } if !e.has_attr("class", "file") { - return Err(MdError::NotFile(e.location())); + return Ok(MaybeEmbeddedFile::NotFile); } let id = e.attr("id"); if id.is_none() { - return Err(MdError::NoId(e.location())); + return Ok(MaybeEmbeddedFile::NotFile); } let id = id.unwrap(); if id.value().is_none() { @@ -212,7 +214,8 @@ fn embedded_file(e: &Element) -> Result<EmbeddedFile, MdError> { if contents.ends_with('\n') { contents.truncate(contents.len() - 1); } - match AddNewline::parse(e.attr("add-newline"), e.location())? { + let addnl = AddNewline::parse(e.attr("add-newline"), e.location()); + match addnl? { AddNewline::No => { // Newline already isn't there. } @@ -228,7 +231,12 @@ fn embedded_file(e: &Element) -> Result<EmbeddedFile, MdError> { } }; - Ok(EmbeddedFile::new(id.into(), contents)) + eprintln!("ok"); + + Ok(MaybeEmbeddedFile::IsFile(EmbeddedFile::new( + id.into(), + contents, + ))) } #[derive(Debug, Eq, PartialEq, Copy, Clone)] @@ -426,7 +434,7 @@ pub enum MdError { NoIdValue(Location), /// Value ofv add-newline attribute ie not understood. - #[error("{0}: value of add-newline attirubte is not understood: {0}")] + #[error("{1}: value of add-newline attribute is not understood: {0}")] BadAddNewline(String, Location), } @@ -637,7 +645,7 @@ given ABBA fn finds_no_embedded_files_in_empty_doc() { let md = Markdown::new_from_str(Path::new(""), "").unwrap(); let files = md.embedded_files(); - assert!(files.files().is_empty()); + assert!(files.unwrap().files().is_empty()); } #[test] @@ -651,7 +659,7 @@ hello, world "#, ) .unwrap(); - let files = md.embedded_files(); + let files = md.embedded_files().unwrap(); assert_eq!(files.files().len(), 1); let file = files.files().get(0).unwrap(); assert_eq!(file.filename(), "fileid"); |