wowlab_docgen_cli/context/
features.rs1use serde::Serialize;
2use wowlab_common::markdown;
3
4use crate::RenderCtx;
5
6#[derive(Debug, Serialize)]
8pub(super) struct Feature {
9 pub name: String,
10 pub deps: String,
11}
12
13pub(super) fn gather(ctx: &RenderCtx<'_>) -> Vec<Feature> {
15 ctx.metadata
16 .features
17 .iter()
18 .map(|(name, deps)| Feature {
19 name: name.clone(),
20 deps: format_deps(deps),
21 })
22 .collect()
23}
24
25fn format_deps(deps: &[String]) -> String {
26 if deps.is_empty() {
27 return "\u{2014}".to_string();
28 }
29
30 deps.iter()
31 .map(markdown::code)
32 .collect::<Vec<_>>()
33 .join(", ")
34}
35
36#[cfg(test)]
37mod tests {
38 use googletest::prelude::*;
39
40 use super::*;
41
42 #[gtest]
43 fn format_deps_empty() -> Result<()> {
44 verify_eq!(format_deps(&[]), "\u{2014}")
45 }
46
47 #[gtest]
48 fn format_deps_single() -> Result<()> {
49 let deps = vec!["serde".to_string()];
50
51 verify_eq!(format_deps(&deps), "`serde`")
52 }
53
54 #[gtest]
55 fn format_deps_multiple() -> Result<()> {
56 let deps = vec!["serde".to_string(), "tokio".to_string()];
57
58 verify_eq!(format_deps(&deps), "`serde`, `tokio`")
59 }
60}