From f6e5d4aeb32f8c14beb71865e66bcdae757fde88 Mon Sep 17 00:00:00 2001 From: Mattrixwv Date: Wed, 10 Jun 2020 00:59:50 -0400 Subject: [PATCH] Added program to teach different ways of formatting the same variables --- formatting.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 formatting.rs diff --git a/formatting.rs b/formatting.rs new file mode 100644 index 0000000..df9f676 --- /dev/null +++ b/formatting.rs @@ -0,0 +1,52 @@ +use std::fmt::{self, Formatter, Display}; + +struct City{ + name: &'static str, + //Latitude + lat: f32, + //Longitude + lon: f32, +} +impl Display for City{ + //`f` is a buffer, and this method must write the formatted string into it + fn fmt(&self, f: &mut Formatter) -> fmt::Result{ + let lat_c = if self.lat >= 0.0 { 'N' } else { 'S' }; + let lon_c = if self.lon >= 0.0 { 'E' } else { 'W' }; + + //`write!` is like `format!`, but it will write the formatted string + //into a buffer (the first argument) + write!(f, "{}: {:.3}°{} {:.3}°{}", self.name, self.lat.abs(), lat_c, self.lon.abs(), lon_c) + } +} + +#[derive(Debug)] +struct Color{ + red: u8, + green: u8, + blue: u8, +} +impl Display for Color{ + fn fmt(&self, f: &mut Formatter) -> fmt::Result{ + write!(f, "RGB ({0}, {1}, {2}) 0x{0:0width$X}{1:0width$X}{2:0width$X}", self.red, self.green, self.blue, width = 2) + } +} + +fn main(){ + for city in[ + City{ name: "Dublin", lat: 53.347778, lon: -6.259722 }, + City{ name: "Oslo", lat: 59.95, lon: 10.75 }, + City{ name: "Vancouver", lat: 49.25, lon: -123.1 }, + ].iter(){ + println!("{}", *city); + } + for color in[ + Color { red: 128, green: 255, blue: 90 }, + Color { red: 0, green: 3, blue: 254 }, + Color { red: 0, green: 0, blue: 0 }, + ].iter(){ + //Switch this to use {} once you've added an implementation + //for fmt::Display. + //println!("{:?}", *color); + println!("{}", *color); + } +}