diff options
Diffstat (limited to 'rust-book/traits/src')
-rwxr-xr-x | rust-book/traits/src/main.rs | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/rust-book/traits/src/main.rs b/rust-book/traits/src/main.rs new file mode 100755 index 0000000..770caa9 --- /dev/null +++ b/rust-book/traits/src/main.rs @@ -0,0 +1,114 @@ +use std::fmt::Display; + +struct Pair<T> { + x: T, + y: T, +} + +impl<T> Pair<T> { + fn new(x: T, y: T) -> Self { + Self { + x, + y, + } + } +} + +impl<T: Display + PartialOrd> Pair<T> { + fn cmp_display(&self) { + if self.x >= self.y { + println!("{}", self.x); + } + else { + println!("{}", self.y); + } + } +} + +pub trait Summary { + fn summarize(&self) -> String { + format!("(read more from {}...)", self.summarize_author()) + } + + fn summarize_author(&self) -> String; +} + +pub struct NewsArticle { + pub headline: String, + pub location: String, + pub author: String, + pub content: String, +} + +impl Summary for NewsArticle { +// fn summarize(&self) -> String { +// format!("{}, by {} ({})", self.headline, self.author, self.location) +// } + + fn summarize_author(&self) -> String { + format!("{}", self.author) + } + +} + +pub struct Tweet { + pub username: String, + pub content: String, + pub reply: bool, + pub retweet: bool, +} + +impl Summary for Tweet { +// fn summarize(&self) -> String { +// format!("{}: {}", self.username, self.content) +// } + + fn summarize_author(&self) -> String { + format!("@{}", self.username) + } +} + +pub fn notify(item: impl Summary) { + println!("breaking news: {}", item.summarize()); +} + +fn returns_summarizable() -> impl Summary { + + NewsArticle { + headline: String::from("Penguins win the stanley cup championship!"), + location: String::from("Pittsburgh, PA, USA"), + author: String::from("Iceburgh"), + content: String::from("The pittsburgh penguins are winners I guess."), + } +// Tweet { +// username: String::from("horse_ebooks"), +// content: String::from("of course blargh"), +// reply: false, +// retweet: false, +// } +} + +fn main() { + + let tweet = Tweet { + username: String::from("horse_ebooks"), + content: String::from("of course, as you probably already know, people"), + reply: false, + retweet: false, + }; + + //dbg!(tweet.summarize()); + + let article = NewsArticle { + headline: String::from("Penguins win the stanley cup championship!"), + location: String::from("Pittsburgh, PA, USA"), + author: String::from("Iceburgh"), + content: String::from("The pittsburgh penguins are winners I guess."), + }; + + //dbg!(article.summarize()); + + //notify(tweet); + + returns_summarizable(); +} |