diff options
author | Adam Carpenter <adam.carpenter@adp.com> | 2019-02-11 16:59:01 -0500 |
---|---|---|
committer | Adam Carpenter <adam.carpenter@adp.com> | 2019-02-11 16:59:01 -0500 |
commit | ef1bf4921ee4127d461eec03a14c9070d193345c (patch) | |
tree | ab9f4ed73fcf97656743c959ce8c9adbe2ce9924 /traits | |
download | learning-rust-ef1bf4921ee4127d461eec03a14c9070d193345c.tar.xz learning-rust-ef1bf4921ee4127d461eec03a14c9070d193345c.zip |
Init.
Diffstat (limited to 'traits')
-rw-r--r-- | traits/.gitignore | 2 | ||||
-rw-r--r-- | traits/Cargo.lock | 4 | ||||
-rw-r--r-- | traits/Cargo.toml | 7 | ||||
-rw-r--r-- | traits/src/main.rs | 114 |
4 files changed, 127 insertions, 0 deletions
diff --git a/traits/.gitignore b/traits/.gitignore new file mode 100644 index 0000000..53eaa21 --- /dev/null +++ b/traits/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/traits/Cargo.lock b/traits/Cargo.lock new file mode 100644 index 0000000..3eff52b --- /dev/null +++ b/traits/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "traits" +version = "0.1.0" + diff --git a/traits/Cargo.toml b/traits/Cargo.toml new file mode 100644 index 0000000..461bdcd --- /dev/null +++ b/traits/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "traits" +version = "0.1.0" +authors = ["Adam Carpenter <adam.carpenter@adp.com>"] +edition = "2018" + +[dependencies] diff --git a/traits/src/main.rs b/traits/src/main.rs new file mode 100644 index 0000000..770caa9 --- /dev/null +++ b/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(); +} |