sourceatlas 0.2.2

Analyze source code repositories and generate project statistics
use std::{fmt, path::Path};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Language {
    Rust,
    Go,
    CSharp,
    CPlusPlus,
    C,
    Java,
    JavaScript,
}

impl Language {
    pub fn from_path(path: &Path) -> Option<Self> {
        match path.extension().and_then(|e| e.to_str()) {
            Some("rs") => Some(Language::Rust),
            Some("go") => Some(Language::Go),
            Some("js") => Some(Language::JavaScript),
            Some("c") => Some(Language::C),
            Some("cs") => Some(Language::CSharp),
            Some("cpp") => Some(Language::CPlusPlus),
            Some("java") => Some(Language::Java),
            _ => None,
        }
    }
}

impl fmt::Display for Language {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Language::Rust => write!(f, "Rust"),
            Language::Go => write!(f, "Go"),
            Language::CSharp => write!(f, "C#"),
            Language::CPlusPlus => write!(f, "C++"),
            Language::C => write!(f, "C"),
            Language::Java => write!(f, "Java"),
            Language::JavaScript => write!(f, "JavaScript"),
        }
    }
}