Enum is a data type with mutiple possible variants. To declare an enum, write enum and use a code block with the options, separated by commas. These options are called as variants.

Define Enum

#[derive(Debug)]

enum PaymentStatus{
    Succeeded,
    Processing,
    Fail,    
}

Main Block

fn main() {
 
    let payment_status = PaymentStatus::Processing;
    println!("Enum - {:?}", payment_status);
}

Output

Enum - Processing

Match Operator

Match operator compares a value to the series patterns to determine which code to execute.

fn main() {
     let payment_status = PaymentStatus::Processing;
    println!("Enum - {:?}", payment_status);

    //let status = {};
    match payment_status{
        PaymentStatus::Succeeded => println!("Payment compelte." ),
        PaymentStatus::Processing => println!("Payment processing."),
        PaymentStatus::Fail => println!("Payment failed! Please try again!"),        
    }    
}

Output

Enum - Processing
Payment processing.

Enum Methods

Enum methods are plaved in the enum implementation i.e. imp <<Enum>>

Here we use wild card case ie. _ or the default match case.

Similar to a switch statement, Match operator compares a given value to a series of patterns to determine which code to execute.

impl PaymentStatus {
    fn after_payment_action(&self) -> &str{
        match *self {
            PaymentStatus::Succeeded => "UpdateERP",
            PaymentStatus::Processing => "Wait",
            PaymentStatus::Fail => "Block",
            _ => "NoChange"
        }
    }    
}

fn main() {
 
    let payment_status = PaymentStatus::Processing;
    println!("Enum - {:?}", payment_status);

    let action = payment_status.after_payment_action();

    println!("After payment request action --> {}", action )

}

Output

Enum - Processing
After payment request action --> Wait

Loading