#[derive(Debug)]
enum IpAddr {
V4(u8, u8, u8, u8),
V6(String),
}
#[derive(Debug)]
struct MoveMessage {
x: i32,
y: i32,
}
#[derive(Debug)]
enum Message {
Quit,
Move(MoveMessage),
Write(String),
ChangeColor(i32, i32, i32),
}
impl Message {
fn call(&self) {
println!("call: {:#?}", &self);
println!("Quit: {:#?}", Message::Quit);
let move_message = MoveMessage { x: 12, y: -11 };
println!("Move x: {}, y: {}", move_message.x, move_message.y);
let move_enum = Message::Move(move_message);
println!("move_enum: {:#?}", move_enum);
let change_color_enum = Message::ChangeColor(1, 32, 3);
println!("change_color_enum: {:#?}", change_color_enum);
}
fn call2(&self) {
println!("call2: {:#?}", &self);
}
}
#[derive(Debug)] enum UsState {
Alabama,
Alaska,
}
enum Coin {
Penny,
Nickle,
Dime,
Quarter(UsState),
}
fn values_in_cents(coin: Coin) -> u8 {
match coin {
Coin::Penny => {
println!("Lucky penny!");
1
}
Coin::Nickle => 5,
Coin::Dime => 10,
Coin::Quarter(state) => {
println!("State quarter from {:?}!", state);
25
}
}
}
fn plus_one(x: Option<i32>) -> Option<i32> {
match x {
Some(i) => Some(i + 1),
None => None
}
}
fn main() {
{
let home = IpAddr::V4(127, 0, 0, 1);
let loopback = IpAddr::V6(String::from("::1"));
println!("home: {:#?}", home);
println!("loopback: {:#?}", loopback);
let m = Message::Write(String::from("hello"));
m.call();
m.call2();
}
{
let some_number = Some(5);
let some_string = Some("a string");
println!("some_number: {:#?}, some_string: {:#?}", some_number, some_string);
let absent_number: Option<i32> = None;
println!("absent_number: {:#?}", absent_number);
let x: i8 = 5;
let y: Option<i8> = Some(5);
let sum = x + y.unwrap();
println!("sum: {}", sum);
}
{
values_in_cents(Coin::Quarter(UsState::Alaska));
values_in_cents(Coin::Quarter(UsState::Alabama));
values_in_cents(Coin::Penny);
values_in_cents(Coin::Nickle);
values_in_cents(Coin::Dime);
let five = Some(5);
let six = plus_one(five);
let none = plus_one(None);
println!("five: {:?}, six: {:?}, none: {:?}", five, six, none);
}
{
fn add_fancy_hat() {}
fn remove_fancy_hat() {}
let dice_roll = 9;
match dice_roll {
3 => add_fancy_hat(),
7 => remove_fancy_hat(),
_ => ()
}
}
{
let config_max = Some(236u8);
match config_max {
Some(max) => println!("The maximum is configured to be {}", max),
_ => ()
}
if let Some(max) = Some(127u8) {
println!("The maximum is configured to be {}", max);
}
}
{
let coin = Coin::Penny;
let mut count = 0;
match coin {
Coin::Quarter(state) => println!("State quarter from {:?}!", state),
_ => count += 1
}
println!("count: {}", count);
let coin = Coin::Quarter(UsState::Alaska);
if let Coin::Quarter(state) = coin {
println!("State quarter from {:?}!", state);
} else {
count += 1;
}
println!("count: {}", count);
}
}