1use std::fs;
2use std::fs::File;
3use std::io::prelude::*;
4
5mod cpp_scafolding;
6mod cmake;
7mod readme;
8pub mod command_helper;
9
10pub use cpp_scafolding::*;
11pub use std::error::Error;
12
13pub fn make_project_dir(project_dir: &str) -> std::io::Result<()> {
14 fs::create_dir(project_dir)?;
15 Ok(())
16}
17
18pub fn make_defaults(project_dir: &str, is_library: bool) -> Result<(),Box<dyn Error>> {
19
20 if is_library{
21 make_default_files(project_dir, FileTypes::Library )?;
22
23 let lib_template = include_str!("../templates/fs/CMakeLists.txt.lib.in");
24 let cmake_template = cmake::get_cmake(project_dir, lib_template)?;
25 make_default_files(project_dir, FileTypes::Cmake(&cmake_template) )?;
26
27 }else{
28 make_default_files(project_dir, FileTypes::Main )?;
29
30 let exe_template = include_str!("../templates/fs/CMakeLists.txt.exe.in");
31 let cmake_template = cmake::get_cmake(project_dir, exe_template)?;
32 make_default_files(project_dir, FileTypes::Cmake(&cmake_template) )?;
33 }
34
35 make_default_files(project_dir, FileTypes::Header )?;
36 make_default_files(project_dir, FileTypes::GitIgnore)?;
37
38 let template_readme = include_str!("../templates/fs/README.md.in");
39 let readme_template = readme::get_readme(project_dir, template_readme)?;
40 make_default_files(project_dir, FileTypes::ReadMe(&readme_template) )?;
41
42 make_default_files(project_dir, FileTypes::UnitTestExample )?;
43 make_default_files(project_dir, FileTypes::CmakeTest )?;
44
45 Ok(())
46}
47
48fn make_default_files(project_dir: &str, filetype: FileTypes ) -> std::io::Result<()> {
49 match filetype {
50 FileTypes::Main => {
51 let mut file = File::create(project_dir.to_owned() + "/src/main.cpp")?;
52 let template = include_str!("../templates/fs/src/main.cpp.in");
53 file.write_all(template.as_bytes())?;
54
55 }
56
57 FileTypes::Library => {
58 let mut file = File::create(project_dir.to_owned() + "/src/mylibrary.cpp")?;
59 let template = include_str!("../templates/fs/src/mylibrary.cpp.in");
60 file.write_all(template.as_bytes())?;
61
62 }
63 FileTypes::Header => {
64 let mut file = File::create(project_dir.to_owned() + "/include/dummy.hpp")?;
65 let template = include_str!("../templates/fs/include/dummy.hpp.in");
66 file.write_all(template.as_bytes())?;
67
68 }
69 FileTypes::Cmake(value) => {
70 let mut file = File::create(project_dir.to_owned() + "/CMakeLists.txt")?;
71 file.write_all(value.as_bytes())?;
72
73 }
74 FileTypes::CmakeTest => {
75 let mut file = File::create(project_dir.to_owned() + "/tests/CMakeLists.txt")?;
76 let template = include_str!("../templates/fs/test/CMakeGTest.make.in");
77 file.write_all(template.as_bytes())?;
78 }
80
81 FileTypes::UnitTestExample => {
82 let mut file = File::create(project_dir.to_owned() + "/tests/example_test.cpp")?;
83 let template = include_str!("../templates/fs/test/example_test.cpp.in");
84 file.write_all(template.as_bytes())?;
85 }
86 FileTypes::GitIgnore => {
87 let mut file = File::create(project_dir.to_owned() + "/.gitignore")?;
88 let template = include_str!("../templates/fs/gitignore.in");
89 file.write_all(template.as_bytes())?;
90 }
91 FileTypes::ReadMe(value) => {
92 let mut file = File::create(project_dir.to_owned() + "/README.md")?;
93 file.write_all(value.as_bytes())?;
94 }
95
96 }
97
98 Ok(())
99}
100
101pub enum FileTypes<'a>{
102 Main,
103 Library,
104 Header,
105 Cmake(&'a str),
106 CmakeTest,
107 GitIgnore,
108 UnitTestExample,
109 ReadMe(&'a str),
110}
111