Skip to main content

ui_cli/shared/
markdown_utils.rs

1pub fn extract_rust_code_from_markdown(markdown: &str) -> Option<String> {
2    let lines: Vec<&str> = markdown.lines().collect();
3    let mut in_rust_block = false;
4    let mut rust_code_lines = Vec::new();
5
6    for line in lines {
7        if line.trim() == "```rust" {
8            in_rust_block = true;
9            continue;
10        }
11
12        if in_rust_block && line.trim() == "```" {
13            break;
14        }
15
16        if in_rust_block {
17            rust_code_lines.push(line);
18        }
19    }
20
21    if rust_code_lines.is_empty() { None } else { Some(rust_code_lines.join("\n")) }
22}
23
24/* ========================================================== */
25/*                        🧪 TESTS 🧪                         */
26/* ========================================================== */
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    #[test]
33    fn returns_none_when_no_rust_block() {
34        assert_eq!(extract_rust_code_from_markdown("just prose\nno code"), None);
35    }
36
37    #[test]
38    fn returns_none_for_empty_input() {
39        assert_eq!(extract_rust_code_from_markdown(""), None);
40    }
41
42    #[test]
43    fn returns_none_for_empty_rust_block() {
44        assert_eq!(extract_rust_code_from_markdown("```rust\n```"), None);
45    }
46
47    #[test]
48    fn extracts_code_from_rust_block() {
49        let md = "# Title\n\n```rust\nfn main() {}\n```\n\nsome prose";
50        assert_eq!(extract_rust_code_from_markdown(md), Some("fn main() {}".to_string()));
51    }
52
53    #[test]
54    fn returns_only_first_rust_block() {
55        let md = "```rust\nfn first() {}\n```\n```rust\nfn second() {}\n```";
56        assert_eq!(extract_rust_code_from_markdown(md), Some("fn first() {}".to_string()));
57    }
58
59    #[test]
60    fn ignores_non_rust_fenced_blocks() {
61        assert_eq!(extract_rust_code_from_markdown("```toml\nkey = \"value\"\n```"), None);
62    }
63
64    #[test]
65    fn preserves_multiline_code() {
66        let md = "```rust\nuse leptos::*;\n\nfn foo() {}\n```";
67        let result = extract_rust_code_from_markdown(md).unwrap();
68        assert!(result.contains("use leptos::*;"));
69        assert!(result.contains("fn foo() {}"));
70    }
71}