# Option. # Definition. ```rust enum Option { None, Some(T), } ``` # Usage. ```rust fn maybe_icecream(hour: u16) -> Option { if hour > 10 { Some(5) } else { None } } ``` # Subtypes. ## If-let. ```rust let letter: Option = Some(12); if let Some(i) = letter { // It was Some(). } else { // It was None. } ``` ## While-let. ```rust let letter: Option = Some(0); while let Some(i) = letter { if i > 9 { foo(); letter = None; } else { bar() letter = Some(i + 1); } } ``` ## Match. Use `ref` keyword to borrow value that doesn't implement `Copy` trait. ```rust let y: Option = Some(Point { x: 100, y: 200 }); match y { Some(ref p) => println!("Co-ordinates are {},{} ", p.x, p.y), _ => panic!("no match!"), } ```