@@ -13,8 +13,27 @@ use std::{
13
13
const SAILS_VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
14
14
15
15
#[ derive( Template ) ]
16
- #[ template( path = "app/build.askama" ) ]
17
- struct AppBuild ;
16
+ #[ template( path = "build.askama" ) ]
17
+ struct RootBuild {
18
+ app_crate_name : String ,
19
+ program_struct_name : String ,
20
+ }
21
+
22
+ #[ derive( Template ) ]
23
+ #[ template( path = "src/lib.askama" ) ]
24
+ struct RootLib {
25
+ app_crate_name : String ,
26
+ }
27
+
28
+ #[ derive( Template ) ]
29
+ #[ template( path = "readme.askama" ) ]
30
+ struct Readme {
31
+ program_crate_name : String ,
32
+ app_crate_name : String ,
33
+ client_crate_name : String ,
34
+ service_name : String ,
35
+ app : bool ,
36
+ }
18
37
19
38
#[ derive( Template ) ]
20
39
#[ template( path = "app/src/lib.askama" ) ]
@@ -27,7 +46,7 @@ struct AppLib {
27
46
#[ derive( Template ) ]
28
47
#[ template( path = "client/build.askama" ) ]
29
48
struct ClientBuild {
30
- program_crate_name : String ,
49
+ app_crate_name : String ,
31
50
program_struct_name : String ,
32
51
}
33
52
@@ -81,8 +100,27 @@ impl ProgramGenerator {
81
100
}
82
101
}
83
102
84
- fn app_build ( & self ) -> AppBuild {
85
- AppBuild
103
+ fn root_build ( & self ) -> RootBuild {
104
+ RootBuild {
105
+ app_crate_name : self . app_name ( ) . to_case ( Case :: Snake ) ,
106
+ program_struct_name : "Program" . to_string ( ) ,
107
+ }
108
+ }
109
+
110
+ fn root_lib ( & self ) -> RootLib {
111
+ RootLib {
112
+ app_crate_name : self . app_name ( ) . to_case ( Case :: Snake ) ,
113
+ }
114
+ }
115
+
116
+ fn root_readme ( & self ) -> Readme {
117
+ Readme {
118
+ program_crate_name : self . package_name . to_owned ( ) ,
119
+ app_crate_name : self . app_name ( ) ,
120
+ client_crate_name : self . client_name ( ) ,
121
+ service_name : "Service" . to_string ( ) ,
122
+ app : self . app ,
123
+ }
86
124
}
87
125
88
126
fn app_lib ( & self ) -> AppLib {
@@ -95,7 +133,7 @@ impl ProgramGenerator {
95
133
96
134
fn client_build ( & self ) -> ClientBuild {
97
135
ClientBuild {
98
- program_crate_name : self . app_name ( ) . to_case ( Case :: Snake ) ,
136
+ app_crate_name : self . app_name ( ) . to_case ( Case :: Snake ) ,
99
137
program_struct_name : "Program" . to_string ( ) ,
100
138
}
101
139
}
@@ -108,7 +146,7 @@ impl ProgramGenerator {
108
146
109
147
fn tests_gtest ( & self ) -> TestsGtest {
110
148
TestsGtest {
111
- program_crate_name : self . app_name ( ) . to_case ( Case :: Snake ) ,
149
+ program_crate_name : self . package_name . to_case ( Case :: Snake ) ,
112
150
client_crate_name : self . client_name ( ) . to_case ( Case :: Snake ) ,
113
151
client_program_name : self . client_name ( ) . to_case ( Case :: Pascal ) ,
114
152
service_name : "Service" . to_string ( ) ,
@@ -172,6 +210,7 @@ impl ProgramGenerator {
172
210
self . generate_root ( ) ?;
173
211
self . generate_app ( ) ?;
174
212
self . generate_client ( ) ?;
213
+ self . generate_build ( ) ?;
175
214
self . generate_tests ( ) ?;
176
215
}
177
216
self . fmt ( ) ?;
@@ -185,10 +224,6 @@ impl ProgramGenerator {
185
224
186
225
// add sails-rs refs
187
226
self . cargo_add_sails_rs ( manifest_path, Normal , None ) ?;
188
- self . cargo_add_sails_rs ( manifest_path, Build , Some ( "wasm-builder" ) ) ?;
189
-
190
- let mut build_rs = File :: create ( build_rs_path ( path) ) ?;
191
- self . app_build ( ) . write_into ( & mut build_rs) ?;
192
227
193
228
let mut lib_rs = File :: create ( lib_rs_path ( path) ) ?;
194
229
self . app_lib ( ) . write_into ( & mut lib_rs) ?;
@@ -200,7 +235,31 @@ impl ProgramGenerator {
200
235
let path = & self . path ;
201
236
cargo_new ( path, & self . package_name , self . offline ) ?;
202
237
203
- cargo_toml_create_workspace ( manifest_path ( path) ) ?;
238
+ let manifest_path = & manifest_path ( path) ;
239
+ cargo_toml_create_workspace ( manifest_path) ?;
240
+
241
+ let mut readme_md = File :: create ( readme_path ( path) ) ?;
242
+ self . root_readme ( ) . write_into ( & mut readme_md) ?;
243
+
244
+ Ok ( ( ) )
245
+ }
246
+
247
+ fn generate_build ( & self ) -> anyhow:: Result < ( ) > {
248
+ let path = & self . path ;
249
+ let manifest_path = & manifest_path ( path) ;
250
+
251
+ let mut lib_rs = File :: create ( lib_rs_path ( path) ) ?;
252
+ self . root_lib ( ) . write_into ( & mut lib_rs) ?;
253
+
254
+ let mut build_rs = File :: create ( build_rs_path ( path) ) ?;
255
+ self . root_build ( ) . write_into ( & mut build_rs) ?;
256
+
257
+ // add app ref
258
+ cargo_add_by_path ( manifest_path, self . app_path ( ) , Normal , None , self . offline ) ?;
259
+ cargo_add_by_path ( manifest_path, self . app_path ( ) , Build , None , self . offline ) ?;
260
+ // add sails-rs refs
261
+ self . cargo_add_sails_rs ( manifest_path, Normal , None ) ?;
262
+ self . cargo_add_sails_rs ( manifest_path, Build , Some ( "build" ) ) ?;
204
263
205
264
Ok ( ( ) )
206
265
}
@@ -258,9 +317,6 @@ impl ProgramGenerator {
258
317
self . offline ,
259
318
) ?;
260
319
261
- // delete ./src folder
262
- fs:: remove_dir_all ( src_path ( path) ) ?;
263
-
264
320
// add tests
265
321
let test_path = & tests_path ( path) ;
266
322
fs:: create_dir_all ( test_path. parent ( ) . context ( "Parent should exists" ) ?) ?;
@@ -413,10 +469,6 @@ fn build_rs_path<P: AsRef<Path>>(path: P) -> PathBuf {
413
469
path. as_ref ( ) . join ( "build.rs" )
414
470
}
415
471
416
- fn src_path < P : AsRef < Path > > ( path : P ) -> PathBuf {
417
- path. as_ref ( ) . join ( "src" )
418
- }
419
-
420
472
fn lib_rs_path < P : AsRef < Path > > ( path : P ) -> PathBuf {
421
473
path. as_ref ( ) . join ( "src/lib.rs" )
422
474
}
@@ -425,6 +477,10 @@ fn tests_path<P: AsRef<Path>>(path: P) -> PathBuf {
425
477
path. as_ref ( ) . join ( "tests/gtest.rs" )
426
478
}
427
479
480
+ fn readme_path < P : AsRef < Path > > ( path : P ) -> PathBuf {
481
+ path. as_ref ( ) . join ( "README.md" )
482
+ }
483
+
428
484
fn cargo_command ( ) -> String {
429
485
std:: env:: var ( "CARGO" ) . unwrap_or ( "cargo" . into ( ) )
430
486
}
0 commit comments