@@ -208,6 +208,23 @@ fn boolean_prompt(
208208 }
209209}
210210
211+ fn default_or_prompt_bool (
212+ prompt_text : String ,
213+ selected_default : Option < bool > ,
214+ default : bool ,
215+ use_defaults : bool ,
216+ ) -> Result < bool > {
217+ if use_defaults {
218+ if let Some ( d) = selected_default {
219+ return Ok ( d) ;
220+ }
221+ }
222+
223+ let result = boolean_prompt ( prompt_text, selected_default, default) ?;
224+
225+ Ok ( result)
226+ }
227+
211228fn string_prompt ( prompt_text : String , default : Option < String > ) -> Result < String > {
212229 let prompt = Prompt {
213230 prompt_text,
@@ -218,6 +235,22 @@ fn string_prompt(prompt_text: String, default: Option<String>) -> Result<String>
218235 Ok ( value)
219236}
220237
238+ fn default_or_prompt_string (
239+ prompt_text : String ,
240+ default : Option < String > ,
241+ use_defaults : bool ,
242+ ) -> Result < String > {
243+ if use_defaults {
244+ if let Some ( d) = default {
245+ return Ok ( d) ;
246+ }
247+ }
248+
249+ let result = string_prompt ( prompt_text, default) ?;
250+
251+ Ok ( result)
252+ }
253+
221254fn dependabot_day_prompt ( default : Option < Day > ) -> Result < Option < Day > > {
222255 let default_str = match default {
223256 Some ( s) => match s {
@@ -380,65 +413,52 @@ pub fn get_project_info(use_defaults: bool) -> Result<ProjectInfo> {
380413 let config = Config :: load_config ( ) ;
381414 let project_name = string_prompt ( "Project Name" . to_string ( ) , None ) ?;
382415 let project_slug_default = project_name. replace ( ' ' , "-" ) . to_lowercase ( ) ;
383- let project_slug = if use_defaults {
384- project_slug_default
385- } else {
386- string_prompt ( "Project Slug" . to_string ( ) , Some ( project_slug_default ) ) ?
387- } ;
416+ let project_slug = default_or_prompt_string (
417+ "Project Slug" . to_string ( ) ,
418+ Some ( project_slug_default ) ,
419+ use_defaults ,
420+ ) ? ;
388421
389422 if Path :: new ( & project_slug) . exists ( ) {
390423 bail ! ( format!( "The {project_slug} directory already exists" ) ) ;
391424 }
392425
393426 let source_dir_default = project_name. replace ( [ ' ' , '-' ] , "_" ) . to_lowercase ( ) ;
394- let source_dir = if use_defaults {
395- source_dir_default
396- } else {
397- string_prompt ( "Source Directory" . to_string ( ) , Some ( source_dir_default ) ) ?
398- } ;
427+ let source_dir = default_or_prompt_string (
428+ "Source Directory" . to_string ( ) ,
429+ Some ( source_dir_default ) ,
430+ use_defaults ,
431+ ) ? ;
399432 let project_description = string_prompt ( "Project Description" . to_string ( ) , None ) ?;
400-
401- let creator = if use_defaults && config. creator . is_some ( ) {
402- config. creator . unwrap ( )
403- } else {
404- string_prompt ( "Creator" . to_string ( ) , config. creator ) ?
405- } ;
406-
407- let creator_email = if use_defaults && config. creator_email . is_some ( ) {
408- config. creator_email . unwrap ( )
409- } else {
410- string_prompt ( "Creator Email" . to_string ( ) , config. creator_email ) ?
411- } ;
412-
433+ let creator = default_or_prompt_string ( "Creator" . to_string ( ) , config. creator , use_defaults) ?;
434+ let creator_email = default_or_prompt_string (
435+ "Creator Email" . to_string ( ) ,
436+ config. creator_email ,
437+ use_defaults,
438+ ) ?;
413439 let license = if use_defaults {
414- if let Some ( l) = config. license {
415- l
416- } else {
417- LicenseType :: Mit
418- }
440+ config. license . unwrap_or ( LicenseType :: Mit )
419441 } else {
420442 license_prompt ( config. license ) ?
421443 } ;
422-
423- let mut copyright_year: Option < String > = None ;
424- if let LicenseType :: Mit = license {
444+ let copyright_year = if let LicenseType :: Mit = license {
425445 if let Ok ( now) = OffsetDateTime :: now_local ( ) {
426446 if use_defaults {
427- copyright_year = Some ( now. year ( ) . to_string ( ) ) ;
447+ Some ( now. year ( ) . to_string ( ) )
428448 } else {
429449 let result = copyright_year_prompt ( & license, Some ( now. year ( ) . to_string ( ) ) ) ?;
430- copyright_year = Some ( result) ;
450+ Some ( result)
431451 }
452+ } else {
453+ None
432454 }
433- }
434-
435- let default_version = "0.1.0" . to_string ( ) ;
436- let version = if use_defaults {
437- default_version
438455 } else {
439- string_prompt ( "Version" . to_string ( ) , Some ( default_version ) ) ?
456+ None
440457 } ;
441458
459+ let default_version = "0.1.0" . to_string ( ) ;
460+ let version =
461+ default_or_prompt_string ( "Version" . to_string ( ) , Some ( default_version) , use_defaults) ?;
442462 let python_version_default = match config. python_version {
443463 Some ( python) => python,
444464 None => "3.12" . to_string ( ) ,
@@ -495,36 +515,25 @@ pub fn get_project_info(use_defaults: bool) -> Result<ProjectInfo> {
495515 } ;
496516
497517 let project_manager = if use_defaults {
498- if let Some ( manager) = config. project_manager {
499- manager
500- } else {
501- ProjectManager :: Poetry
502- }
518+ config. project_manager . unwrap_or ( ProjectManager :: Poetry )
503519 } else {
504520 let default = config. project_manager . unwrap_or ( ProjectManager :: Poetry ) ;
505521 project_manager_prompt ( Some ( default) ) ?
506522 } ;
507523
508- let is_application = if use_defaults {
509- config. is_application . unwrap_or ( true )
510- } else {
511- boolean_prompt (
512- "Application or Library\n 1 - Application\n 2 - Library\n Choose from [1, 2]"
513- . to_string ( ) ,
514- config. is_application ,
515- true ,
516- ) ?
517- } ;
518-
519- let is_async_project = if use_defaults {
520- config. is_async_project . unwrap_or ( false )
521- } else {
522- boolean_prompt (
523- "Async Project\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
524- config. is_async_project ,
525- false ,
526- ) ?
527- } ;
524+ let is_application = default_or_prompt_bool (
525+ "Application or Library\n 1 - Application\n 2 - Library\n Choose from [1, 2]"
526+ . to_string ( ) ,
527+ config. is_application ,
528+ true ,
529+ use_defaults,
530+ ) ?;
531+ let is_async_project = default_or_prompt_bool (
532+ "Async Project\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
533+ config. is_async_project ,
534+ false ,
535+ use_defaults,
536+ ) ?;
528537
529538 let max_line_length = if use_defaults {
530539 config. max_line_length . unwrap_or ( 100 )
@@ -544,77 +553,49 @@ pub fn get_project_info(use_defaults: bool) -> Result<ProjectInfo> {
544553
545554 let dependabot_schedule = if use_dependabot {
546555 if use_defaults {
547- if let Some ( schedule ) = config . dependabot_schedule {
548- Some ( schedule )
549- } else {
550- Some ( DependabotSchedule :: Daily )
551- }
556+ Some (
557+ config
558+ . dependabot_schedule
559+ . unwrap_or ( DependabotSchedule :: Daily ) ,
560+ )
552561 } else {
553562 dependabot_schedule_prompt ( Some ( DependabotSchedule :: Daily ) ) ?
554563 }
555564 } else {
556565 None
557566 } ;
558567
559- let dependabot_day = if use_dependabot {
560- if use_defaults {
561- if use_defaults {
562- if let Some ( default) = config. dependabot_day {
563- Some ( default)
564- } else {
565- Some ( Day :: Monday )
566- }
567- } else {
568- None
569- }
570- } else if let Some ( DependabotSchedule :: Weekly ) = & dependabot_schedule {
571- dependabot_day_prompt ( Some ( Day :: Monday ) ) ?
572- } else {
573- None
574- }
568+ let dependabot_day = if use_dependabot && use_defaults {
569+ Some ( config. dependabot_day . unwrap_or ( Day :: Monday ) )
570+ } else if let Some ( DependabotSchedule :: Weekly ) = & dependabot_schedule {
571+ dependabot_day_prompt ( Some ( Day :: Monday ) ) ?
575572 } else {
576573 None
577574 } ;
578-
579- let use_continuous_deployment = if use_defaults {
580- config. use_continuous_deployment . unwrap_or ( true )
581- } else {
582- boolean_prompt (
583- "Use Continuous Deployment\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
584- config. use_continuous_deployment ,
585- true ,
586- ) ?
587- } ;
588-
589- let use_release_drafter = if use_defaults {
590- config. use_release_drafter . unwrap_or ( true )
591- } else {
592- boolean_prompt (
593- "Use Release Drafter\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
594- config. use_release_drafter ,
595- true ,
596- ) ?
597- } ;
598-
599- let use_multi_os_ci = if use_defaults {
600- config. use_multi_os_ci . unwrap_or ( true )
601- } else {
602- boolean_prompt (
603- "Use Multi OS CI\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
604- config. use_multi_os_ci ,
605- true ,
606- ) ?
607- } ;
608-
609- let include_docs = if use_defaults {
610- config. include_docs . unwrap_or ( false )
611- } else {
612- boolean_prompt (
613- "Include Docs\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
614- config. include_docs ,
615- false ,
616- ) ?
617- } ;
575+ let use_continuous_deployment = default_or_prompt_bool (
576+ "Use Continuous Deployment\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
577+ config. use_continuous_deployment ,
578+ true ,
579+ use_defaults,
580+ ) ?;
581+ let use_release_drafter = default_or_prompt_bool (
582+ "Use Release Drafter\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
583+ config. use_release_drafter ,
584+ true ,
585+ use_defaults,
586+ ) ?;
587+ let use_multi_os_ci = default_or_prompt_bool (
588+ "Use Multi OS CI\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
589+ config. use_multi_os_ci ,
590+ true ,
591+ use_defaults,
592+ ) ?;
593+ let include_docs = default_or_prompt_bool (
594+ "Include Docs\n 1 - Yes\n 2 - No\n Choose from [1, 2]" . to_string ( ) ,
595+ config. include_docs ,
596+ false ,
597+ use_defaults,
598+ ) ?;
618599
619600 let docs_info = if include_docs {
620601 let site_name = string_prompt ( "Docs Site Name" . to_string ( ) , None ) ?;
0 commit comments