Skip to main content

prosesmasher_adapters_outbound_fs/
lib.rs

1//! Filesystem adapter — `FileReader` and `ConfigLoader` implementations.
2
3mod config_dto;
4pub mod config_loader;
5pub mod file_reader;
6
7pub use config_loader::FsConfigLoader;
8pub use file_reader::FsFileReader;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub struct PresetInfo {
12    pub name: &'static str,
13    pub description: &'static str,
14}
15
16const PRESETS: &[PresetInfo] = &[
17    PresetInfo {
18        name: "general-en",
19        description: "Baseline quality defaults with no document-shape policy.",
20    },
21    PresetInfo {
22        name: "article-en",
23        description: "Standard article structure with heading policy.",
24    },
25    PresetInfo {
26        name: "substack-en",
27        description: "Longer, looser newsletter/article structure.",
28    },
29    PresetInfo {
30        name: "email-en",
31        description: "Short prose body with no heading policy.",
32    },
33    PresetInfo {
34        name: "tweet-en",
35        description: "Very short prose body with no heading policy.",
36    },
37];
38
39#[must_use]
40pub const fn shipped_presets() -> &'static [PresetInfo] {
41    PRESETS
42}
43
44#[must_use]
45pub fn preset_contents(name: &str) -> Option<&'static str> {
46    match name {
47        "general-en" => Some(include_str!("../presets/general-en.json")),
48        "article-en" => Some(include_str!("../presets/article-en.json")),
49        "substack-en" => Some(include_str!("../presets/substack-en.json")),
50        "email-en" => Some(include_str!("../presets/email-en.json")),
51        "tweet-en" => Some(include_str!("../presets/tweet-en.json")),
52        _ => None,
53    }
54}
55
56#[must_use]
57pub const fn full_config_contents() -> &'static str {
58    include_str!("../presets/full-config-en.json")
59}