assumptions/
assumptions.rs1use derive_wizard::Wizard;
2
3#[derive(Debug, Clone, Wizard)]
7struct DeploymentConfig {
8 #[prompt("Application name:")]
9 app_name: String,
10
11 #[prompt("Environment (dev/staging/prod):")]
12 environment: String,
13
14 #[prompt("Port number:")]
15 #[min(1024)]
16 #[max(65535)]
17 port: i32,
18
19 #[prompt("Enable debug logging:")]
20 debug: bool,
21
22 #[prompt("Database URL:")]
23 database_url: String,
24}
25
26fn main() {
27 println!("=== Deployment Configuration Tool ===");
28
29 println!("--- Scenario 1: Partial Assumptions (Recommended) ---");
31 println!("We'll assume some security-critical values but ask about others.");
32
33 let config = DeploymentConfig::wizard_builder()
34 .assume_field("environment", "production".to_string()) .assume_field("debug", false) .assume_field("port", 443) .build()
38 .unwrap(); println!("=== Configuration (with partial assumptions) ===");
41 println!("{:#?}", config);
42 println!("Notice: Only asked about app_name and database_url!");
43 println!("The fields 'environment', 'debug', and 'port' were assumed.");
44
45 println!("--- Scenario 2: Full Assumptions (for automation) ---");
47 println!("Using a complete template - no questions will be asked.");
48
49 let batch_config = DeploymentConfig::wizard_builder()
50 .assume_field("app_name", "batch-processor".to_string())
51 .assume_field("environment", "production".to_string())
52 .assume_field("port", 8080)
53 .assume_field("debug", false)
54 .assume_field(
55 "database_url",
56 "postgresql://prod-db:5432/batch".to_string(),
57 )
58 .build()
59 .unwrap();
60
61 println!("=== Batch Configuration (all assumed, no questions) ===");
62 println!("{:#?}", batch_config);
63
64 println!("--- Summary ---");
65 println!("Partial assumptions: Fix some fields, ask about others");
66 println!("Full assumptions: Fix all fields, no user interaction");
67 println!("Suggestions: Pre-fill values, but still ask all questions");
68}