Skip to main content

wowlab_docgen_cli/infra/metadata/
parser.rs

1use std::collections::{BTreeMap, BTreeSet};
2
3use wowlab_fs::path::{Path, PathBuf};
4
5use super::{
6    Metadata, PackageKind, WorkspaceCargoDeps, dir_name, try_cargo, try_docgen_toml,
7    try_package_json, try_toc,
8};
9
10pub(crate) fn parse(
11    dir: &Path,
12    files: &BTreeMap<PathBuf, Option<Box<str>>>,
13    directories: &BTreeSet<PathBuf>,
14    workspace_deps: &WorkspaceCargoDeps,
15) -> Metadata {
16    let package_metadata = try_cargo(dir, files, workspace_deps)
17        .or_else(|| try_package_json(dir, files))
18        .or_else(|| try_toc(dir, files));
19
20    package_metadata
21        .or_else(|| try_docgen_toml(dir, files))
22        .unwrap_or_else(|| Metadata {
23            name: dir_name(dir),
24            kind: if directories.contains(dir) {
25                PackageKind::Directory
26            } else {
27                PackageKind::Unknown
28            },
29            ..Default::default()
30        })
31}