use std::fmt::{Display, Formatter};
use p_rust::{NewsArticle, Pair, Summary, Tweet};
#[derive(Debug)]
struct Point<T> {
x: T,
y: T,
}
impl<T> Point<T> {
fn x(&self) -> &T {
&self.x
}
}
impl Point<f64> {
fn distance_from_origin(&self) -> f64 {
(self.x.powi(2) + self.y.powi(2)).sqrt()
}
}
#[derive(Debug)]
struct Point1<X1, Y1> {
x: X1,
y: Y1,
}
impl<X1, Y1> Point1<X1, Y1> {
fn mix_up<X2, Y2>(self, other: Point1<X2, Y2>) -> Point1<X1, Y2> {
Point1 {
x: self.x,
y: other.y,
}
}
}
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
let mut largest = list[0];
for &item in list {
if item > largest {
largest = item;
}
}
largest
}
fn largest2<T: PartialOrd + Clone + Copy>(list: &[T]) -> Box<T> {
let mut largest = list[0];
for &item in list {
if item > largest {
largest = item;
}
}
Box::new(largest)
}
fn largest_i32(list: &[i32]) -> i32 {
let mut largest = list[0];
for &item in list {
if item > largest {
largest = item;
}
}
largest
}
fn largest_char(list: &[char]) -> char {
let mut largest = list[0];
for &item in list {
if item > largest {
largest = item;
}
}
largest
}
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
if x.len() > y.len() {
x
} else {
y
}
}
#[derive(Debug)]
struct ImportantExcerpt<'a> {
part: &'a str,
}
impl<'a> ImportantExcerpt<'a> {
fn level(&self) -> i32 {
3
}
fn announce_and_return_part(&self, announcement: &str) -> &str {
println!("Attention please: {}", announcement);
self.part
}
}
impl<'a> Display for ImportantExcerpt<'a> {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.part)
}
}
fn longest_with_an_announcement<'a, T>(
x: &'a str,
y: &'a str,
ann: T,
) -> &'a str
where T: Display
{
println!("Announcement! {}", ann);
if x.len() > y.len() {
x
} else {
y
}
}
fn main() {
let number_list = vec![34, 50, 25, 100, 65];
let result = largest(&number_list);
println!("The largest number is {}", result);
let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
let result = largest(&number_list);
println!("The largest number is {}", result);
let number_list = vec![34, 50, 25, 100, 65];
let result = largest_i32(&number_list);
println!("The largest number is {}", result);
let char_list = vec!['y', 'm', 'a', 'q'];
let result = largest_char(&char_list);
println!("The largest char is {}", result);
let result = largest(&char_list);
println!("The largest char is {}", result);
let result = largest2(&char_list);
println!("The largest char is {}", result);
let integer = Point { x: 5, y: 10 };
let float = Point { x: 1.0, y: 4.0 };
println!("integer: {:?}, float: {:?}, float.distance_from_origin: {}", integer, float, float.distance_from_origin());
let p = Point { x: 5, y: 10 };
println!("p.x = {}", p.x());
let p1 = Point1 { x: 5, y: 10.4 };
let p2 = Point1 { x: "Hello", y: 'c' };
let p3 = p1.mix_up(p2);
println!("p3: {:#?}", p3);
let tweet = Tweet {
username: String::from("horse_ebooks"),
content: String::from("of course, as you probably already know, people"),
reply: false,
retweet: false,
};
println!("1 new tweet: {}", 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 once again are the best \
hockey team in the NHL."
),
};
println!("New article available! {}", article.summarize());
let pair = Pair::new(5, 7);
pair.cmp_display();
{
let r;
{
let x = 5;
r = &x;
println!("r: {}", r);
}
}
let string1 = String::from("abcd");
let string2 = "xyz";
let result = longest(string1.as_str(), string2);
println!("The longest string is {}", result);
let string1 = String::from("long string is long");
{
let string2 = String::from("xyz");
let result = longest(string1.as_str(), string2.as_str());
println!("The longest string is {}", result);
}
let novel = String::from("Call me Ishmael. Some years ago...");
let first_sentence = novel.split('.').next().expect("Could not find a '.'");
let i = ImportantExcerpt {
part: first_sentence
};
println!("i: {:#?}, level: {}, announcement part: {}", i.part, i.level(), i.announce_and_return_part("hello!"));
println!("longest_with_an_announcement: {}", longest_with_an_announcement("music", "economy", i));
}