From ef1bf4921ee4127d461eec03a14c9070d193345c Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Mon, 11 Feb 2019 16:59:01 -0500 Subject: Init. --- traits/.gitignore | 2 + traits/Cargo.lock | 4 ++ traits/Cargo.toml | 7 ++++ traits/src/main.rs | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 traits/.gitignore create mode 100644 traits/Cargo.lock create mode 100644 traits/Cargo.toml create mode 100644 traits/src/main.rs (limited to 'traits') 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 "] +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 { + x: T, + y: T, +} + +impl Pair { + fn new(x: T, y: T) -> Self { + Self { + x, + y, + } + } +} + +impl Pair { + 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(); +} -- cgit v1.2.3