mdsf/
fttype.rs

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
28
29
30
31
32
use crate::generated;

#[inline]
pub fn get_file_extension(language: &str) -> String {
    let lowercase = language.to_lowercase();

    if let Some(s) = generated::language_to_ext(&lowercase) {
        return s.to_string();
    }

    if let Some(ext) = fallback_file_extension(&lowercase) {
        return ext.to_string();
    }

    if language.starts_with('.') {
        return language.to_string();
    }

    format!(".{language}")
}

#[inline]
fn fallback_file_extension(language: &str) -> Option<&'static str> {
    match language {
        "bean" | "beancount" | "beanhub" => Some(".bean"),
        "htm" => Some(".htm"),
        "hurl" => Some(".hurl"),
        "kcl" => Some(".k"),
        "shtml" | "superhtml" => Some(".shtml"),
        _ => None,
    }
}