use pulldown_cmark::{html, Parser};
use super::{
fs::{Data, Html, Markdown},
IntoInner,
};
pub struct MarkdownParser {
pub content: Data<Markdown>,
}
impl MarkdownParser {
pub fn new(content: Data<Markdown>) -> Self {
Self { content }
}
pub fn convert(&self) -> Data<Html> {
let mut buffer = String::new();
let content = self.content.clone().file_content.into_inner();
let parser = Parser::new(&content);
self.push_html(&mut buffer, parser);
Data::new(Html::new(&buffer))
}
fn push_html(&self, buffer: &mut String, parser: Parser) {
html::push_html(buffer, parser);
}
}
#[cfg(test)]
mod test {
use crate::core::{
fs::{Data, Markdown},
IntoInner,
};
#[test]
fn check_html() {
use super::MarkdownParser;
let content: Data<Markdown> = Data::new("**Hello World**".into());
let parser = MarkdownParser::new(content);
let html = parser.convert().into_inner().into_inner();
assert_eq!("<p><strong>Hello World</strong></p>\n", html)
}
}