#[derive(Debug)] enum UsState { Alabama, Alaska, Arizona, Arkansaw, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indianan, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, NewHampshire, NewJersey, NewMexico, NewYork, NorthCarolina, NorthDakota, Ohio, Oklahoma, Oregon, Pennsylvania, RhodeIsland, SouthCarolina, SouthDakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, WestVirginia, Wisconsin, Wyoming, } enum Coin { Penny, Nickel, Dime, Quarter(UsState), } fn value_in_cents(coin: Coin) -> u32 { match coin { Coin::Penny => { println!("Lucky penny!"); 1 }, Coin::Nickel => 5, Coin::Dime => 10, Coin::Quarter(state) => { println!("State quarter from {:?}!", state); 25 }, } } fn count_non_quarters(count: &mut u32, coin: Coin) { // If let is like matching on one condition of a match statement if let Coin::Quarter(state) = coin { println!("State quarter from {:?}!", state); } else { *count += 1; } } fn plus_one(x: Option) -> Option { match x { None => None, // Match is exhaustive, must define the 'None' case Some(i) => Some(i + 1), } } fn main() { println!("Hello, world!"); println!("{}", value_in_cents(Coin::Quarter(UsState::Michigan))); }