diff --git a/generics/largest_number/Cargo.toml b/generics/largest_number/Cargo.toml new file mode 100644 index 0000000..9e86772 --- /dev/null +++ b/generics/largest_number/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "generics" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/generics/largest_number/src/main.rs b/generics/largest_number/src/main.rs new file mode 100644 index 0000000..a17f961 --- /dev/null +++ b/generics/largest_number/src/main.rs @@ -0,0 +1,31 @@ +fn main() { + let number_list = vec![34, 50, 25, 100, 65]; + let largest = largest_number(&number_list); + println!("The largest number is {largest}"); + // for number in &number_list { + // if number > largest { + // largest = number; + // } + // } + + let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8]; + let largest = largest_number(&number_list); + println!("The largest number is {largest}"); + // let mut largest = &number_list[0]; + // for number in &number_list { + // if number > largest { + // largest = number; + // } + // } +} + +fn largest_number(list: &[i32]) -> &i32 { + let mut largest = &list[0]; + + for number in list { + if number > largest { + largest = number; + } + } + largest +} diff --git a/generics/media-aggregator/Cargo.toml b/generics/media-aggregator/Cargo.toml new file mode 100644 index 0000000..f5fe0dc --- /dev/null +++ b/generics/media-aggregator/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "media-aggregator" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/generics/media-aggregator/src/lib.rs b/generics/media-aggregator/src/lib.rs new file mode 100644 index 0000000..bf6e091 --- /dev/null +++ b/generics/media-aggregator/src/lib.rs @@ -0,0 +1,60 @@ +use ::std::fmt::Display; +use std::fmt::Debug; +pub trait Summary { + fn summarize_author(&self) -> String; + + fn summarize(&self) -> String { + // "(Read more...)".to_string() + let x = "a".to_string(); + x + } +} + +#[derive(Debug)] +pub struct NewsArticle { + pub headline: String, + pub location: String, + pub author: String, + pub content: String, +} + +#[derive(Debug)] +pub struct SocialPost { + pub username: String, + pub content: String, + pub reply: bool, + pub repost: bool, +} + +impl Summary for NewsArticle { + // fn summarize(&self) -> String { + // format!("{}, by {} ({})", self.headline, self.author, self.location) + // } + fn summarize_author(&self) -> String { + "trad media".to_string() // format!("@{}", self.author) + } +} + +// impl Summary for SocialPost { +// fn summarize(&self) -> String { +// format!("{} by {}", self.content, self.summarize_author()) +// } +// +// fn summarize_author(&self) -> String { +// format!("@{}", self.username) +// } +// } + +// pub fn notify(item: &impl Summary) { +// println!("{}", item.summarize()); +// } + +pub fn notify(item: &T, x: U) +where + T: Summary, + U: Copy + Debug + Display + Clone, +{ + println!("{}", item.summarize()); + let y = x; + println!("doubled: {:?}", y); +} diff --git a/generics/media-aggregator/src/main.rs b/generics/media-aggregator/src/main.rs new file mode 100644 index 0000000..8bafeb5 --- /dev/null +++ b/generics/media-aggregator/src/main.rs @@ -0,0 +1,28 @@ +use media_aggregator::{NewsArticle, SocialPost}; +use media_aggregator::{Summary, notify}; + +fn main() { + let article = NewsArticle { + headline: "Chancellor on brink of second bailout for banks".to_string(), + location: "London".to_string(), + author: "The Times".to_string(), + content: "Please subscribe to Premium to read the whole story.".to_string(), + }; + + let tweet = SocialPost { + content: "running bitcoin".to_string(), + username: "halfin".to_string(), + reply: false, + repost: false, + }; + + println!("\n --- DEBUG: values ---"); + println!("{:?}", article); + // println!("{:?}", tweet); + + println!("\n --- DEBUG: article summary ---"); + println!("{:?}", article.summarize()); + + println!("\n --- DEBUG: article notify---"); + notify(&article, 5); +} diff --git a/lifetimes/Cargo.toml b/lifetimes/Cargo.toml new file mode 100644 index 0000000..f760de2 --- /dev/null +++ b/lifetimes/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "lifetimes" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/lifetimes/src/main.rs b/lifetimes/src/main.rs new file mode 100644 index 0000000..e67a973 --- /dev/null +++ b/lifetimes/src/main.rs @@ -0,0 +1,26 @@ +// fn main() { +// let string1 = String::from("abcd"); +// let string2 = String::from("xyz"); +// let result = longest(string1.as_str(), string2.as_str()); +// println!("The longer string is: {result}"); +// } +// +// fn longest<'somelifetime>(a: &'somelifetime str, b: &'somelifetime str) -> &'somelifetime str { +// if a.len() > b.len() { a } else { b } +// } +// +struct ImportantExcerpt<'a> { + part: &'a str, +} +// +// fn return_excerpt(story: ImportantExcerpt) -> &'a str { +// let first_sentence = novel.split('.') +// } + +fn main() { + let novel = String::from("Call me Ishmael. Some years ago..."); + let first_sentence = novel.split('.').next().unwrap(); + let i = ImportantExcerpt { + part: first_sentence, + }; +}