From 434881f87779cf8013dd7c9fa342d5ac7497214e Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Fri, 22 Nov 2024 14:26:11 -0600 Subject: [PATCH] Initial commit. --- .gitignore | 3 +++ Cargo.lock | 7 ++++++ Cargo.toml | 6 +++++ src/main.rs | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dcb4ac3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +main +.idea diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..d20b56c --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "first-rust" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..6325912 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "first-rust" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..214b8fb --- /dev/null +++ b/src/main.rs @@ -0,0 +1,70 @@ +struct Greeter { + greeting: &'static str, +} + +impl Greeter { + fn new(greeting: &'static str) -> Greeter { + Greeter { greeting } + } + + fn greet(&self) { + println!("{}", self.greeting); + } +} + +struct LinkedList { + head: Link, +} + +enum Link { + Empty, + More(Box>), +} + +struct Node { + data: T, + next: Link, +} + +impl LinkedList { + fn new() -> Self { + LinkedList { head: Link::Empty } + } + + fn push(&mut self, data: T) { + self.head = Link::More(Box::new(Node { + data, + next: std::mem::replace(&mut self.head, Link::Empty), + })); + } + + fn pop(&mut self) -> Option { + match std::mem::replace(&mut self.head, Link::Empty) { + Link::Empty => None, + Link::More(node) => { + self.head = node.next; + Some(node.data) + } + } + } +} + +impl Iterator for LinkedList { + type Item = T; + fn next(&mut self) -> Option { + self.pop() + } +} + +fn main() { + Greeter::new("Hello, Jesse!").greet(); + + let mut my_linked_list = LinkedList::new(); + my_linked_list.push(Greeter::new("Hello")); + my_linked_list.push(Greeter::new("Beautiful")); + my_linked_list.push(Greeter::new("World")); + + for greeter in my_linked_list { + greeter.greet(); + } +}