1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use crate::prelude::*;

pub struct CliLoader {}

impl JournalLoaderTrait for CliLoader {
    type ConfigSource = PathBuf;
    type DataDriver = FilePersistence;

    fn load(path: Self::ConfigSource) -> Result<(Self::DataDriver, TopicMap, PathBuf)> {
        let config = crate::mdbook::config::load(&path)?;
        let path_root = path
            .parent()
            .with_context(|| format!("invalid path `{}`", path.display()))?
            .join(&config.book.src);
        let topics = crate::mdbook::dto::TopicMapDto::try_from(&config)
            .context("loading topics dto")?
            .try_into()
            .context("converting topics dto")?;
        let persistence = FilePersistence::new(path_root.clone());

        Ok((persistence, topics, path_root))
    }

    fn install(path: Self::ConfigSource) -> Result<()> {
        crate::mdbook::config::install(&path)
    }
}