@@ -55,6 +55,7 @@ pub enum Template {
5555 Angular ,
5656 Preact ,
5757 PreactTs ,
58+ Blazor ,
5859}
5960
6061impl Default for Template {
@@ -82,6 +83,7 @@ impl Display for Template {
8283 Template :: Angular => write ! ( f, "angular" ) ,
8384 Template :: Preact => write ! ( f, "preact" ) ,
8485 Template :: PreactTs => write ! ( f, "preact-ts" ) ,
86+ Template :: Blazor => write ! ( f, "blazor" ) ,
8587 }
8688 }
8789}
@@ -106,6 +108,7 @@ impl FromStr for Template {
106108 "angular" => Ok ( Template :: Angular ) ,
107109 "preact" => Ok ( Template :: Preact ) ,
108110 "preact-ts" => Ok ( Template :: PreactTs ) ,
111+ "blazor" => Ok ( Template :: Blazor ) ,
109112 _ => Err ( format ! (
110113 "{YELLOW}{s}{RESET} is not a valid template. Valid templates are [{}]" ,
111114 Template :: ALL
@@ -131,6 +134,9 @@ impl Template {
131134 Template :: Sycamore => "Sycamore - (https://sycamore-rs.netlify.app/)" ,
132135 Template :: Angular => "Angular - (https://angular.dev/)" ,
133136 Template :: Preact => "Preact - (https://preactjs.com/)" ,
137+ Template :: Blazor => {
138+ "Blazor - (https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor/)"
139+ }
134140 _ => unreachable ! ( ) ,
135141 }
136142 }
@@ -154,6 +160,7 @@ impl<'a> Template {
154160 Template :: Angular ,
155161 Template :: Preact ,
156162 Template :: PreactTs ,
163+ Template :: Blazor ,
157164 ] ;
158165
159166 pub fn flavors < ' b > ( & self , pkg_manager : PackageManager ) -> Option < & ' b [ Flavor ] > {
@@ -220,6 +227,7 @@ impl<'a> Template {
220227 | Template :: Preact
221228 | Template :: PreactTs => PackageManager :: NODE ,
222229 Template :: Yew | Template :: Leptos | Template :: Sycamore => & [ PackageManager :: Cargo ] ,
230+ Template :: Blazor => & [ PackageManager :: Dotnet ] ,
223231 }
224232 }
225233
@@ -234,6 +242,10 @@ impl<'a> Template {
234242 )
235243 }
236244
245+ pub const fn needs_dotnet ( & self ) -> bool {
246+ matches ! ( self , Template :: Blazor )
247+ }
248+
237249 pub const fn needs_wasm32_target ( & self ) -> bool {
238250 matches ! ( self , Template :: Sycamore | Template :: Yew | Template :: Leptos )
239251 }
@@ -256,13 +268,16 @@ impl<'a> Template {
256268 let manifest = Manifest :: parse ( & manifest_str, mobile) ?;
257269
258270 let lib_name = format ! ( "{}_lib" , package_name. replace( '-' , "_" ) ) ;
271+ let project_name_pascal_case = Self :: transform_to_pascal_case ( project_name. to_string ( ) ) ;
259272
260273 let beta_str = beta. to_string ( ) ;
261274 let manifest_template_data: HashMap < & str , & str > = [
262275 ( "beta" , beta_str. as_str ( ) ) ,
263276 ( "pkg_manager_run_command" , pkg_manager. run_cmd ( ) ) ,
264277 ( "lib_name" , & lib_name) ,
265278 ( "package_name" , package_name) ,
279+ ( "project_name" , project_name) ,
280+ ( "project_name_pascal_case" , & project_name_pascal_case) ,
266281 (
267282 "double_dash_with_space" ,
268283 if pkg_manager == PackageManager :: Npm {
@@ -279,6 +294,10 @@ impl<'a> Template {
279294 ( "beta" , beta_str. clone ( ) ) ,
280295 ( "mobile" , mobile. to_string ( ) ) ,
281296 ( "project_name" , project_name. to_string ( ) ) ,
297+ (
298+ "project_name_pascal_case" ,
299+ project_name_pascal_case. to_string ( ) ,
300+ ) ,
282301 ( "package_name" , package_name. to_string ( ) ) ,
283302 (
284303 "before_dev_command" ,
@@ -376,6 +395,8 @@ impl<'a> Template {
376395 ( data, file_name)
377396 } ;
378397
398+ let file_name = lte:: render ( file_name, template_data) ?;
399+
379400 let parent = p. parent ( ) . unwrap ( ) ;
380401 fs:: create_dir_all ( parent) ?;
381402 fs:: write ( parent. join ( file_name) , file_data) ?;
@@ -423,4 +444,22 @@ impl<'a> Template {
423444
424445 Ok ( ( ) )
425446 }
447+
448+ fn transform_to_pascal_case ( s : String ) -> String {
449+ let mut result = String :: new ( ) ;
450+ let mut capitalize_next = false ;
451+ for ( s, c) in s. chars ( ) . enumerate ( ) {
452+ if s == 0 {
453+ result. push ( c. to_ascii_uppercase ( ) ) ;
454+ } else if capitalize_next {
455+ result. push ( c. to_ascii_uppercase ( ) ) ;
456+ capitalize_next = false ;
457+ } else if [ '_' , '-' ] . contains ( & c) {
458+ capitalize_next = true ;
459+ } else {
460+ result. push ( c) ;
461+ }
462+ }
463+ result
464+ }
426465}
0 commit comments