util/
new.rs

1use error::{YabsError, YabsErrorKind};
2
3use std::fs;
4use std::io::Write;
5use std::path::{Path, PathBuf};
6
7pub fn new_project(name: &str, lib: bool) -> Result<(), YabsError> {
8    let dir = Path::new(name);
9    if dir.exists() {
10        bail!(YabsErrorKind::DirExists(dir.to_path_buf()));
11    }
12    fs::create_dir_all(dir)?;
13    fs::create_dir_all(dir.join("src"))?;
14    if lib {
15        create_bin_files(&dir.to_path_buf(), name)?;
16    }
17    Ok(create_bin_files(&dir.to_path_buf(), name)?)
18}
19
20pub fn create_bin_files(path: &PathBuf, name: &str) -> Result<(), YabsError> {
21    fs::File::create(path.join(format!("{}.toml", name)))
22        .and_then(|mut file| {
23            Ok(file.write_all(format!("[project]\n\
24                name = \"{0}\"\n\
25                version = \"0.0.1\"\n\
26                target = [\"{0}\"]\n\
27                file-extensions = [\"cpp\"]\n\
28                compiler = \"g++\"\n\
29                compiler-flags = []\n\
30                src = [\n\
31                \t\"src/main.cpp\"\n\
32                ]\n\
33                libraries = []\n\
34                library-directories = []\n\
35                include = []\n\
36                linker-flags = []\n\
37                ignore = []\n\
38                before-script = []\n\
39                after-script = []\n\n\
40                [[bin]]\n\
41                name = \"{0}\"\n\
42                path = \"./src/main.cpp\"
43                ",
44                                      name)
45                                  .as_bytes())?)
46        })?;
47    fs::File::create(path.join("src/main.cpp"))
48        .and_then(|mut src| {
49                      Ok(src.write_all(b"#include <iostream>\n\n\
50            int main() {\n\
51            \treturn 0;\n\
52            }")?)
53                  })?;
54    Ok(())
55}