Skip to main content

typub_markdown/
processing.rs

1//! Markdown post-processing rules.
2//!
3//! These rules are applied after Markdown serialization to handle
4//! platform-specific quirks that cannot be addressed at the AST level.
5
6use enumset::{EnumSet, EnumSetType};
7
8/// Markdown post-processing rules.
9///
10/// Applied after serialization to handle platform-specific editor quirks.
11/// Each rule can be enabled per-platform via the `markdown_processing_rules`
12/// field in `profiles.toml`.
13#[derive(EnumSetType, Debug)]
14pub enum MarkdownProcessingRule {
15    /// No-op placeholder for future extension.
16    Noop,
17}
18
19/// A set of markdown processing rules to apply.
20pub type MarkdownProcessingRules = EnumSet<MarkdownProcessingRule>;
21
22/// Parse markdown processing rules from a string slice array.
23///
24/// Used by build.rs to convert TOML array values to MarkdownProcessingRules.
25/// Unknown rule names are silently ignored.
26pub fn parse_markdown_processing_rules(names: &[&str]) -> MarkdownProcessingRules {
27    let mut rules = MarkdownProcessingRules::empty();
28    for name in names {
29        if *name == "noop" {
30            rules |= MarkdownProcessingRule::Noop;
31        }
32    }
33    rules
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn test_parse_noop() {
42        let rules = parse_markdown_processing_rules(&["noop"]);
43        assert!(rules.contains(MarkdownProcessingRule::Noop));
44    }
45
46    #[test]
47    fn test_parse_unknown_rule() {
48        let rules = parse_markdown_processing_rules(&["unknown_rule"]);
49        assert!(rules.is_empty());
50    }
51}