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}