Initial commit.

This commit is contained in:
Jesse Brault 2024-11-22 14:26:11 -06:00
commit 434881f877
4 changed files with 86 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
/target
main
.idea

7
Cargo.lock generated Normal file
View File

@ -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"

6
Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "first-rust"
version = "0.1.0"
edition = "2021"
[dependencies]

70
src/main.rs Normal file
View File

@ -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<T> {
head: Link<T>,
}
enum Link<T> {
Empty,
More(Box<Node<T>>),
}
struct Node<T> {
data: T,
next: Link<T>,
}
impl<T> LinkedList<T> {
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<T> {
match std::mem::replace(&mut self.head, Link::Empty) {
Link::Empty => None,
Link::More(node) => {
self.head = node.next;
Some(node.data)
}
}
}
}
impl<T> Iterator for LinkedList<T> {
type Item = T;
fn next(&mut self) -> Option<Self::Item> {
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();
}
}