create_roblox_project/
discover_author.rs1use std::env;
2use git2::{Config, Repository};
3
4fn get_environment_variable(variables: &[&str]) -> Option<String> {
5 variables.iter().filter_map(|var| env::var(var).ok()).next()
6}
7
8pub fn discover_author() -> Option<(String, Option<String>)> {
9 let cwd = env::current_dir().ok()?;
10 let git_config = if let Ok(repo) = Repository::discover(&cwd) {
11 repo.config()
12 .ok()
13 .or_else(|| Config::open_default().ok())
14 } else {
15 Config::open_default().ok()
16 };
17 let git_config = git_config.as_ref();
18 let name_variables = [
19 "GIT_AUTHOR_NAME",
20 "GIT_COMMITTER_NAME",
21 "USER",
22 "USERNAME",
23 "NAME",
24 ];
25 let name = get_environment_variable(&name_variables[0..2])
26 .or_else(|| git_config.and_then(|g| g.get_string("user.name").ok()))
27 .or_else(|| get_environment_variable(&name_variables[2..]))?;
28
29 let email_variables = [
30 "GIT_AUTHOR_EMAIL",
31 "GIT_COMMITTER_EMAIL",
32 "EMAIL",
33 ];
34 let email = get_environment_variable(&email_variables[0..3])
35 .or_else(|| git_config.and_then(|g| g.get_string("user.email").ok()))
36 .or_else(|| get_environment_variable(&email_variables[3..]));
37
38 let name = name.trim().to_string();
39 let email = email.map(|s| s.trim().to_string());
40
41 Some((name, email))
42}