assumptions/
assumptions.rs

1use derive_wizard::Wizard;
2
3/// This example demonstrates the assumptions feature.
4/// Assumptions are values that are pre-filled and skip the questions entirely,
5/// unlike suggestions which show as defaults but still ask the user.
6#[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    // Scenario 1: Partial assumptions - the most common use case
30    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()) // Fixed: production
35        .assume_field("debug", false) // Fixed: no debug in prod
36        .assume_field("port", 443) // Fixed: HTTPS port
37        .build()
38        .unwrap(); // Will only ask about 'app_name' and 'database_url'
39
40    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    // Scenario 2: Full assumptions - for batch processing
46    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}