markdown_parser/adapt/
toml.rs

1//! toml adapter module
2
3use crate::{Format, Markdown};
4
5use super::Adapter;
6
7/// TomlAdapter
8///
9/// transform markdown frontMatter into toml
10#[derive(Default, Debug)]
11pub struct TomlAdapter();
12
13impl Adapter for TomlAdapter {
14    fn adapt<T>(&self, mut md: Markdown) -> crate::MarkdownResult
15    where
16        T: serde::ser::Serialize + serde::de::DeserializeOwned,
17    {
18        match md.format() {
19            Format::TOML => Ok(md),
20            Format::JSON | Format::YAML => {
21                let data = super::de_fm::<T>(&md)?;
22
23                md.set_front_matter(self.ser_fm(&data)?);
24                md.set_format(Format::TOML);
25                Ok(md)
26            }
27        }
28    }
29
30    fn ser_fm<T>(&self, data: &T) -> Result<String, crate::Error>
31    where
32        T: serde::Serialize,
33    {
34        let mut front_matter = toml::to_string(&data)?;
35
36        if front_matter.ends_with("\n") {
37            front_matter.pop();
38        }
39
40        Ok(front_matter)
41    }
42}