Rust 列挙型

列挙型(enum)は、特定の型の一連の値、または異なる型の一連の値を定義した型
enum DogKind {
AKITAINU,
SHIBAINU,
RETRIVER,
}

enum DogKind {
	AKITAINU,
	SHIBAINU,
	RETRIEVER,
}

fn main() {
	let dog1 = DogKind::AKITAINU;
	let dog2 = DogKind::SHIBAINU;

	match dog1 {
		DogKind::AKITAINU => println!("秋田犬"),
		DogKind::SHIBAINU => println!("柴犬"),
		DogKind::RETRIVER => println!("レトリバー"),
	}

	match dog2 {
		DogKind::AKITAINU => println!("秋田犬"),
		DogKind::SHIBAINU => println!("柴犬"),
		DogKind::RETRIVER => println!("レトリバー"),
	}

}

列挙子に種類の異なる型を指定したり、複数の値を持つように指定したりすることができる

enum Command {
	Quit,
	Move { x: i32, y: i32 },
	Write(String),
	SetColor(i32, i32, i32)
}

fn main(){
	let cmnds = vec![
		Command::Quit,
		Command::Move { x: 20, y: 30},
		Command::Write(String::from("Hello")),
		Command::SetColor {0:127, 1:127, 2:127}
	];

	for cmd in cmnds.iter(){
		match cmd {
			Command::Quit => println!("Quit"),
			Command::Move{x, y} => println!("Move {},{}", x, y),
			_ => println!("その他のコマンド"),
		}
	}
}
enum Option<T>{
	Some(T),
	None,
}

enum Result<T, E>{
	Ok(T),
	Err(E),
}