Skip to content

Commit 3ea506a

Browse files
committed
Enums
1 parent 7fd0fc3 commit 3ea506a

File tree

5 files changed

+63
-1
lines changed

5 files changed

+63
-1
lines changed

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ members = [
1010
"./ownership",
1111
"./return_ownership",
1212
"./structs",
13-
"./structs_rectangle"
13+
"./structs_rectangle",
14+
"./enums",
15+
"./enums_messages",
1416
]
1517

enums/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "enums"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]

enums/src/main.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
enum IPAddrKind {
2+
V4,
3+
V6,
4+
}
5+
6+
enum IpAddr {
7+
// IPV4 will always have 4 numbers between 0 and 255.
8+
// Each variant in an enum can have a different type.
9+
// Which is what we can't do with a struct
10+
V4(u8, u8, u8, u8),
11+
V6(String),
12+
}
13+
fn main() {
14+
let home = IpAddr::V4(127, 0, 0, 1);
15+
let loopback = IpAddr::V6(String::from("::1"));
16+
}

enums_messages/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "enums_messages"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]

enums_messages/src/main.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
fn main() {
2+
// This is quite similar to a struct,
3+
// except we don't use the struct keyword,
4+
// and all the variants are grouped together under the message Type
5+
6+
fn call(&self) {
7+
// whatever
8+
}
9+
10+
enum Message {
11+
Quit, // Has no data associated
12+
Move { x: i32, y: i32 }, // has named fields, like a struct
13+
Write(String), // Includes a single String
14+
ChangeColour(i32, i32, i32), // Includes 3 i32 vals
15+
}
16+
// This is much nicer than;
17+
18+
struct QuitMessage; // unit struct
19+
struct MoveMessage {
20+
x: i32,
21+
y: i32,
22+
};
23+
struct WriteMessage(String); // Tuple struct
24+
struct ChangeColourMessage(i32, i32, i32); // Tuple struct
25+
26+
let m = Message::Write(String::from("Wassup"));
27+
m.call()
28+
}

0 commit comments

Comments
 (0)