1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
use pug; use crate::error::Result; use crate::resume::{RawResume, Resume}; #[derive(Debug, Clone)] pub struct HtmlCompiler; impl HtmlCompiler { pub fn new() -> Self { Self } } impl HtmlCompiler { pub fn compile(&self, resume: &RawResume) -> Result<Resume> { let html = String::from_utf8(resume.html().to_vec())?; let css = String::from_utf8(resume.stylesheet().to_vec())?; let html = pug::parse(html)?; Ok(Resume::new(html, css)) } } impl Default for HtmlCompiler { fn default() -> Self { Self::new() } } #[cfg(test)] mod tests { use crate::error::ErrorKind; use crate::templates::BASIC; use super::*; const INVALID_UTF8: &[u8] = &[0, 159, 146, 150]; #[test] fn compile_creates_resume_from_valid_template() { let template = &BASIC; let raw_resume = RawResume::new(template.html(), template.stylesheet()); let compiler = HtmlCompiler::default(); assert!(compiler.compile(&raw_resume).is_ok()); } #[test] fn compile_fails_if_template_has_non_utf8_html() { let invalid_html = INVALID_UTF8; let valid_stylesheet = &BASIC.stylesheet(); let template = RawResume::new(invalid_html, valid_stylesheet); let compiler = HtmlCompiler::default(); let result = compiler.compile(&template); assert!(result.is_err()); assert_eq!(result.unwrap_err().kind(), &ErrorKind::InvalidUtf8); } #[test] fn compile_fails_if_template_has_non_utf8_stylesheet() { let valid_html = &BASIC.html(); let invalid_stylesheet = INVALID_UTF8; let raw_resume = RawResume::new(valid_html, invalid_stylesheet); let compiler = HtmlCompiler::default(); let result = compiler.compile(&raw_resume); assert!(result.is_err()); assert_eq!(result.unwrap_err().kind(), &ErrorKind::InvalidUtf8); } #[test] fn compile_fails_if_template_html_is_not_valid_pug() { let invalid_html = b"<html></html>"; let valid_stylesheet = &BASIC.stylesheet(); let raw_resume = RawResume::new(invalid_html, valid_stylesheet); let compiler = HtmlCompiler::default(); let result = compiler.compile(&raw_resume); assert!(result.is_err()); assert_eq!(result.unwrap_err().kind(), &ErrorKind::Pug); } }