cargo_newcpp/
lib.rs

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            //file.write_all(value.as_bytes())?;        
79        }
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