mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-05-15 10:02:42 +00:00
54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
// ./src/trait/derive.md
|
|
|
|
|
|
// `Centimeters`, a tuple struct that can be compared
|
|
#[derive(PartialEq, PartialOrd)]
|
|
struct Centimeters(f64);
|
|
|
|
// `Inches`, a tuple struct that can be printed
|
|
#[derive(Debug)]
|
|
struct Inches(i32);
|
|
|
|
impl Inches {
|
|
fn to_centimeters(&self) -> Centimeters {
|
|
let &Inches(inches) = self;
|
|
|
|
Centimeters(inches as f64 * 2.54)
|
|
}
|
|
}
|
|
|
|
// `Seconds`, a tuple struct with no additional attributes
|
|
struct Seconds(i32);
|
|
|
|
fn part0() {
|
|
let _one_second = Seconds(1);
|
|
|
|
// Error: `Seconds` can't be printed; it doesn't implement the `Debug` trait
|
|
//println!("One second looks like: {:?}", _one_second);
|
|
// TODO ^ Try uncommenting this line
|
|
|
|
// Error: `Seconds` can't be compared; it doesn't implement the `PartialEq` trait
|
|
//let _this_is_true = (_one_second == _one_second);
|
|
// TODO ^ Try uncommenting this line
|
|
|
|
let foot = Inches(12);
|
|
|
|
println!("One foot equals {:?}", foot);
|
|
|
|
let meter = Centimeters(100.0);
|
|
|
|
let cmp =
|
|
if foot.to_centimeters() < meter {
|
|
"smaller"
|
|
} else {
|
|
"bigger"
|
|
};
|
|
|
|
println!("One foot is {} than one meter.", cmp);
|
|
}
|
|
|
|
pub fn main() {
|
|
part0();
|
|
}
|
|
|