summaryrefslogtreecommitdiff
path: root/meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs
diff options
context:
space:
mode:
Diffstat (limited to 'meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs')
-rw-r--r--meap/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 100644
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);
+}