use crate::common::Result;
use crate::document::{Document, Paragraph, Run, Table};
use super::config::MarkdownOptions;
use super::traits::ToMarkdown;
use super::writer::MarkdownWriter;
impl ToMarkdown for Document {
fn to_markdown_with_options(&self, options: &MarkdownOptions) -> Result<String> {
let mut writer = MarkdownWriter::new(options.clone());
if options.include_metadata {
let metadata = self.metadata()?;
writer.write_metadata(&metadata)?;
}
let paragraphs = self.paragraphs()?;
let tables = self.tables()?;
let estimated_size = paragraphs.len() * 100 + tables.len() * 500; writer.reserve(estimated_size);
for para in paragraphs {
writer.write_paragraph(¶)?;
}
for table in tables {
writer.write_table(&table)?;
}
Ok(writer.finish())
}
}
impl ToMarkdown for Paragraph {
fn to_markdown_with_options(&self, options: &MarkdownOptions) -> Result<String> {
let mut writer = MarkdownWriter::new(options.clone());
writer.write_paragraph(self)?;
Ok(writer.finish().trim_end().to_string())
}
}
impl ToMarkdown for Run {
fn to_markdown_with_options(&self, options: &MarkdownOptions) -> Result<String> {
let mut writer = MarkdownWriter::new(options.clone());
writer.write_run(self)?;
Ok(writer.finish())
}
}
impl ToMarkdown for Table {
fn to_markdown_with_options(&self, options: &MarkdownOptions) -> Result<String> {
let mut writer = MarkdownWriter::new(options.clone());
writer.write_table(self)?;
Ok(writer.finish().trim_end().to_string())
}
}