From 7e8ee5ed9cad6484e9f13f81731b102ced58402e Mon Sep 17 00:00:00 2001 From: Adam Carpenter Date: Tue, 9 Jul 2019 15:14:04 -0400 Subject: Init. --- rust-book/oop/Cargo.lock | 4 ++++ rust-book/oop/Cargo.toml | 7 ++++++ rust-book/oop/src/lib.rs | 41 ++++++++++++++++++++++++++++++++++ rust-book/oop/src/main.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100755 rust-book/oop/Cargo.lock create mode 100755 rust-book/oop/Cargo.toml create mode 100755 rust-book/oop/src/lib.rs create mode 100755 rust-book/oop/src/main.rs (limited to 'rust-book/oop') diff --git a/rust-book/oop/Cargo.lock b/rust-book/oop/Cargo.lock new file mode 100755 index 0000000..fd3ef4a --- /dev/null +++ b/rust-book/oop/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "oop" +version = "0.1.0" + diff --git a/rust-book/oop/Cargo.toml b/rust-book/oop/Cargo.toml new file mode 100755 index 0000000..28311ff --- /dev/null +++ b/rust-book/oop/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "oop" +version = "0.1.0" +authors = ["Adam Carpenter <53hornet@gmail.com>"] +edition = "2018" + +[dependencies] diff --git a/rust-book/oop/src/lib.rs b/rust-book/oop/src/lib.rs new file mode 100755 index 0000000..91ef2e8 --- /dev/null +++ b/rust-book/oop/src/lib.rs @@ -0,0 +1,41 @@ +pub trait Draw { + fn draw(&self); +} + +pub struct Screen { + pub components: Vec>, +} + +impl Screen { + pub fn run(&self) { + for component in self.components.iter() { + component.draw(); + } + } +} + +pub struct Button { + pub width: u32, + pub height: u32, + pub label: String, +} + +impl Draw for Button { + fn draw(&self) { + dbg!("drew button"); + } +} + +pub struct SelectBox { + pub width: u32, + pub height: u32, + pub options: Vec, +} + +impl Draw for SelectBox { + fn draw(&self) { + dbg!("drew select box"); + } +} + + diff --git a/rust-book/oop/src/main.rs b/rust-book/oop/src/main.rs new file mode 100755 index 0000000..e92c07c --- /dev/null +++ b/rust-book/oop/src/main.rs @@ -0,0 +1,56 @@ +use oop::{Screen, Button, SelectBox}; + +pub struct AveragedCollection { + list: Vec, + average: f64, +} + +impl AveragedCollection { + pub fn add(&mut self, value: i32) { + self.list.push(value); + self.update_average(); + } + + pub fn remove(&mut self) -> Option { + let result = self.list.pop(); + match result { + Some(value) => { + self.update_average(); + Some(value) + }, + None => None, + } + } + + pub fn average(&self) -> f64 { + self.average + } + + fn update_average(&mut self) { + let total: i32 = self.list.iter().sum(); + self.average = total as f64 / self.list.len() as f64; + } +} + +fn main() { + let screen = Screen { + components: vec![ + Box::new(SelectBox { + width: 75, + height: 10, + options: vec![ + String::from("Yes"), + String::from("Maybe"), + String::from("No") + ], + }), + Box::new(Button { + width: 50, + height: 10, + label: String::from("OK"), + }), + ], + }; + + screen.run(); +} -- cgit v1.2.3