Real-World Data Modeling with Enums

Updated

October 31, 2026

Real-World Data Modeling with Enums

Enums eliminate invalid program states at compile time:

#[derive(Debug)]
enum PaymentMethod {
    CreditCard { number: String, exp: String },
    WireTransfer { iban: String },
    InvoiceNet30 { po_number: u64 },
}

#[derive(Debug)]
struct Order {
    order_id: u64,
    amount_cents: u64,
    payment: PaymentMethod,
}

fn main() {
    let order = Order {
        order_id: 5001,
        amount_cents: 29900,
        payment: PaymentMethod::WireTransfer { iban: String::from("DE89370400440532013000") },
    };
    println!("Recorded order: {:?}", order);
}