Skip to content

Commit c974107

Browse files
authored
Merge pull request #501 from sanders41/refactor-prompts
Refactor prompts
2 parents 55f00fe + d35f20b commit c974107

File tree

1 file changed

+106
-125
lines changed

1 file changed

+106
-125
lines changed

src/project_info.rs

Lines changed: 106 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
211228
fn 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+
221254
fn 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

Comments
 (0)