11extern crate regex;
22
3+ use std:: {
4+ fs:: { self , File } , io:: Write , process
5+ } ;
6+
37use askama:: Template ;
48use regex:: Regex ;
5- use std:: fs:: { self , File } ;
6- use std:: io:: Write ;
7- use std:: process;
89
910#[ derive( Template ) ]
1011#[ template( path = ".gitignore" , escape = "none" ) ]
1112struct GitIgnore { }
1213
14+ #[ derive( Template ) ]
15+ #[ template( path = ".vscode/settings.json" , escape = "none" ) ]
16+ struct VSCodeSettings { }
17+
18+ #[ derive( Template ) ]
19+ #[ template( path = ".vscode/extensions.json" , escape = "none" ) ]
20+ struct VSCodeExtensions { }
21+
1322#[ derive( Template ) ]
1423#[ template( path = "Makefile" , escape = "none" ) ]
1524struct Makefile { }
@@ -57,55 +66,74 @@ pub fn setup_preset(mut preset: String, name: String, create: bool) {
5766 prefix = format ! ( "./{}" , name)
5867 }
5968
69+ // Create needed dirs
6070 let _ = fs:: create_dir_all ( format ! ( "{}/.cpa" , prefix) ) ;
71+ let _ = fs:: create_dir_all ( format ! ( "{}/.vscode" , prefix) ) ;
72+ let _ = fs:: create_dir_all ( format ! ( "{}/.github/workflows" , prefix) ) ;
6173
6274 // Render Github Actions CI
63- let _ = fs:: create_dir_all ( format ! ( "{}/.github/workflows" , prefix) ) ;
6475 File :: create ( format ! ( "{}/.github/workflows/ci.yaml" , prefix) )
65- . and_then ( |mut file| file. write_all ( GHWorkflowCI { } . render ( ) . expect ( "Failed to render ci.yaml" ) . as_bytes ( ) ) )
66- . expect ( "Failed to create or write to ci.yaml" ) ;
76+ . and_then ( |mut file| file. write_all ( GHWorkflowCI { } . render ( ) . expect ( "Render fail: ci.yaml" ) . as_bytes ( ) ) )
77+ . expect ( "Write fail: ci.yaml" ) ;
78+
79+ // Render .vscode/settings.json
80+ File :: create ( format ! ( "{}/.vscode/settings.json" , prefix) )
81+ . and_then ( |mut file| file. write_all ( VSCodeSettings { } . render ( ) . expect ( "Render fail: .vscode/settings.json" ) . as_bytes ( ) ) )
82+ . expect ( "Write fail: .vscode/settings.json" ) ;
83+
84+ // Render .vscode/extensions.json
85+ File :: create ( format ! ( "{}/.vscode/extensions.json" , prefix) )
86+ . and_then ( |mut file| {
87+ file. write_all (
88+ VSCodeExtensions { }
89+ . render ( )
90+ . expect ( "Render fail: .vscode/extensions.json" )
91+ . as_bytes ( ) ,
92+ )
93+ } )
94+ . expect ( "Write fail: .vscode/extensions.json" ) ;
6795
6896 // Render .gitignore
6997 File :: create ( format ! ( "{}/.gitignore" , prefix) )
70- . and_then ( |mut file| file. write_all ( GitIgnore { } . render ( ) . expect ( "Failed to render .gitignore" ) . as_bytes ( ) ) )
71- . expect ( "Failed to create or write to .gitignore" ) ;
98+ . and_then ( |mut file| file. write_all ( GitIgnore { } . render ( ) . expect ( "Render fail: .gitignore" ) . as_bytes ( ) ) )
99+ . expect ( "Write fail: .gitignore" ) ;
72100
73101 // Render Makefile
74102 File :: create ( format ! ( "{}/Makefile" , prefix) )
75- . and_then ( |mut file| file. write_all ( Makefile { } . render ( ) . expect ( "Failed to render Makefile" ) . as_bytes ( ) ) )
76- . expect ( "Failed to create or write to Makefile" ) ;
103+ . and_then ( |mut file| file. write_all ( Makefile { } . render ( ) . expect ( "Render fail: Makefile" ) . as_bytes ( ) ) )
104+ . expect ( "Write fail: Makefile" ) ;
77105
78106 // Render Dockerfile
79107 File :: create ( format ! ( "{}/Dockerfile" , prefix) )
80- . and_then ( |mut file| file. write_all ( Dockerfile { } . render ( ) . expect ( "Failed to render Dockerfile" ) . as_bytes ( ) ) )
81- . expect ( "Failed to create or write to Dockerfile" ) ;
108+ . and_then ( |mut file| file. write_all ( Dockerfile { } . render ( ) . expect ( "Render fail: Dockerfile" ) . as_bytes ( ) ) )
109+ . expect ( "Write fail: Dockerfile" ) ;
82110
83111 // Render main.py
84112 File :: create ( format ! ( "{}/main.py" , prefix) )
85113 . and_then ( |mut file| file. write_all ( MainPy { } . render ( ) . expect ( "Render fail" ) . as_bytes ( ) ) )
86- . expect ( "Failed to render or write to main.py" ) ;
114+ . expect ( "Render fail: main.py" ) ;
87115
88116 // Render pre-commit conf
89117 File :: create ( format ! ( "{}/.pre-commit-config.yaml" , prefix) )
90118 . and_then ( |mut file| {
91119 file. write_all (
92120 PreCommitConfig { python : true }
93121 . render ( )
94- . expect ( "Failed to render .pre-commit-config.yaml" )
122+ . expect ( "Render fail: .pre-commit-config.yaml" )
95123 . as_bytes ( ) ,
96124 )
97125 } )
98- . expect ( "Failed to create or write to .pre-commit-config.yaml" ) ;
126+ . expect ( "Write fail: .pre-commit-config.yaml" ) ;
99127
100128 // Render Flake8 conf
101129 File :: create ( format ! ( "{}/.cpa/flake8.cfg" , prefix) )
102- . and_then ( |mut file| file. write_all ( Flake8 { } . render ( ) . expect ( "Failed to render flake8.cfg" ) . as_bytes ( ) ) )
103- . expect ( "Failed to create or write to flake8.cfg" ) ;
130+ . and_then ( |mut file| file. write_all ( Flake8 { } . render ( ) . expect ( "Render fail: flake8.cfg" ) . as_bytes ( ) ) )
131+ . expect ( "Write fail: flake8.cfg" ) ;
104132
105133 // Render Prettier conf
106134 File :: create ( format ! ( "{}/.cpa/prettier.json" , prefix) )
107- . and_then ( |mut file| file. write_all ( Prettier { } . render ( ) . expect ( "Failed to render prettier.json" ) . as_bytes ( ) ) )
108- . expect ( "Failed to create or write to prettier.json" ) ;
135+ . and_then ( |mut file| file. write_all ( Prettier { } . render ( ) . expect ( "Render fail: prettier.json" ) . as_bytes ( ) ) )
136+ . expect ( "Write fail: prettier.json" ) ;
109137
110138 // Render Poetry conf
111139 let re = Regex :: new ( r"python(3\.\d+|4\.\d+)" ) . unwrap ( ) ;
@@ -124,8 +152,6 @@ pub fn setup_preset(mut preset: String, name: String, create: bool) {
124152 } ;
125153 let out_pyproj: String = pyproj. render ( ) . expect ( "Failed to render" ) ;
126154 let mut f_pyproj = File :: create ( format ! ( "{}/pyproject.toml" , prefix) ) . expect ( "Could not create file" ) ;
127- f_pyproj
128- . write_all ( out_pyproj. as_bytes ( ) )
129- . expect ( "Could not write to file" ) ;
155+ f_pyproj. write_all ( out_pyproj. as_bytes ( ) ) . expect ( "Could not write to file" ) ;
130156 println ! ( "Project created at: {}" , prefix)
131157}
0 commit comments