summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs
diff options
context:
space:
mode:
authorAdam Carpenter <gitlab@53hor.net>2019-07-09 15:14:04 -0400
committerAdam Carpenter <gitlab@53hor.net>2019-07-09 15:14:04 -0400
commit7e8ee5ed9cad6484e9f13f81731b102ced58402e (patch)
tree5395402ab07bbb5a659dbd68c701e22a1227202f /meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs
downloadlearning-rust-7e8ee5ed9cad6484e9f13f81731b102ced58402e.tar.xz
learning-rust-7e8ee5ed9cad6484e9f13f81731b102ced58402e.zip
Init.
Diffstat (limited to 'meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs')
-rwxr-xr-xmeap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs b/meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs
new file mode 100755
index 0000000..4126e05
--- /dev/null
+++ b/meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs
@@ -0,0 +1,46 @@
+#[derive(Debug)]
+struct CubeSat {
+ id: u64,
+}
+
+#[derive(Debug)]
+enum StatusMessage {
+ Ok,
+}
+
+impl Copy for CubeSat { }
+
+impl Copy for StatusMessage { }
+
+impl Clone for CubeSat { // <1>
+ fn clone(&self) -> Self {
+ CubeSat { id: self.id } //<2>
+ }
+}
+
+impl Clone for StatusMessage {
+ fn clone(&self) -> Self {
+ *self // <3>
+ }
+}
+
+fn check_status(sat_id: CubeSat) -> StatusMessage {
+ StatusMessage::Ok
+}
+
+fn main () {
+ let sat_a = CubeSat { id: 0 };
+ let sat_b = CubeSat { id: 1 };
+ let sat_c = CubeSat { id: 2 };
+
+ let a_status = check_status(sat_a);
+ let b_status = check_status(sat_b);
+ let c_status = check_status(sat_c);
+ println!("a: {:?}, b: {:?}, c: {:?}", a_status, b_status, c_status);
+
+ // "waiting" ...
+ let a_status = check_status(sat_a);
+ let b_status = check_status(sat_b);
+ let c_status = check_status(sat_c);
+ println!("a: {:?}, b: {:?}, c: {:?}", a_status, b_status, c_status);
+}