#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub enum Flavor {
#[default]
Mdbook,
Pandoc,
CommonMark,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub enum MetadataStyle {
#[default]
Auto,
Folded,
Literal,
}
#[derive(Debug, Clone)]
pub struct Options {
pub(crate) flavor: Flavor,
pub(crate) base_heading_level: u8,
pub(crate) title: Option<String>,
pub(crate) table_of_contents: bool,
pub(crate) footer: bool,
pub(crate) aliases: bool,
pub(crate) metadata: bool,
pub(crate) metadata_fields: Vec<(String, String, MetadataStyle)>,
}
impl Default for Options {
fn default() -> Self {
Options {
flavor: Flavor::Mdbook,
base_heading_level: 1,
title: None,
table_of_contents: false,
footer: false,
aliases: true,
metadata: true,
metadata_fields: Vec::new(),
}
}
}
impl Options {
pub fn new() -> Self {
Self::default()
}
pub fn flavor(mut self, flavor: Flavor) -> Self {
self.flavor = flavor;
self
}
pub fn base_heading_level(mut self, level: u8) -> Self {
self.base_heading_level = level;
self
}
pub fn title(mut self, title: impl Into<String>) -> Self {
self.title = Some(title.into());
self
}
pub fn table_of_contents(mut self, on: bool) -> Self {
self.table_of_contents = on;
self
}
pub fn footer(mut self, on: bool) -> Self {
self.footer = on;
self
}
pub fn aliases(mut self, on: bool) -> Self {
self.aliases = on;
self
}
pub fn metadata(mut self, on: bool) -> Self {
self.metadata = on;
self
}
pub fn metadata_field(self, key: impl Into<String>, value: impl Into<String>) -> Self {
self.metadata_field_with_style(key, value, MetadataStyle::Auto)
}
pub fn metadata_field_with_style(
mut self,
key: impl Into<String>,
value: impl Into<String>,
style: MetadataStyle,
) -> Self {
self.metadata_fields.push((key.into(), value.into(), style));
self
}
}