From 67cdcc2e12118becb823e20a40cc2687f2b8425a Mon Sep 17 00:00:00 2001 From: Adam Carpenter <53hornet@gmail.com> Date: Wed, 27 Mar 2019 15:32:37 -0400 Subject: Started Rust in Action MEAP. --- .gitignore | 0 add/Cargo.lock | 11 - add/Cargo.toml | 7 - add/add-one/Cargo.toml | 8 - add/add-one/src/lib.rs | 11 - add/adder/Cargo.toml | 9 - add/adder/src/main.rs | 6 - adder/Cargo.lock | 4 - adder/Cargo.toml | 7 - adder/src/lib.rs | 92 - advanced/adv-fn-closure/Cargo.lock | 11 - advanced/adv-fn-closure/Cargo.toml | 8 - advanced/adv-fn-closure/src/main.rs | 79 - advanced/adv-lifetimes/Cargo.lock | 4 - advanced/adv-lifetimes/Cargo.toml | 7 - advanced/adv-lifetimes/src/main.rs | 36 - advanced/adv-traits/Cargo.lock | 4 - advanced/adv-traits/Cargo.toml | 7 - advanced/adv-traits/src/main.rs | 163 - advanced/adv-types/Cargo.lock | 4 - advanced/adv-types/Cargo.toml | 7 - advanced/adv-types/src/main.rs | 41 - advanced/hello_macro/Cargo.toml | 7 - advanced/hello_macro/src/lib.rs | 3 - advanced/unsafe-rust/Cargo.lock | 4 - advanced/unsafe-rust/Cargo.toml | 7 - advanced/unsafe-rust/src/main.rs | 62 - blog/Cargo.lock | 4 - blog/Cargo.toml | 7 - blog/src/lib.rs | 127 - blog/src/main.rs | 36 - collections/Cargo.lock | 4 - collections/Cargo.toml | 7 - collections/src/main.rs | 133 - concurrency/Cargo.lock | 4 - concurrency/Cargo.toml | 7 - concurrency/src/main.rs | 137 - control/Cargo.lock | 4 - control/Cargo.toml | 7 - control/src/main.rs | 7 - crates/Cargo.lock | 4 - crates/Cargo.toml | 7 - crates/src/lib.rs | 33 - crates/src/main.rs | 8 - employees/Cargo.lock | 4 - employees/Cargo.toml | 7 - employees/src/main.rs | 181 - enums/Cargo.lock | 4 - enums/Cargo.toml | 7 - enums/src/main.rs | 12 - enums/src/main1.rs | 48 - errors/Cargo.lock | 4 - errors/Cargo.toml | 7 - errors/src/main.rs | 38 - fibonacci/Cargo.lock | 4 - fibonacci/Cargo.toml | 7 - fibonacci/src/main.rs | 31 - ftoctof/Cargo.lock | 4 - ftoctof/Cargo.toml | 7 - ftoctof/src/main.rs | 43 - functional/Cargo.lock | 4 - functional/Cargo.toml | 7 - functional/src/main.rs | 188 - functions/Cargo.lock | 4 - functions/Cargo.toml | 7 - functions/src/main.rs | 10 - generics/Cargo.lock | 4 - generics/Cargo.toml | 7 - generics/src/main.rs | 68 - guessing-game/Cargo.lock | 80 - guessing-game/Cargo.toml | 10 - guessing-game/src/main.rs | 36 - hello_server/404.html | 19 - hello_server/Cargo.lock | 4 - hello_server/Cargo.toml | 7 - hello_server/hello.html | 18 - hello_server/src/bin/main.rs | 46 - hello_server/src/lib.rs | 117 - hello_world/hello_cargo/Cargo.lock | 4 - hello_world/hello_cargo/Cargo.toml | 7 - hello_world/hello_cargo/src/main.rs | 3 - hello_world/main.exe | Bin 4129619 -> 0 bytes hello_world/main.rs | 4 - horcrux/Cargo.toml | 7 - horcrux/src/main.rs | 3 - lifetimes/Cargo.lock | 4 - lifetimes/Cargo.toml | 7 - lifetimes/src/main.rs | 43 - mathsssss/Cargo.lock | 4 - mathsssss/Cargo.toml | 7 - mathsssss/src/main.rs | 61 - meap/ch1/Cargo.lock | 4 + meap/ch1/Cargo.toml | 7 + meap/ch1/src/main.rs | 28 + meap/ch2/Cargo.lock | 195 + meap/ch2/Cargo.toml | 10 + meap/ch2/src/main.rs | 100 + meap/meap-code/ch1/ch1-animals-specialization.rs | 47 + meap/meap-code/ch1/ch1-animals-tuple-structs.rs | 41 + meap/meap-code/ch1/ch1-animals.rs | 41 + meap/meap-code/ch1/ch1-escape-html.rs | 22 + meap/meap-code/ch1/ch1-hashmap-hashset.rs | 33 + meap/meap-code/ch1/ch1-hello2.rs | 16 + meap/meap-code/ch1/ch1-save-user-data.rs | 32 + meap/meap-code/ch1/ch1-time-api/Cargo.toml | 16 + meap/meap-code/ch1/ch1-time-api/src/main.rs | 36 + meap/meap-code/ch1/ch1-word-counts.rs | 16 + meap/meap-code/ch10/Vagrantfile | 29 + meap/meap-code/ch10/ch10-basic-handler/Cargo.toml | 9 + meap/meap-code/ch10/ch10-basic-handler/Dockerfile | 36 + meap/meap-code/ch10/ch10-basic-handler/Makefile | 2 + meap/meap-code/ch10/ch10-basic-handler/src/main.rs | 58 + meap/meap-code/ch10/ch10-callstack/Cargo.toml | 6 + meap/meap-code/ch10/ch10-callstack/src/main.rs | 21 + meap/meap-code/ch10/ch10-handle/Cargo.toml | 7 + meap/meap-code/ch10/ch10-handle/src/main.rs | 48 + meap/meap-code/ch10/ch10-handler/Cargo.toml | 7 + meap/meap-code/ch10/ch10-handler/src/main.rs | 58 + meap/meap-code/ch10/ch10-ignore/Cargo.toml | 7 + meap/meap-code/ch10/ch10-ignore/src/main.rs | 18 + meap/meap-code/ch10/ch10-sixty/Cargo.toml | 6 + meap/meap-code/ch10/ch10-sixty/src/main.rs | 15 + meap/meap-code/ch10/ch10-sjlj/Cargo.toml | 7 + meap/meap-code/ch10/ch10-sjlj/Dockerfile | 37 + meap/meap-code/ch10/ch10-sjlj/Makefile | 2 + meap/meap-code/ch10/ch10-sjlj/src/main.rs | 105 + meap/meap-code/ch2/ch2-3arrays.rs | 22 + meap/meap-code/ch2/ch2-add-with-lifetimes.rs | 8 + meap/meap-code/ch2/ch2-add-with-lifetimes_.rs | 8 + meap/meap-code/ch2/ch2-bufreader-lines.rs | 13 + meap/meap-code/ch2/ch2-define-type.rs | 22 + meap/meap-code/ch2/ch2-first-steps.rs | 11 + meap/meap-code/ch2/ch2-generic-add.rs | 16 + meap/meap-code/ch2/ch2-intro-to-numbers.rs | 8 + meap/meap-code/ch2/ch2-intro.rs | 18 + meap/meap-code/ch2/ch2-introducing-vec.rs | 52 + meap/meap-code/ch2/ch2-match-needles.rs | 17 + meap/meap-code/ch2/ch2-needle-in-haystack.rs | 15 + meap/meap-code/ch2/ch2-non-base2.rs | 10 + meap/meap-code/ch2/ch2-read-file-iter-lines.rs | 15 + meap/meap-code/ch2/ch2-read-file.rs | 21 + meap/meap-code/ch2/ch2-sensor-emulator.rs | 36 + meap/meap-code/ch2/ch2-simple-with-enumerate.rs | 13 + meap/meap-code/ch2/ch2-simple-with-linenums | Bin 0 -> 3714488 bytes meap/meap-code/ch2/ch2-simple-with-linenums.rs | 14 + meap/meap-code/ch2/ch2-sparse-matrix.rs | 20 + meap/meap-code/ch2/ch2-str-simple-pattern.rs | 12 + meap/meap-code/ch3/ch3-adding-pub-to-file.rs | 28 + meap/meap-code/ch3/ch3-anystring-macro.rs | 10 + meap/meap-code/ch3/ch3-defining-files-neatly.rs | 29 + meap/meap-code/ch3/ch3-defining-files.rs | 18 + meap/meap-code/ch3/ch3-error-1.rs | 30 + meap/meap-code/ch3/ch3-file-doced.rs | 38 + meap/meap-code/ch3/ch3-file-states.rs | 59 + meap/meap-code/ch3/ch3-files-with-modes.rs | 75 + meap/meap-code/ch3/ch3-implementing-display.rs | 49 + meap/meap-code/ch3/ch3-mock-file.rs | 18 + meap/meap-code/ch3/ch3-newtype-pattern.rs | 10 + meap/meap-code/ch3/ch3-not-quite-file-1.rs | 23 + meap/meap-code/ch3/ch3-not-quite-file-2.rs | 42 + meap/meap-code/ch3/ch3-not-quite-file-3.rs | 55 + meap/meap-code/ch3/ch3-not-quite-file-4.rs | 42 + meap/meap-code/ch3/ch3-parse-log.rs | 35 + meap/meap-code/ch3/ch3-public-file.rs | 33 + meap/meap-code/ch3/ch3-return-result.rs | 68 + meap/meap-code/ch3/ch3-skeleton-read-trait.rs | 21 + meap/meap-code/ch3/ch3-string-macro.rs | 10 + meap/meap-code/ch3/filebasics/Cargo.toml | 6 + meap/meap-code/ch3/filebasics/src/main.rs | 3 + meap/meap-code/ch3/fileresult/Cargo.toml | 7 + meap/meap-code/ch3/fileresult/src/main.rs | 65 + meap/meap-code/ch3/globalerror/Cargo.toml | 7 + meap/meap-code/ch3/globalerror/src/main.rs | 30 + meap/meap-code/ch4/ch4-check-sats-1.rs | 27 + meap/meap-code/ch4/ch4-check-sats-3.rs | 33 + .../ch4/ch4-check-sats-clone-and-copy-traits.rs | 24 + .../ch4/ch4-check-sats-with-copy-trait.rs | 46 + meap/meap-code/ch4/ch4-rc-groundstation.rs | 10 + meap/meap-code/ch4/ch4-rc-refcell-groundstation.rs | 31 + meap/meap-code/ch4/ch4-sat-mailbox.rs | 42 + meap/meap-code/ch4/ch4-short-lived-strategy.rs | 82 + meap/meap-code/ch5/ch5-cpu1/Cargo.lock | 4 + meap/meap-code/ch5/ch5-cpu1/Cargo.toml | 6 + meap/meap-code/ch5/ch5-cpu1/src/main.rs | 60 + meap/meap-code/ch5/ch5-cpu2/Cargo.lock | 4 + meap/meap-code/ch5/ch5-cpu2/Cargo.toml | 6 + meap/meap-code/ch5/ch5-cpu2/src/main.rs | 60 + meap/meap-code/ch5/ch5-cpu3/Cargo.lock | 4 + meap/meap-code/ch5/ch5-cpu3/Cargo.toml | 6 + meap/meap-code/ch5/ch5-cpu3/src/main.rs | 88 + meap/meap-code/ch5/ch5-f32-as-u32.rs | 8 + meap/meap-code/ch5/ch5-fixed-width.rs | 34 + meap/meap-code/ch5/ch5-genfib/Cargo.lock | 102 + meap/meap-code/ch5/ch5-genfib/Cargo.toml | 7 + meap/meap-code/ch5/ch5-genfib/src/main.rs | 17 + meap/meap-code/ch5/ch5-impossible-add.rs | 5 + meap/meap-code/ch5/ch5-message-store/Cargo.lock | 4 + meap/meap-code/ch5/ch5-message-store/Cargo.toml | 6 + meap/meap-code/ch5/ch5-message-store/src/main.rs | 93 + meap/meap-code/ch5/ch5-q/Cargo.lock | 127 + meap/meap-code/ch5/ch5-q/Cargo.toml | 7 + meap/meap-code/ch5/ch5-q/src/lib.rs | 76 + .../ch5/ch5-sat-messaging/msg-with-refs/Cargo.lock | 4 + .../ch5/ch5-sat-messaging/msg-with-refs/Cargo.toml | 6 + .../ch5-sat-messaging/msg-with-refs/src/main.rs | 51 + meap/meap-code/ch5/ch5-to-oblivion.rs | 11 + meap/meap-code/ch5/ch5-u8-to-mock-rand.rs | 17 + meap/meap-code/ch5/ch5-visualising-f32.rs | 44 + meap/meap-code/ch6/ch6-gentext/Cargo.lock | 4 + meap/meap-code/ch6/ch6-gentext/Cargo.toml | 6 + meap/meap-code/ch6/ch6-gentext/src/main.rs | 41 + .../ch6/ch6-heap-vs-stack-intro/Cargo.lock | 4 + .../ch6/ch6-heap-vs-stack-intro/Cargo.toml | 6 + .../ch6/ch6-heap-vs-stack-intro/src/main.rs | 6 + meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.lock | 46 + meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.toml | 7 + meap/meap-code/ch6/ch6-heap-vs-stack/src/main.rs | 16 + meap/meap-code/ch6/ch6-meminfo-win/Cargo.lock | 31 + meap/meap-code/ch6/ch6-meminfo-win/Cargo.toml | 9 + meap/meap-code/ch6/ch6-meminfo-win/src/main.rs | 59 + meap/meap-code/ch6/ch6-memscan-1/Cargo.lock | 4 + meap/meap-code/ch6/ch6-memscan-1/Cargo.toml | 6 + meap/meap-code/ch6/ch6-memscan-1/src/main.rs | 14 + meap/meap-code/ch6/ch6-memscan-2/Cargo.lock | 4 + meap/meap-code/ch6/ch6-memscan-2/Cargo.toml | 6 + meap/meap-code/ch6/ch6-memscan-2/src/main.rs | 14 + meap/meap-code/ch6/ch6-memscan-3/Cargo.lock | 4 + meap/meap-code/ch6/ch6-memscan-3/Cargo.toml | 6 + meap/meap-code/ch6/ch6-memscan-3/src/main.rs | 21 + meap/meap-code/ch6/ch6-particles/Cargo.lock | 1239 + meap/meap-code/ch6/ch6-particles/Cargo.toml | 16 + meap/meap-code/ch6/ch6-particles/Dockerfile | 7 + meap/meap-code/ch6/ch6-particles/Vagrantfile | 17 + meap/meap-code/ch6/ch6-particles/src/main.rs | 170 + .../allocation-times-by-allocation-size.png | Bin 0 -> 110328 bytes .../plot-allocation-times-by-allocation-size.plot | 34 + meap/meap-code/ch6/ch6-tracing-output/trace.tsv | 644480 ++++++++++++++++++ meap/meap-code/ch9/Vagrantfile | 29 + meap/meap-code/ch9/ch9-clock0/Cargo.toml | 10 + meap/meap-code/ch9/ch9-clock0/src/main.rs | 8 + meap/meap-code/ch9/ch9-clock1/Cargo.toml | 11 + meap/meap-code/ch9/ch9-clock1/src/main.rs | 53 + meap/meap-code/ch9/ch9-clock2/Cargo.toml | 19 + meap/meap-code/ch9/ch9-clock2/src/main.rs | 132 + meap/meap-code/ch9/ch9-clock3/Cargo.toml | 19 + meap/meap-code/ch9/ch9-clock3/Dockerfile | 10 + meap/meap-code/ch9/ch9-clock3/src/main.rs | 333 + meap/meap-code/ch9/ch9-sao-paulo/Cargo.toml | 8 + meap/meap-code/ch9/ch9-sao-paulo/src/main.rs | 18 + minigrep/Cargo.lock | 4 - minigrep/Cargo.toml | 8 - minigrep/src/lib.rs | 96 - minigrep/src/main.rs | 17 - oop/Cargo.lock | 4 - oop/Cargo.toml | 7 - oop/src/lib.rs | 41 - oop/src/main.rs | 56 - ownership/Cargo.lock | 4 - ownership/Cargo.toml | 7 - ownership/src/main.rs | 51 - packages/my-project/Cargo.lock | 4 - packages/my-project/Cargo.toml | 7 - packages/my-project/src/main.rs | 82 - packages/my-project/src/sound.rs | 1 - packages/my-project/src/sound/instrument.rs | 3 - patterns/Cargo.lock | 4 - patterns/Cargo.toml | 7 - patterns/src/main.rs | 316 - piglatin/Cargo.lock | 4 - piglatin/Cargo.toml | 7 - piglatin/src/main.rs | 38 - readme.md | 4 - rust-book/add/Cargo.lock | 11 + rust-book/add/Cargo.toml | 7 + rust-book/add/add-one/Cargo.toml | 8 + rust-book/add/add-one/src/lib.rs | 11 + rust-book/add/adder/Cargo.toml | 9 + rust-book/add/adder/src/main.rs | 6 + rust-book/adder/Cargo.lock | 4 + rust-book/adder/Cargo.toml | 7 + rust-book/adder/src/lib.rs | 92 + rust-book/advanced/adv-fn-closure/Cargo.lock | 11 + rust-book/advanced/adv-fn-closure/Cargo.toml | 8 + rust-book/advanced/adv-fn-closure/src/main.rs | 79 + rust-book/advanced/adv-lifetimes/Cargo.lock | 4 + rust-book/advanced/adv-lifetimes/Cargo.toml | 7 + rust-book/advanced/adv-lifetimes/src/main.rs | 36 + rust-book/advanced/adv-traits/Cargo.lock | 4 + rust-book/advanced/adv-traits/Cargo.toml | 7 + rust-book/advanced/adv-traits/src/main.rs | 163 + rust-book/advanced/adv-types/Cargo.lock | 4 + rust-book/advanced/adv-types/Cargo.toml | 7 + rust-book/advanced/adv-types/src/main.rs | 41 + rust-book/advanced/hello_macro/Cargo.toml | 7 + rust-book/advanced/hello_macro/src/lib.rs | 3 + rust-book/advanced/unsafe-rust/Cargo.lock | 4 + rust-book/advanced/unsafe-rust/Cargo.toml | 7 + rust-book/advanced/unsafe-rust/src/main.rs | 62 + rust-book/blog/Cargo.lock | 4 + rust-book/blog/Cargo.toml | 7 + rust-book/blog/src/lib.rs | 127 + rust-book/blog/src/main.rs | 36 + rust-book/collections/Cargo.lock | 4 + rust-book/collections/Cargo.toml | 7 + rust-book/collections/src/main.rs | 133 + rust-book/concurrency/Cargo.lock | 4 + rust-book/concurrency/Cargo.toml | 7 + rust-book/concurrency/src/main.rs | 137 + rust-book/control/Cargo.lock | 4 + rust-book/control/Cargo.toml | 7 + rust-book/control/src/main.rs | 7 + rust-book/crates/Cargo.lock | 4 + rust-book/crates/Cargo.toml | 7 + rust-book/crates/src/lib.rs | 33 + rust-book/crates/src/main.rs | 8 + rust-book/employees/Cargo.lock | 4 + rust-book/employees/Cargo.toml | 7 + rust-book/employees/src/main.rs | 181 + rust-book/enums/Cargo.lock | 4 + rust-book/enums/Cargo.toml | 7 + rust-book/enums/src/main.rs | 12 + rust-book/enums/src/main1.rs | 48 + rust-book/errors/Cargo.lock | 4 + rust-book/errors/Cargo.toml | 7 + rust-book/errors/src/main.rs | 38 + rust-book/fibonacci/Cargo.lock | 4 + rust-book/fibonacci/Cargo.toml | 7 + rust-book/fibonacci/src/main.rs | 31 + rust-book/ftoctof/Cargo.lock | 4 + rust-book/ftoctof/Cargo.toml | 7 + rust-book/ftoctof/src/main.rs | 43 + rust-book/functional/Cargo.lock | 4 + rust-book/functional/Cargo.toml | 7 + rust-book/functional/src/main.rs | 188 + rust-book/functions/Cargo.lock | 4 + rust-book/functions/Cargo.toml | 7 + rust-book/functions/src/main.rs | 10 + rust-book/generics/Cargo.lock | 4 + rust-book/generics/Cargo.toml | 7 + rust-book/generics/src/main.rs | 68 + rust-book/guessing-game/Cargo.lock | 80 + rust-book/guessing-game/Cargo.toml | 10 + rust-book/guessing-game/src/main.rs | 36 + rust-book/hello_server/404.html | 19 + rust-book/hello_server/Cargo.lock | 4 + rust-book/hello_server/Cargo.toml | 7 + rust-book/hello_server/hello.html | 18 + rust-book/hello_server/src/bin/main.rs | 46 + rust-book/hello_server/src/lib.rs | 117 + rust-book/hello_world/hello_cargo/Cargo.lock | 4 + rust-book/hello_world/hello_cargo/Cargo.toml | 7 + rust-book/hello_world/hello_cargo/src/main.rs | 3 + rust-book/hello_world/main.exe | Bin 0 -> 4129619 bytes rust-book/hello_world/main.rs | 4 + rust-book/horcrux/Cargo.toml | 7 + rust-book/horcrux/src/main.rs | 3 + rust-book/lifetimes/Cargo.lock | 4 + rust-book/lifetimes/Cargo.toml | 7 + rust-book/lifetimes/src/main.rs | 43 + rust-book/mathsssss/Cargo.lock | 4 + rust-book/mathsssss/Cargo.toml | 7 + rust-book/mathsssss/src/main.rs | 61 + rust-book/minigrep/Cargo.lock | 4 + rust-book/minigrep/Cargo.toml | 8 + rust-book/minigrep/src/lib.rs | 96 + rust-book/minigrep/src/main.rs | 17 + 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 + rust-book/ownership/Cargo.lock | 4 + rust-book/ownership/Cargo.toml | 7 + rust-book/ownership/src/main.rs | 51 + rust-book/packages/my-project/Cargo.lock | 4 + rust-book/packages/my-project/Cargo.toml | 7 + rust-book/packages/my-project/src/main.rs | 82 + rust-book/packages/my-project/src/sound.rs | 1 + .../packages/my-project/src/sound/instrument.rs | 3 + rust-book/patterns/Cargo.lock | 4 + rust-book/patterns/Cargo.toml | 7 + rust-book/patterns/src/main.rs | 316 + rust-book/piglatin/Cargo.lock | 4 + rust-book/piglatin/Cargo.toml | 7 + rust-book/piglatin/src/main.rs | 38 + rust-book/smart-pointers/Cargo.lock | 4 + rust-book/smart-pointers/Cargo.toml | 7 + rust-book/smart-pointers/src/main.rs | 234 + rust-book/structs/Cargo.lock | 4 + rust-book/structs/Cargo.toml | 7 + rust-book/structs/src/main.rs | 32 + rust-book/structs/src/main.rs.bak | 36 + rust-book/testing/Cargo.lock | 4 + rust-book/testing/Cargo.toml | 7 + rust-book/testing/src/lib.rs | 32 + rust-book/testing/tests/common/mod.rs | 3 + rust-book/testing/tests/integration_test.rs | 9 + rust-book/traits/Cargo.lock | 4 + rust-book/traits/Cargo.toml | 7 + rust-book/traits/src/main.rs | 114 + rust-book/variables/Cargo.lock | 4 + rust-book/variables/Cargo.toml | 7 + rust-book/variables/src/main.rs | 6 + rust-book/xmas/Cargo.lock | 4 + rust-book/xmas/Cargo.toml | 7 + rust-book/xmas/src/main.rs | 42 + smart-pointers/Cargo.lock | 4 - smart-pointers/Cargo.toml | 7 - smart-pointers/src/main.rs | 234 - structs/Cargo.lock | 4 - structs/Cargo.toml | 7 - structs/src/main.rs | 32 - structs/src/main.rs.bak | 36 - testing/Cargo.lock | 4 - testing/Cargo.toml | 7 - testing/src/lib.rs | 32 - testing/tests/common/mod.rs | 3 - testing/tests/integration_test.rs | 9 - traits/Cargo.lock | 4 - traits/Cargo.toml | 7 - traits/src/main.rs | 114 - variables/Cargo.lock | 4 - variables/Cargo.toml | 7 - variables/src/main.rs | 6 - xmas/Cargo.lock | 4 - xmas/Cargo.toml | 7 - xmas/out.txt | 114 - xmas/src/main.rs | 42 - 427 files changed, 654048 insertions(+), 3803 deletions(-) mode change 100644 => 100755 .gitignore delete mode 100644 add/Cargo.lock delete mode 100644 add/Cargo.toml delete mode 100644 add/add-one/Cargo.toml delete mode 100644 add/add-one/src/lib.rs delete mode 100644 add/adder/Cargo.toml delete mode 100644 add/adder/src/main.rs delete mode 100644 adder/Cargo.lock delete mode 100644 adder/Cargo.toml delete mode 100644 adder/src/lib.rs delete mode 100644 advanced/adv-fn-closure/Cargo.lock delete mode 100644 advanced/adv-fn-closure/Cargo.toml delete mode 100644 advanced/adv-fn-closure/src/main.rs delete mode 100644 advanced/adv-lifetimes/Cargo.lock delete mode 100644 advanced/adv-lifetimes/Cargo.toml delete mode 100644 advanced/adv-lifetimes/src/main.rs delete mode 100644 advanced/adv-traits/Cargo.lock delete mode 100644 advanced/adv-traits/Cargo.toml delete mode 100644 advanced/adv-traits/src/main.rs delete mode 100644 advanced/adv-types/Cargo.lock delete mode 100644 advanced/adv-types/Cargo.toml delete mode 100644 advanced/adv-types/src/main.rs delete mode 100644 advanced/hello_macro/Cargo.toml delete mode 100644 advanced/hello_macro/src/lib.rs delete mode 100644 advanced/unsafe-rust/Cargo.lock delete mode 100644 advanced/unsafe-rust/Cargo.toml delete mode 100644 advanced/unsafe-rust/src/main.rs delete mode 100644 blog/Cargo.lock delete mode 100644 blog/Cargo.toml delete mode 100644 blog/src/lib.rs delete mode 100644 blog/src/main.rs delete mode 100755 collections/Cargo.lock delete mode 100755 collections/Cargo.toml delete mode 100755 collections/src/main.rs delete mode 100644 concurrency/Cargo.lock delete mode 100644 concurrency/Cargo.toml delete mode 100644 concurrency/src/main.rs delete mode 100755 control/Cargo.lock delete mode 100755 control/Cargo.toml delete mode 100755 control/src/main.rs delete mode 100644 crates/Cargo.lock delete mode 100644 crates/Cargo.toml delete mode 100644 crates/src/lib.rs delete mode 100644 crates/src/main.rs delete mode 100644 employees/Cargo.lock delete mode 100644 employees/Cargo.toml delete mode 100644 employees/src/main.rs delete mode 100755 enums/Cargo.lock delete mode 100755 enums/Cargo.toml delete mode 100755 enums/src/main.rs delete mode 100755 enums/src/main1.rs delete mode 100644 errors/Cargo.lock delete mode 100644 errors/Cargo.toml delete mode 100644 errors/src/main.rs delete mode 100644 fibonacci/Cargo.lock delete mode 100644 fibonacci/Cargo.toml delete mode 100644 fibonacci/src/main.rs delete mode 100644 ftoctof/Cargo.lock delete mode 100644 ftoctof/Cargo.toml delete mode 100644 ftoctof/src/main.rs delete mode 100644 functional/Cargo.lock delete mode 100644 functional/Cargo.toml delete mode 100644 functional/src/main.rs delete mode 100755 functions/Cargo.lock delete mode 100755 functions/Cargo.toml delete mode 100755 functions/src/main.rs delete mode 100644 generics/Cargo.lock delete mode 100644 generics/Cargo.toml delete mode 100644 generics/src/main.rs delete mode 100755 guessing-game/Cargo.lock delete mode 100755 guessing-game/Cargo.toml delete mode 100755 guessing-game/src/main.rs delete mode 100644 hello_server/404.html delete mode 100644 hello_server/Cargo.lock delete mode 100644 hello_server/Cargo.toml delete mode 100644 hello_server/hello.html delete mode 100644 hello_server/src/bin/main.rs delete mode 100644 hello_server/src/lib.rs delete mode 100755 hello_world/hello_cargo/Cargo.lock delete mode 100755 hello_world/hello_cargo/Cargo.toml delete mode 100755 hello_world/hello_cargo/src/main.rs delete mode 100755 hello_world/main.exe delete mode 100755 hello_world/main.rs delete mode 100755 horcrux/Cargo.toml delete mode 100755 horcrux/src/main.rs delete mode 100644 lifetimes/Cargo.lock delete mode 100644 lifetimes/Cargo.toml delete mode 100644 lifetimes/src/main.rs delete mode 100644 mathsssss/Cargo.lock delete mode 100644 mathsssss/Cargo.toml delete mode 100644 mathsssss/src/main.rs create mode 100644 meap/ch1/Cargo.lock create mode 100644 meap/ch1/Cargo.toml create mode 100644 meap/ch1/src/main.rs create mode 100644 meap/ch2/Cargo.lock create mode 100644 meap/ch2/Cargo.toml create mode 100644 meap/ch2/src/main.rs create mode 100644 meap/meap-code/ch1/ch1-animals-specialization.rs create mode 100644 meap/meap-code/ch1/ch1-animals-tuple-structs.rs create mode 100644 meap/meap-code/ch1/ch1-animals.rs create mode 100644 meap/meap-code/ch1/ch1-escape-html.rs create mode 100644 meap/meap-code/ch1/ch1-hashmap-hashset.rs create mode 100644 meap/meap-code/ch1/ch1-hello2.rs create mode 100644 meap/meap-code/ch1/ch1-save-user-data.rs create mode 100644 meap/meap-code/ch1/ch1-time-api/Cargo.toml create mode 100644 meap/meap-code/ch1/ch1-time-api/src/main.rs create mode 100644 meap/meap-code/ch1/ch1-word-counts.rs create mode 100644 meap/meap-code/ch10/Vagrantfile create mode 100644 meap/meap-code/ch10/ch10-basic-handler/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-basic-handler/Dockerfile create mode 100644 meap/meap-code/ch10/ch10-basic-handler/Makefile create mode 100644 meap/meap-code/ch10/ch10-basic-handler/src/main.rs create mode 100644 meap/meap-code/ch10/ch10-callstack/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-callstack/src/main.rs create mode 100644 meap/meap-code/ch10/ch10-handle/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-handle/src/main.rs create mode 100644 meap/meap-code/ch10/ch10-handler/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-handler/src/main.rs create mode 100644 meap/meap-code/ch10/ch10-ignore/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-ignore/src/main.rs create mode 100644 meap/meap-code/ch10/ch10-sixty/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-sixty/src/main.rs create mode 100644 meap/meap-code/ch10/ch10-sjlj/Cargo.toml create mode 100644 meap/meap-code/ch10/ch10-sjlj/Dockerfile create mode 100644 meap/meap-code/ch10/ch10-sjlj/Makefile create mode 100644 meap/meap-code/ch10/ch10-sjlj/src/main.rs create mode 100644 meap/meap-code/ch2/ch2-3arrays.rs create mode 100644 meap/meap-code/ch2/ch2-add-with-lifetimes.rs create mode 100644 meap/meap-code/ch2/ch2-add-with-lifetimes_.rs create mode 100644 meap/meap-code/ch2/ch2-bufreader-lines.rs create mode 100644 meap/meap-code/ch2/ch2-define-type.rs create mode 100644 meap/meap-code/ch2/ch2-first-steps.rs create mode 100644 meap/meap-code/ch2/ch2-generic-add.rs create mode 100644 meap/meap-code/ch2/ch2-intro-to-numbers.rs create mode 100644 meap/meap-code/ch2/ch2-intro.rs create mode 100644 meap/meap-code/ch2/ch2-introducing-vec.rs create mode 100644 meap/meap-code/ch2/ch2-match-needles.rs create mode 100644 meap/meap-code/ch2/ch2-needle-in-haystack.rs create mode 100644 meap/meap-code/ch2/ch2-non-base2.rs create mode 100644 meap/meap-code/ch2/ch2-read-file-iter-lines.rs create mode 100644 meap/meap-code/ch2/ch2-read-file.rs create mode 100644 meap/meap-code/ch2/ch2-sensor-emulator.rs create mode 100644 meap/meap-code/ch2/ch2-simple-with-enumerate.rs create mode 100644 meap/meap-code/ch2/ch2-simple-with-linenums create mode 100644 meap/meap-code/ch2/ch2-simple-with-linenums.rs create mode 100644 meap/meap-code/ch2/ch2-sparse-matrix.rs create mode 100644 meap/meap-code/ch2/ch2-str-simple-pattern.rs create mode 100644 meap/meap-code/ch3/ch3-adding-pub-to-file.rs create mode 100644 meap/meap-code/ch3/ch3-anystring-macro.rs create mode 100644 meap/meap-code/ch3/ch3-defining-files-neatly.rs create mode 100644 meap/meap-code/ch3/ch3-defining-files.rs create mode 100644 meap/meap-code/ch3/ch3-error-1.rs create mode 100644 meap/meap-code/ch3/ch3-file-doced.rs create mode 100644 meap/meap-code/ch3/ch3-file-states.rs create mode 100644 meap/meap-code/ch3/ch3-files-with-modes.rs create mode 100644 meap/meap-code/ch3/ch3-implementing-display.rs create mode 100644 meap/meap-code/ch3/ch3-mock-file.rs create mode 100644 meap/meap-code/ch3/ch3-newtype-pattern.rs create mode 100644 meap/meap-code/ch3/ch3-not-quite-file-1.rs create mode 100644 meap/meap-code/ch3/ch3-not-quite-file-2.rs create mode 100644 meap/meap-code/ch3/ch3-not-quite-file-3.rs create mode 100644 meap/meap-code/ch3/ch3-not-quite-file-4.rs create mode 100644 meap/meap-code/ch3/ch3-parse-log.rs create mode 100644 meap/meap-code/ch3/ch3-public-file.rs create mode 100644 meap/meap-code/ch3/ch3-return-result.rs create mode 100644 meap/meap-code/ch3/ch3-skeleton-read-trait.rs create mode 100644 meap/meap-code/ch3/ch3-string-macro.rs create mode 100644 meap/meap-code/ch3/filebasics/Cargo.toml create mode 100644 meap/meap-code/ch3/filebasics/src/main.rs create mode 100644 meap/meap-code/ch3/fileresult/Cargo.toml create mode 100644 meap/meap-code/ch3/fileresult/src/main.rs create mode 100644 meap/meap-code/ch3/globalerror/Cargo.toml create mode 100644 meap/meap-code/ch3/globalerror/src/main.rs create mode 100644 meap/meap-code/ch4/ch4-check-sats-1.rs create mode 100644 meap/meap-code/ch4/ch4-check-sats-3.rs create mode 100644 meap/meap-code/ch4/ch4-check-sats-clone-and-copy-traits.rs create mode 100644 meap/meap-code/ch4/ch4-check-sats-with-copy-trait.rs create mode 100644 meap/meap-code/ch4/ch4-rc-groundstation.rs create mode 100644 meap/meap-code/ch4/ch4-rc-refcell-groundstation.rs create mode 100644 meap/meap-code/ch4/ch4-sat-mailbox.rs create mode 100644 meap/meap-code/ch4/ch4-short-lived-strategy.rs create mode 100644 meap/meap-code/ch5/ch5-cpu1/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-cpu1/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-cpu1/src/main.rs create mode 100644 meap/meap-code/ch5/ch5-cpu2/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-cpu2/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-cpu2/src/main.rs create mode 100644 meap/meap-code/ch5/ch5-cpu3/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-cpu3/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-cpu3/src/main.rs create mode 100644 meap/meap-code/ch5/ch5-f32-as-u32.rs create mode 100644 meap/meap-code/ch5/ch5-fixed-width.rs create mode 100644 meap/meap-code/ch5/ch5-genfib/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-genfib/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-genfib/src/main.rs create mode 100644 meap/meap-code/ch5/ch5-impossible-add.rs create mode 100644 meap/meap-code/ch5/ch5-message-store/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-message-store/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-message-store/src/main.rs create mode 100644 meap/meap-code/ch5/ch5-q/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-q/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-q/src/lib.rs create mode 100644 meap/meap-code/ch5/ch5-sat-messaging/msg-with-refs/Cargo.lock create mode 100644 meap/meap-code/ch5/ch5-sat-messaging/msg-with-refs/Cargo.toml create mode 100644 meap/meap-code/ch5/ch5-sat-messaging/msg-with-refs/src/main.rs create mode 100644 meap/meap-code/ch5/ch5-to-oblivion.rs create mode 100644 meap/meap-code/ch5/ch5-u8-to-mock-rand.rs create mode 100644 meap/meap-code/ch5/ch5-visualising-f32.rs create mode 100644 meap/meap-code/ch6/ch6-gentext/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-gentext/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-gentext/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-heap-vs-stack-intro/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-heap-vs-stack-intro/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-heap-vs-stack-intro/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-heap-vs-stack/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-heap-vs-stack/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-meminfo-win/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-meminfo-win/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-meminfo-win/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-memscan-1/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-memscan-1/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-memscan-1/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-memscan-2/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-memscan-2/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-memscan-2/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-memscan-3/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-memscan-3/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-memscan-3/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-particles/Cargo.lock create mode 100644 meap/meap-code/ch6/ch6-particles/Cargo.toml create mode 100644 meap/meap-code/ch6/ch6-particles/Dockerfile create mode 100644 meap/meap-code/ch6/ch6-particles/Vagrantfile create mode 100644 meap/meap-code/ch6/ch6-particles/src/main.rs create mode 100644 meap/meap-code/ch6/ch6-tracing-output/allocation-times-by-allocation-size.png create mode 100644 meap/meap-code/ch6/ch6-tracing-output/plot-allocation-times-by-allocation-size.plot create mode 100644 meap/meap-code/ch6/ch6-tracing-output/trace.tsv create mode 100644 meap/meap-code/ch9/Vagrantfile create mode 100644 meap/meap-code/ch9/ch9-clock0/Cargo.toml create mode 100644 meap/meap-code/ch9/ch9-clock0/src/main.rs create mode 100644 meap/meap-code/ch9/ch9-clock1/Cargo.toml create mode 100644 meap/meap-code/ch9/ch9-clock1/src/main.rs create mode 100644 meap/meap-code/ch9/ch9-clock2/Cargo.toml create mode 100644 meap/meap-code/ch9/ch9-clock2/src/main.rs create mode 100644 meap/meap-code/ch9/ch9-clock3/Cargo.toml create mode 100644 meap/meap-code/ch9/ch9-clock3/Dockerfile create mode 100644 meap/meap-code/ch9/ch9-clock3/src/main.rs create mode 100644 meap/meap-code/ch9/ch9-sao-paulo/Cargo.toml create mode 100644 meap/meap-code/ch9/ch9-sao-paulo/src/main.rs delete mode 100644 minigrep/Cargo.lock delete mode 100644 minigrep/Cargo.toml delete mode 100644 minigrep/src/lib.rs delete mode 100644 minigrep/src/main.rs delete mode 100644 oop/Cargo.lock delete mode 100644 oop/Cargo.toml delete mode 100644 oop/src/lib.rs delete mode 100644 oop/src/main.rs delete mode 100755 ownership/Cargo.lock delete mode 100755 ownership/Cargo.toml delete mode 100755 ownership/src/main.rs delete mode 100755 packages/my-project/Cargo.lock delete mode 100755 packages/my-project/Cargo.toml delete mode 100755 packages/my-project/src/main.rs delete mode 100755 packages/my-project/src/sound.rs delete mode 100755 packages/my-project/src/sound/instrument.rs delete mode 100644 patterns/Cargo.lock delete mode 100644 patterns/Cargo.toml delete mode 100644 patterns/src/main.rs delete mode 100644 piglatin/Cargo.lock delete mode 100644 piglatin/Cargo.toml delete mode 100644 piglatin/src/main.rs delete mode 100644 readme.md create mode 100755 rust-book/add/Cargo.lock create mode 100755 rust-book/add/Cargo.toml create mode 100755 rust-book/add/add-one/Cargo.toml create mode 100755 rust-book/add/add-one/src/lib.rs create mode 100755 rust-book/add/adder/Cargo.toml create mode 100755 rust-book/add/adder/src/main.rs create mode 100755 rust-book/adder/Cargo.lock create mode 100755 rust-book/adder/Cargo.toml create mode 100755 rust-book/adder/src/lib.rs create mode 100755 rust-book/advanced/adv-fn-closure/Cargo.lock create mode 100755 rust-book/advanced/adv-fn-closure/Cargo.toml create mode 100755 rust-book/advanced/adv-fn-closure/src/main.rs create mode 100755 rust-book/advanced/adv-lifetimes/Cargo.lock create mode 100755 rust-book/advanced/adv-lifetimes/Cargo.toml create mode 100755 rust-book/advanced/adv-lifetimes/src/main.rs create mode 100755 rust-book/advanced/adv-traits/Cargo.lock create mode 100755 rust-book/advanced/adv-traits/Cargo.toml create mode 100755 rust-book/advanced/adv-traits/src/main.rs create mode 100755 rust-book/advanced/adv-types/Cargo.lock create mode 100755 rust-book/advanced/adv-types/Cargo.toml create mode 100755 rust-book/advanced/adv-types/src/main.rs create mode 100755 rust-book/advanced/hello_macro/Cargo.toml create mode 100755 rust-book/advanced/hello_macro/src/lib.rs create mode 100755 rust-book/advanced/unsafe-rust/Cargo.lock create mode 100755 rust-book/advanced/unsafe-rust/Cargo.toml create mode 100755 rust-book/advanced/unsafe-rust/src/main.rs create mode 100755 rust-book/blog/Cargo.lock create mode 100755 rust-book/blog/Cargo.toml create mode 100755 rust-book/blog/src/lib.rs create mode 100755 rust-book/blog/src/main.rs create mode 100755 rust-book/collections/Cargo.lock create mode 100755 rust-book/collections/Cargo.toml create mode 100755 rust-book/collections/src/main.rs create mode 100755 rust-book/concurrency/Cargo.lock create mode 100755 rust-book/concurrency/Cargo.toml create mode 100755 rust-book/concurrency/src/main.rs create mode 100755 rust-book/control/Cargo.lock create mode 100755 rust-book/control/Cargo.toml create mode 100755 rust-book/control/src/main.rs create mode 100755 rust-book/crates/Cargo.lock create mode 100755 rust-book/crates/Cargo.toml create mode 100755 rust-book/crates/src/lib.rs create mode 100755 rust-book/crates/src/main.rs create mode 100755 rust-book/employees/Cargo.lock create mode 100755 rust-book/employees/Cargo.toml create mode 100755 rust-book/employees/src/main.rs create mode 100755 rust-book/enums/Cargo.lock create mode 100755 rust-book/enums/Cargo.toml create mode 100755 rust-book/enums/src/main.rs create mode 100755 rust-book/enums/src/main1.rs create mode 100755 rust-book/errors/Cargo.lock create mode 100755 rust-book/errors/Cargo.toml create mode 100755 rust-book/errors/src/main.rs create mode 100755 rust-book/fibonacci/Cargo.lock create mode 100755 rust-book/fibonacci/Cargo.toml create mode 100755 rust-book/fibonacci/src/main.rs create mode 100755 rust-book/ftoctof/Cargo.lock create mode 100755 rust-book/ftoctof/Cargo.toml create mode 100755 rust-book/ftoctof/src/main.rs create mode 100755 rust-book/functional/Cargo.lock create mode 100755 rust-book/functional/Cargo.toml create mode 100755 rust-book/functional/src/main.rs create mode 100755 rust-book/functions/Cargo.lock create mode 100755 rust-book/functions/Cargo.toml create mode 100755 rust-book/functions/src/main.rs create mode 100755 rust-book/generics/Cargo.lock create mode 100755 rust-book/generics/Cargo.toml create mode 100755 rust-book/generics/src/main.rs create mode 100755 rust-book/guessing-game/Cargo.lock create mode 100755 rust-book/guessing-game/Cargo.toml create mode 100755 rust-book/guessing-game/src/main.rs create mode 100755 rust-book/hello_server/404.html create mode 100755 rust-book/hello_server/Cargo.lock create mode 100755 rust-book/hello_server/Cargo.toml create mode 100755 rust-book/hello_server/hello.html create mode 100755 rust-book/hello_server/src/bin/main.rs create mode 100755 rust-book/hello_server/src/lib.rs create mode 100755 rust-book/hello_world/hello_cargo/Cargo.lock create mode 100755 rust-book/hello_world/hello_cargo/Cargo.toml create mode 100755 rust-book/hello_world/hello_cargo/src/main.rs create mode 100755 rust-book/hello_world/main.exe create mode 100755 rust-book/hello_world/main.rs create mode 100755 rust-book/horcrux/Cargo.toml create mode 100755 rust-book/horcrux/src/main.rs create mode 100755 rust-book/lifetimes/Cargo.lock create mode 100755 rust-book/lifetimes/Cargo.toml create mode 100755 rust-book/lifetimes/src/main.rs create mode 100755 rust-book/mathsssss/Cargo.lock create mode 100755 rust-book/mathsssss/Cargo.toml create mode 100755 rust-book/mathsssss/src/main.rs create mode 100755 rust-book/minigrep/Cargo.lock create mode 100755 rust-book/minigrep/Cargo.toml create mode 100755 rust-book/minigrep/src/lib.rs create mode 100755 rust-book/minigrep/src/main.rs 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 create mode 100755 rust-book/ownership/Cargo.lock create mode 100755 rust-book/ownership/Cargo.toml create mode 100755 rust-book/ownership/src/main.rs create mode 100755 rust-book/packages/my-project/Cargo.lock create mode 100755 rust-book/packages/my-project/Cargo.toml create mode 100755 rust-book/packages/my-project/src/main.rs create mode 100755 rust-book/packages/my-project/src/sound.rs create mode 100755 rust-book/packages/my-project/src/sound/instrument.rs create mode 100755 rust-book/patterns/Cargo.lock create mode 100755 rust-book/patterns/Cargo.toml create mode 100755 rust-book/patterns/src/main.rs create mode 100755 rust-book/piglatin/Cargo.lock create mode 100755 rust-book/piglatin/Cargo.toml create mode 100755 rust-book/piglatin/src/main.rs create mode 100755 rust-book/smart-pointers/Cargo.lock create mode 100755 rust-book/smart-pointers/Cargo.toml create mode 100755 rust-book/smart-pointers/src/main.rs create mode 100755 rust-book/structs/Cargo.lock create mode 100755 rust-book/structs/Cargo.toml create mode 100755 rust-book/structs/src/main.rs create mode 100755 rust-book/structs/src/main.rs.bak create mode 100755 rust-book/testing/Cargo.lock create mode 100755 rust-book/testing/Cargo.toml create mode 100755 rust-book/testing/src/lib.rs create mode 100755 rust-book/testing/tests/common/mod.rs create mode 100755 rust-book/testing/tests/integration_test.rs create mode 100755 rust-book/traits/Cargo.lock create mode 100755 rust-book/traits/Cargo.toml create mode 100755 rust-book/traits/src/main.rs create mode 100755 rust-book/variables/Cargo.lock create mode 100755 rust-book/variables/Cargo.toml create mode 100755 rust-book/variables/src/main.rs create mode 100755 rust-book/xmas/Cargo.lock create mode 100755 rust-book/xmas/Cargo.toml create mode 100755 rust-book/xmas/src/main.rs delete mode 100644 smart-pointers/Cargo.lock delete mode 100644 smart-pointers/Cargo.toml delete mode 100644 smart-pointers/src/main.rs delete mode 100755 structs/Cargo.lock delete mode 100755 structs/Cargo.toml delete mode 100755 structs/src/main.rs delete mode 100755 structs/src/main.rs.bak delete mode 100644 testing/Cargo.lock delete mode 100644 testing/Cargo.toml delete mode 100644 testing/src/lib.rs delete mode 100644 testing/tests/common/mod.rs delete mode 100644 testing/tests/integration_test.rs delete mode 100644 traits/Cargo.lock delete mode 100644 traits/Cargo.toml delete mode 100644 traits/src/main.rs delete mode 100755 variables/Cargo.lock delete mode 100755 variables/Cargo.toml delete mode 100755 variables/src/main.rs delete mode 100644 xmas/Cargo.lock delete mode 100644 xmas/Cargo.toml delete mode 100644 xmas/out.txt delete mode 100644 xmas/src/main.rs diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/add/Cargo.lock b/add/Cargo.lock deleted file mode 100644 index 64cb0d1..0000000 --- a/add/Cargo.lock +++ /dev/null @@ -1,11 +0,0 @@ -[[package]] -name = "add-one" -version = "0.1.0" - -[[package]] -name = "adder" -version = "0.1.0" -dependencies = [ - "add-one 0.1.0", -] - diff --git a/add/Cargo.toml b/add/Cargo.toml deleted file mode 100644 index 37b9688..0000000 --- a/add/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[workspace] - -members = [ - "adder", - "add-one", -] - diff --git a/add/add-one/Cargo.toml b/add/add-one/Cargo.toml deleted file mode 100644 index 88d65d1..0000000 --- a/add/add-one/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "add-one" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] -rand = "0.3.14" diff --git a/add/add-one/src/lib.rs b/add/add-one/src/lib.rs deleted file mode 100644 index fe3583e..0000000 --- a/add/add-one/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -pub fn add_one(x: i32) -> i32 { - x + 1 -} - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} diff --git a/add/adder/Cargo.toml b/add/adder/Cargo.toml deleted file mode 100644 index 1fefcc2..0000000 --- a/add/adder/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "adder" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] -add-one = { path = "../add-one" } - diff --git a/add/adder/src/main.rs b/add/adder/src/main.rs deleted file mode 100644 index 7099fb8..0000000 --- a/add/adder/src/main.rs +++ /dev/null @@ -1,6 +0,0 @@ -use add_one; - -fn main() { - let num = 10; - println!("{}", add_one::add_one(num)); -} diff --git a/adder/Cargo.lock b/adder/Cargo.lock deleted file mode 100644 index 4fb18f9..0000000 --- a/adder/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "adder" -version = "0.1.0" - diff --git a/adder/Cargo.toml b/adder/Cargo.toml deleted file mode 100644 index 5224ea1..0000000 --- a/adder/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "adder" -version = "0.1.0" -authors = ["carpenat"] -edition = "2018" - -[dependencies] diff --git a/adder/src/lib.rs b/adder/src/lib.rs deleted file mode 100644 index bc79931..0000000 --- a/adder/src/lib.rs +++ /dev/null @@ -1,92 +0,0 @@ -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() -> Result<(), String> { - if 2 + 2 == 4 { - Ok(()) - } - else { - Err(String::from("two plus two does not equal four")) - } - } - - #[test] - fn larger_can_hold_smaller() { - let larger = Rectangle { length: 8, width: 7 }; - let smaller = Rectangle { length: 5, width: 1 }; - - assert!(larger.can_hold(&smaller)); - } - - #[test] - fn smaller_cannot_hold_larger() { - let larger = Rectangle { length: 8, width: 7 }; - let smaller = Rectangle { length: 5, width: 1 }; - - assert!(!smaller.can_hold(&larger)); - } - - #[test] - fn it_adds_two() { - assert_eq!(4, add_two(2)); - } - - #[test] - fn it_wont_add_two() { - assert_ne!(4, add_two(3)); - } - - #[test] - fn greeting_contains_name() { - let result = greeting("adam"); - assert!(result.contains("adam")); - } - - #[test] - #[should_panic(expected = "must be between 1 and 100")] - fn greater_than_100() { - Guess::new(200); - } -} - -#[derive(Debug)] -pub struct Rectangle { - length: u32, - width: u32, -} - -pub struct Guess { - value: i32, -} - -impl Guess { - pub fn new(value: i32) -> Guess { - if value < 1 || value > 100 { - panic!("must be between 1 and 100, not {}", value); - } - //if value < 1 { - // panic!("must be greater than 1, not {}", value); - //} - //else if value > 100 { - // panic!("must be less than 100, not {}", value); - //} - - Guess { value } - } -} - -impl Rectangle { - pub fn can_hold(&self, other: &Rectangle) -> bool { - self.length > other.length && self.width > other.width - } -} - -pub fn add_two(a: i32) -> i32 { - a + 2 -} - -pub fn greeting(name: &str) -> String { - format!("hello {}", name) -} diff --git a/advanced/adv-fn-closure/Cargo.lock b/advanced/adv-fn-closure/Cargo.lock deleted file mode 100644 index 360607c..0000000 --- a/advanced/adv-fn-closure/Cargo.lock +++ /dev/null @@ -1,11 +0,0 @@ -[[package]] -name = "adv-fn-closure" -version = "0.1.0" -dependencies = [ - "hello_macro 0.1.0", -] - -[[package]] -name = "hello_macro" -version = "0.1.0" - diff --git a/advanced/adv-fn-closure/Cargo.toml b/advanced/adv-fn-closure/Cargo.toml deleted file mode 100644 index 6cd8dbd..0000000 --- a/advanced/adv-fn-closure/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "adv-fn-closure" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] -hello_macro = { path = "../hello_macro" } diff --git a/advanced/adv-fn-closure/src/main.rs b/advanced/adv-fn-closure/src/main.rs deleted file mode 100644 index 064f300..0000000 --- a/advanced/adv-fn-closure/src/main.rs +++ /dev/null @@ -1,79 +0,0 @@ -use hello_macro::HelloMacro; -//use hello_macro_derive::HelloMacro; - -struct Pancakes; - -impl HelloMacro for Pancakes { - fn hello_macro() { - println!("pancakes"); - } -} - -fn main() { - Pancakes::hello_macro(); -} - -//fn add_one(x: i32) -> i32 { -// x + 1 -//} -// -//fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { -// f(arg) + f(arg) -//} - - -//fn returns_closure() -> Box i32> { -// Box::new(|x| x + 1) -//} -// -// -//enum Status { -// Value(u32), -// Stop, -//} - - -//#[macro_export] -//macro_rules! vec { -// ( $( $x:expr ), * ) => { -// { -// let mut temp_vec = Vec::new(); -// $( -// temp_vec.push($x); -// )* -// temp_vec -// } -// }; -//} - - -//#[some_attribute] -//pub fn some_name(input: TokenStream) -> TokenStream { -//} -// -// -//fn main() { -// let answer = do_twice(add_one, 5); -// -// println!("{}", answer); - - -// let list_of_numbers = vec![1, 2, 3]; -// let list_of_strings: Vec = list_of_numbers -// .iter() -// .map(ToString::to_string) -// .collect(); -// dbg!(list_of_strings); - - -// let list_of_statuses: Vec = -// (0u32..20) -// .map(Status::Value) -// .collect(); - - - //returns_closure(); - - - -//} diff --git a/advanced/adv-lifetimes/Cargo.lock b/advanced/adv-lifetimes/Cargo.lock deleted file mode 100644 index 591810c..0000000 --- a/advanced/adv-lifetimes/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "adv-lifetimes" -version = "0.1.0" - diff --git a/advanced/adv-lifetimes/Cargo.toml b/advanced/adv-lifetimes/Cargo.toml deleted file mode 100644 index b127e9f..0000000 --- a/advanced/adv-lifetimes/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "adv-lifetimes" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/advanced/adv-lifetimes/src/main.rs b/advanced/adv-lifetimes/src/main.rs deleted file mode 100644 index 755baf4..0000000 --- a/advanced/adv-lifetimes/src/main.rs +++ /dev/null @@ -1,36 +0,0 @@ -fn main() { - let num = 5; - - let obj = Box::new(Ball { diameter: &num }) as Box; -} - -struct Context<'s>(&'s str); - -struct Parser<'c, 's: 'c> { - context: &'c Context<'s>, -} - -impl<'c, 's> Parser<'c, 's> { - fn parse(&self) -> Result<(), &'s str> { - Err(&self.context.0[1..]) - } -} - -fn parse_context(context: Context) -> Result<(), &str> { - Parser { context: &context }.parse() -} - -trait Red { } - -struct Ball<'a> { - diameter: &'a i32, -} - -impl<'a> Red for Ball<'a> { } - -struct StrWrap<'a>(&'a str); - -fn foo(string: &str) -> StrWrap<'_> { - StrWrap(string) -} - diff --git a/advanced/adv-traits/Cargo.lock b/advanced/adv-traits/Cargo.lock deleted file mode 100644 index 4fb1ae5..0000000 --- a/advanced/adv-traits/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "adv-traits" -version = "0.1.0" - diff --git a/advanced/adv-traits/Cargo.toml b/advanced/adv-traits/Cargo.toml deleted file mode 100644 index b1c5f6a..0000000 --- a/advanced/adv-traits/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "adv-traits" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/advanced/adv-traits/src/main.rs b/advanced/adv-traits/src/main.rs deleted file mode 100644 index 659883c..0000000 --- a/advanced/adv-traits/src/main.rs +++ /dev/null @@ -1,163 +0,0 @@ -//fn main() { -// println!("Hello, world!"); -//} -// -//pub trait Iterator { -// type Item; -// -// fn next(&mut self) -> Option; -//} -// -// -//#[derive(Debug, PartialEq)] -//struct Point { -// x: i32, -// y: i32, -//} -// -//impl Add for Point { -// type Output = Point; -// -// fn add(self, other: Point) -> Point { -// Point { -// x: self.x + other.x, -// y: self.y + other.y, -// } -// } -//} - -//fn main() { -// assert_eq!(Point { x: 1, y: 0 } + Point { x: 2, y: 3 }, -// Point { x: 3, y: 3 }); -// println!("Done."); -//} - -//trait Add { -// type Output; -// -// fn add(self, rhs: RHS) -> Self::Output; -//} - -//use std::ops::Add; -// -//struct Millimeters(u32); -//struct Meters(u32); -// -//impl Add for Millimeters { -// type Output = Millimeters; -// -// fn add(self, other: Meters) -> Millimeters { -// Millimeters(self.0 + (other.0 * 1000)) -// } -//} - - -//trait Pilot { -// fn fly(&self); -//} -// -//trait Wizard { -// fn fly(&self); -//} -// -//struct Human; -// -//impl Pilot for Human { -// fn fly(&self) { -// println!("Because I was inverted."); -// } -//} -// -//impl Wizard for Human { -// fn fly(&self) { -// println!("Fly, you fools."); -// } -//} -// -//impl Human { -// fn fly(&self) { -// println!("*feels real loose like a long-neck goose*"); -// } -//} -// -// -//trait Animal { -// fn baby_name() -> String; -//} -// -//struct Dog; -// -//impl Dog { -// fn baby_name() -> String { -// String::from("Spot") -// } -//} -// -//impl Animal for Dog { -// fn baby_name() -> String { -// String::from("puppy") -// } -//} - - -//fn main() { -// let person = Human; -// person.fly(); -// Pilot::fly(&person); -// Wizard::fly(&person); -// -// -// println!("A baby dog is called a {}", ::baby_name()); -// -// -// println!("Done."); -//} -// - - -//use std::fmt; -// -//trait OutlinePrint: fmt::Display { -// fn outline_print(&self) { -// let output = self.to_string(); -// let len = output.len(); -// println!("{}", "*".repeat(len + 4)); -// println!("*{}*", " ".repeat(len + 2)); -// println!("* {} *", output); -// println!("*{}*", " ".repeat(len + 2)); -// println!("{}", "*".repeat(len + 4)); -// } -//} -// -//struct Point { -// x: i32, -// y: i32, -//} -// -//impl OutlinePrint for Point {} -// -//impl fmt::Display for Point { -// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -// write!(f, "({}, {})", self.x, self.y) -// } -//} -// -//fn main() { -// let point = Point { x: 5, y: 6 }; -// point.outline_print(); -//} - -use std::fmt; - -struct Wrapper(Vec); - -impl fmt::Display for Wrapper { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "[{}]", self.0.join(", ")) - } -} - -fn main() { - let w = Wrapper(vec![String::from("hello"), String::from("world")]); - println!("w = {}", w); -} diff --git a/advanced/adv-types/Cargo.lock b/advanced/adv-types/Cargo.lock deleted file mode 100644 index a7ad78b..0000000 --- a/advanced/adv-types/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "adv-types" -version = "0.1.0" - diff --git a/advanced/adv-types/Cargo.toml b/advanced/adv-types/Cargo.toml deleted file mode 100644 index a3ca211..0000000 --- a/advanced/adv-types/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "adv-types" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/advanced/adv-types/src/main.rs b/advanced/adv-types/src/main.rs deleted file mode 100644 index 60d42b2..0000000 --- a/advanced/adv-types/src/main.rs +++ /dev/null @@ -1,41 +0,0 @@ -//use std::io::Error; -//use std::fmt; - -//pub trait Write { -// -// fn write(&mut self, buf: &[u8]) -> Result; -// fn flush(&mut self) -> Result<(), Error>; -// -// fn write_all(&mut self, buf: &[u8]) -> Result<()>; -// fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<()>; -//} - -//fn main() { -// type Miles = i32; -// -// let x: i32 = 5; -// let y: Miles = 5; -// -// println!("x + y = {}", x + y); - - -//} - -//type Thunk = Box; -// -//let f: Thunk = Box::new(|| println!("hi")); -// -//fn takes_long_type(f: Thunk) { -//} -// -//fn returns_long_type() -> Thunk { -//} - -fn main() { - print!("forever"); - - loop { - print!("and ever "); - } -} - diff --git a/advanced/hello_macro/Cargo.toml b/advanced/hello_macro/Cargo.toml deleted file mode 100644 index e812230..0000000 --- a/advanced/hello_macro/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "hello_macro" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/advanced/hello_macro/src/lib.rs b/advanced/hello_macro/src/lib.rs deleted file mode 100644 index e747931..0000000 --- a/advanced/hello_macro/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub trait HelloMacro { - fn hello_macro(); -} diff --git a/advanced/unsafe-rust/Cargo.lock b/advanced/unsafe-rust/Cargo.lock deleted file mode 100644 index fbd902c..0000000 --- a/advanced/unsafe-rust/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "unsafe-rust" -version = "0.1.0" - diff --git a/advanced/unsafe-rust/Cargo.toml b/advanced/unsafe-rust/Cargo.toml deleted file mode 100644 index b37474a..0000000 --- a/advanced/unsafe-rust/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "unsafe-rust" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/advanced/unsafe-rust/src/main.rs b/advanced/unsafe-rust/src/main.rs deleted file mode 100644 index c9967a8..0000000 --- a/advanced/unsafe-rust/src/main.rs +++ /dev/null @@ -1,62 +0,0 @@ -fn main() { - let mut num = 5; - - let r1 = &num as *const i32; - let r2 = &mut num as *mut i32; - - let address = 0x012345usize; - let r = address as *const i32; - - unsafe { - println!("{}", *r1); - println!("{}", *r2); - } - - unsafe { - dangerous(); - } - - - unsafe { - println!("c call: {}", abs(-3)); - } - - - unsafe { - HELLO_WORLD = "test"; - println!("{}", HELLO_WORLD); - } - println!("{}", HI_THERE); - - add_to_count(3); - - unsafe { - println!("counter: {}", COUNTER); - } -} - -unsafe fn dangerous() {} - -extern "C" { - fn abs(input: i32) -> i32; -} - -static mut HELLO_WORLD: &str = "hello world"; -static mut COUNTER: u32 = 0; - -fn add_to_count(inc: u32) { - unsafe { - COUNTER += inc; - } -} - -const HI_THERE: &str = "hi there"; - -unsafe trait Foo { - // methods -} - -unsafe impl Foo for i32 { - // implementations -} - diff --git a/blog/Cargo.lock b/blog/Cargo.lock deleted file mode 100644 index 8e79386..0000000 --- a/blog/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "blog" -version = "0.1.0" - diff --git a/blog/Cargo.toml b/blog/Cargo.toml deleted file mode 100644 index 0f971d3..0000000 --- a/blog/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "blog" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/blog/src/lib.rs b/blog/src/lib.rs deleted file mode 100644 index 8436a36..0000000 --- a/blog/src/lib.rs +++ /dev/null @@ -1,127 +0,0 @@ -//pub struct Post { -// state: Option>, -// content: String, -//} -// -//impl Post { -// pub fn new() -> Post { -// Post { -// state: Some(Box::new(Draft {})), -// content: String::new(), -// } -// } -// -// pub fn add_text(&mut self, text: &str) { -// self.content.push_str(text); -// } -// -// pub fn content(&self) -> &str { -// self.state.as_ref().unwrap().content(&self) -// } -// -// pub fn request_review(&mut self) { -// if let Some(s) = self.state.take() { -// self.state = Some(s.request_review()) -// } -// } -// -// pub fn approve(&mut self) { -// if let Some(s) = self.state.take() { -// self.state = Some(s.approve()) -// } -// } -//} -// -//trait State { -// fn request_review(self: Box) -> Box; -// fn approve(self: Box) -> Box; -// fn content<'a>(&self, post: &'a Post) -> &'a str { -// "" -// } -//} -// -//struct Draft {} -// -//impl State for Draft { -// fn request_review(self: Box) -> Box { -// Box::new(PendingReview {}) -// } -// -// fn approve(self: Box) -> Box { -// self -// } -//} -// -//struct PendingReview {} -// -//impl State for PendingReview { -// fn request_review(self: Box) -> Box { -// self -// } -// -// fn approve(self: Box) -> Box { -// Box::new(Published {}) -// } -//} -// -//struct Published {} -// -//impl State for Published { -// fn request_review(self: Box) -> Box { -// self -// } -// -// fn approve(self: Box) -> Box { -// self -// } -// -// fn content<'a>(&self, post: &'a Post) -> &'a str { -// &post.content -// } -//} - - - -pub struct Post { - content: String, -} - -pub struct DraftPost { - content: String, -} - -pub struct PendingReviewPost { - content: String, -} - -impl Post { - pub fn new() -> DraftPost { - DraftPost { - content: String::new(), - } - } - - pub fn content(&self) -> &str { - &self.content - } -} - -impl DraftPost { - pub fn add_text(&mut self, text: &str) { - self.content.push_str(text); - } - - pub fn request_review(self) -> PendingReviewPost { - PendingReviewPost { - content: self.content, - } - } -} - -impl PendingReviewPost { - pub fn approve(self) -> Post { - Post { - content: self.content, - } - } -} diff --git a/blog/src/main.rs b/blog/src/main.rs deleted file mode 100644 index c976cd9..0000000 --- a/blog/src/main.rs +++ /dev/null @@ -1,36 +0,0 @@ -use blog::Post; - -fn main() { -// let mut post = Post::new(); -// -// post.add_text("salad"); -// assert_eq!("", post.content()); -// -// post.request_review(); -// assert_eq!("", post.content()); -// -// post.approve(); -// assert_eq!("salad", post.content()); - - - -// let mut post = Post::new(); -// post.add_text("salad"); -// assert_eq!("", post.content()); - - - - let mut post = Post::new(); - - post.add_text("salad"); - let post = post.request_review(); - let post = post.approve(); - - assert_eq!("salad", post.content()); - - - - - - println!("Done."); -} diff --git a/collections/Cargo.lock b/collections/Cargo.lock deleted file mode 100755 index 14856a6..0000000 --- a/collections/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "collections" -version = "0.1.0" - diff --git a/collections/Cargo.toml b/collections/Cargo.toml deleted file mode 100755 index 8460a0c..0000000 --- a/collections/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "collections" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/collections/src/main.rs b/collections/src/main.rs deleted file mode 100755 index 7257ce2..0000000 --- a/collections/src/main.rs +++ /dev/null @@ -1,133 +0,0 @@ -use std::collections::HashMap; - -fn main() { - //let v: Vec = Vec::new(); - //let mut v = vec![1, 2, 3, 4, 5]; - - // let third: &i32 = &v[2]; - // println!("the third element is {}", third); - // - // match v.get(2) { - // Some(third) => println!("third is {}", third), - // None => println!("no third element"), - // } - // - // for i in &mut v { - // *i += 10; - // println!("{}", *i); - // } - // for i in &v { - // println!("{}", i); - // } - - // enum SpreadsheetCell { - // Int(i32), - // Float(f64), - // Text(String), - // } - // - // let row = vec![ - // SpreadsheetCell::Int(3), - // SpreadsheetCell::Text(String::from("blue")), - // SpreadsheetCell::Float(10.12), - // ]; - - //let mut s = String::new(); - - //let data = "initial contents"; - //let s = data.to_string(); - //dbg!(s); - //let s = "initial contents".to_string(); - //dbg!(s); - //let s = String::from("initial contents"); - //dbg!(s); - - //let mut s = String::from("hello"); - //s.push_str(" world"); - - //let mut s1 = String::from("hello"); - //let s2 = " world"; - //s1.push_str(s2); - //s1.push('!'); - //dbg!(s1); - - //let s1 = String::from("Hello "); - //let s2 = String::from("world"); - //let s3 = s1 + &s2 + "!"; - //dbg!(s3); - - //let my_result: Result<&'static str, &'static str> = Ok("test"); - - //dbg!(my_result); - - //let s1 = String::from("tic"); - //let s2 = String::from("tac"); - //let s3 = String::from("toe"); - - //let s = format!("{}-{}-{}", s1, s2, s3); - //dbg!(s); - - //let s = String::from("welcome to hello world"); - //let len = s.len(); - //dbg!(len); - //let s1 = s[0..15].to_string(); - //dbg!(s1); - - //for c in "hello world".bytes() { - // dbg!(c); - //} - - //let mut scores = HashMap::new(); - //scores.insert(String::from("Blue"), 10); - //scores.insert(String::from("Yellow"), 50); - //scores.insert(String::from("Blue"), 20); - //dbg!(scores); - - //let teams = vec![String::from("blue"), String::from("yellow")]; - //let initial_scores = vec![10, 20]; - //let scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect(); - //dbg!(scores); - - //let field_name = String::from("favorite color"); - //let field_value = String::from("blue"); - - //let mut map = HashMap::new(); - //map.insert(field_name, field_value); - - //let mut scores = HashMap::new(); - //scores.insert(String::from("blue"), 10); - //scores.insert(String::from("yellow"), 50); - - //let team_name = String::from("blue"); - //let score = scores.get(&team_name); - - //dbg!(team_name); - //dbg!(score); - - //let mut scores = HashMap::new(); - - //scores.insert(String::from("blue"), 10); - //scores.insert(String::from("yellow"), 50); - - //for (key, value) in &scores { - // dbg!(key); - // dbg!(value); - //} - - // let mut scores = HashMap::new(); - // scores.insert(String::from("blue"), 10); - // scores.entry(String::from("yellow")).or_insert(50); - // scores.entry(String::from("blue")).or_insert(50); - // dbg!(scores); - - //let text = "when in the course of himan events it becomes necessary for one people to dissolve the political bands which have connected them with another and to assume among the powers of the earth the separate and equal station to which thelaws of nature and of nature's God entitle them a decent respect to the opinions of mankind requires that they should declare the causes which impel them to the separation"; - //let mut map = HashMap::new(); - - //for word in text.split_whitespace() { - // let count = map.entry(word).or_insert(0); - // *count += 1; - //} - - //dbg!(map); - -} diff --git a/concurrency/Cargo.lock b/concurrency/Cargo.lock deleted file mode 100644 index 74a4d7a..0000000 --- a/concurrency/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "concurrency" -version = "0.1.0" - diff --git a/concurrency/Cargo.toml b/concurrency/Cargo.toml deleted file mode 100644 index 0bfe465..0000000 --- a/concurrency/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "concurrency" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/concurrency/src/main.rs b/concurrency/src/main.rs deleted file mode 100644 index 53417eb..0000000 --- a/concurrency/src/main.rs +++ /dev/null @@ -1,137 +0,0 @@ -use std::sync::Arc; -use std::rc::Rc; -use std::sync::Mutex; -use std::thread; -use std::sync::mpsc; -use std::time::Duration; - -fn main() { -// let handle = thread::spawn(|| { -// for i in 1..10 { -// println!("spawned: {}", i); -// thread::sleep(Duration::from_millis(1)); -// } -// }); -// -// for i in 1..5 { -// println!("main: {}", i); -// thread::sleep(Duration::from_millis(1)); -// } -// -// handle.join().unwrap(); - - - -// let v = vec![1, 2, 3]; -// -// let handle = thread::spawn(move || { -// println!("Here's a vector: {:?}", v); -// }); -// -// drop(v); -// handle.join().unwrap(); - - - -// let (tx, rx) = mpsc::channel(); -// -// thread::spawn(move || { -// let val = String::from("hi"); -// tx.send(val).unwrap(); -// dbg!(val); -// }); -// -// let received = rx.recv().unwrap(); -// dbg!(received); - - - -// let (tx, rx) = mpsc::channel(); -// -// thread::spawn(move || { -// let vals = vec![ -// String::from("the"), -// String::from("walking"), -// String::from("thread"), -// ]; -// -// for val in vals { -// tx.send(val).unwrap(); -// thread::sleep(Duration::from_secs(1)); -// } -// }); -// -// for received in rx { -// println!("got {}", received); -// } - - - -// let (tx, rx) = mpsc::channel(); -// -// let tx1 = mpsc::Sender::clone(&tx); -// thread::spawn(move || { -// let vals = vec![ -// String::from("the"), -// String::from("walking"), -// String::from("thread"), -// ]; -// -// for val in vals { -// tx1.send(val).unwrap(); -// thread::sleep(Duration::from_secs(1)); -// } -// }); -// -// thread::spawn(move || { -// let vals = vec![ -// String::from("welcome"), -// String::from("to"), -// String::from("woodberry"), -// String::from("!"), -// ]; -// -// for val in vals { -// tx.send(val).unwrap(); -// thread::sleep(Duration::from_secs(1)); -// } -// }); -// -// for received in rx { -// dbg!(received); -// } - - - -// let m = Mutex::new(5); -// -// { -// let mut num = m.lock().unwrap(); -// *num = 6; -// } -// -// println!("m = {:?}", m); - - - - let counter = Arc::new(Mutex::new(0)); - let mut handles = vec![]; - - for _ in 0..10 { - let counter = Arc::clone(&counter); - let handle = thread::spawn(move || { - let mut num = counter.lock().unwrap(); - - *num += 1; - }); - handles.push(handle); - } - - for handle in handles { - handle.join().unwrap(); - } - - dbg!(*counter.lock().unwrap()); - - println!("Done."); -} diff --git a/control/Cargo.lock b/control/Cargo.lock deleted file mode 100755 index 81a9861..0000000 --- a/control/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "control" -version = "0.1.0" - diff --git a/control/Cargo.toml b/control/Cargo.toml deleted file mode 100755 index 70b4d1d..0000000 --- a/control/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "control" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/control/src/main.rs b/control/src/main.rs deleted file mode 100755 index 0b74683..0000000 --- a/control/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -fn main() { - - for number in (1..1000).rev() { - println!("{}", number); - } -} - diff --git a/crates/Cargo.lock b/crates/Cargo.lock deleted file mode 100644 index 3e95fa1..0000000 --- a/crates/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "crates" -version = "0.1.0" - diff --git a/crates/Cargo.toml b/crates/Cargo.toml deleted file mode 100644 index 202ff1d..0000000 --- a/crates/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "crates" -version = "0.1.0" -authors = ["53hornet <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/crates/src/lib.rs b/crates/src/lib.rs deleted file mode 100644 index 5cf1d97..0000000 --- a/crates/src/lib.rs +++ /dev/null @@ -1,33 +0,0 @@ -//! # Art -//! -//! A library for modeling artistic concepts. - -pub use kinds::PrimaryColor; -pub use kinds::SecondaryColor; -pub use utils::mix; - -pub mod kinds { - /// The primary colors according to the RYB color model. - pub enum PrimaryColor { - Red, - Yellow, - Blue, - } - - /// The secondary colors according to the RYB color model. - pub enum SecondaryColor { - Orange, - Green, - Purple, - } -} - -pub mod utils { - use crate::kinds::*; - - /// Combines two primary color in equal amounts to create - /// a secondary color. - pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor { - SecondaryColor::Green - } -} diff --git a/crates/src/main.rs b/crates/src/main.rs deleted file mode 100644 index 80668f2..0000000 --- a/crates/src/main.rs +++ /dev/null @@ -1,8 +0,0 @@ -use art::PrimaryColor; -use art::mix; - -fn main() { - let red = PrimaryColor::Red, - let yellow = PrimaryColor::Yellow; - mix(red, yellow); -} diff --git a/employees/Cargo.lock b/employees/Cargo.lock deleted file mode 100644 index a6d8fc5..0000000 --- a/employees/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "employees" -version = "0.1.0" - diff --git a/employees/Cargo.toml b/employees/Cargo.toml deleted file mode 100644 index 016ef3b..0000000 --- a/employees/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "employees" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/employees/src/main.rs b/employees/src/main.rs deleted file mode 100644 index 0900bed..0000000 --- a/employees/src/main.rs +++ /dev/null @@ -1,181 +0,0 @@ -use std::collections::HashMap; -use std::process; -use std::io::{self, Write}; - -struct Employees { - departments: HashMap>, -} - -impl Employees { - - fn add_employee(&self, name: &Option<&String>, department: &Option<&String>) -> Result<(), &'static str> { - // parse name - let name = match name { - Some(s) => s, - None => { - return Err("Invalid or empty name."); - }, - }; - - // parse department - let dept = match department { - Some(s) => s, - None => { - return Err("Invalid or empty department."); - }, - }; - - // add name to department in departments - // and create department if it doesn't exist - employees.entry(dept.to_string()) - .or_insert(Vec::new()) - .push(name.to_string()); - - Ok(()) - } -} - -//fn list_employees() { -// let dept = match actions.get(1) { -// Some(s) => s, -// None => { -// "" -// } -// }; -// -// if dept == "" { -// // print employees in all depts -// for each in employees.keys() { -// println!("{}", each); -// match employees.get(&each.to_string()) { -// Some(v) => { -// for every in v { -// println!(" {}", every); -// } -// }, -// None => continue, -// }; -// } -// } -// else { -// // print employees in single dept -// match employees.get(&dept.to_string()) { -// Some(v) => { -// for every in v { -// println!("{}", every); -// }; -// }, -// None => { -// eprintln!("List: Invalid department."); -// continue; -// } -// }; -// } -//} -// -//fn list_employee(name) { -//} - - -//fn remove_employee(name) { -// let name = match actions.get(1) { -// Some(s) => s, -// None => { -// eprintln!("Remove: Invalid or empty name."); -// continue; -// }, -// }; -// -// let dept = match actions.get(2) { -// Some(s) => s, -// None => { -// eprintln!("Remove: Empty department."); -// continue; -// }, -// }; -// -// match employees.get_mut(&dept.to_string()) { -// Some(v) => { -// v.retain(|employee| employee != name); -// }, -// None => { -// eprintln!("Remove: Invalid department."); -// continue; -// } -// }; - -//} - -fn get_actions() -> Vec { - print!("> "); - io::stdout().flush().unwrap(); - - // grab input - let mut input = String::new(); - io::stdin().read_line(&mut input) - .expect("Failed to read input."); - - // finish on eof - if input == "" { - println!("Bye."); - process::exit(0); - } - - // collect all CLI arguments into vector of trimmed Strings - input.trim() - .split_whitespace() - .map(|action| action.to_string()) - .collect() -} - -fn main() { - println!("Welcome to employee manager."); - println!("Enter 'help' for help or Ctrl+D to exit."); - let mut departments: HashMap> = HashMap::new(); - - // operating loop - loop { - let actions = get_actions(); - - // act on actions - let command = match actions.get(0) { - Some(c) => c, - None => { - eprintln!("Empty command. Enter Ctrl+D to exit."); - continue; - } - }; - - match command.as_str() { - // add employee to department - "add" => { - match add_employee(&actions.get(1), &actions.get(2), &mut departments) { - Ok(()) => {dbg!(&departments);}, - Err(e) => eprintln!("{}", e), - }; - }, - - // list employees from one or all departments - "list" => { - }, - - // remove employee from department - "remove" => { - }, - - // print help - "help" => { - println!("Valid commands include:"); - println!("\tlist [department]"); - println!("\tadd "); - println!("\tremove "); - println!("Enter 'help' for help or Ctrl+D to exit."); - }, - - // all else fails - _ => eprintln!("Invalid command."), - } - - } - -} diff --git a/enums/Cargo.lock b/enums/Cargo.lock deleted file mode 100755 index d3577dd..0000000 --- a/enums/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "enums" -version = "0.1.0" - diff --git a/enums/Cargo.toml b/enums/Cargo.toml deleted file mode 100755 index 99fb9fc..0000000 --- a/enums/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "enums" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/enums/src/main.rs b/enums/src/main.rs deleted file mode 100755 index b8c61de..0000000 --- a/enums/src/main.rs +++ /dev/null @@ -1,12 +0,0 @@ -fn main() { - let some_u8_value = Some(3u8); -// match some_u8_value { -// Some(3) => println!("three"), -// _ => (), -// } - - if let Some(3) = some_u8_value { - println!("three"); - } - -} diff --git a/enums/src/main1.rs b/enums/src/main1.rs deleted file mode 100755 index 9670693..0000000 --- a/enums/src/main1.rs +++ /dev/null @@ -1,48 +0,0 @@ -#[derive(Debug)] -enum UsState { - NY, - VA, - NC, -} - -enum Coin { - Penny, - Nickel, - Dime, - Quarter(UsState), -} - -impl Coin { - - fn value_in_cents(self) -> u32 { - - match self { - Coin::Penny => { - println!("lucky penny"); - 1 - }, - Coin::Nickel => 5, - Coin::Dime => 10, - Coin::Quarter(state) => { - println!("State quarter from {:?}", state); - 25 - }, - - } - - } -} - -fn plus_one(x: Option) -> Option { - - match x { - None => None, - Some(i) => Some(i + 1), - } -} - -fn main() { - let five = Some(5); - let six = plus_one(five); - let none = plus_one(None); -} diff --git a/errors/Cargo.lock b/errors/Cargo.lock deleted file mode 100644 index 749984f..0000000 --- a/errors/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "errors" -version = "0.1.0" - diff --git a/errors/Cargo.toml b/errors/Cargo.toml deleted file mode 100644 index e531a1b..0000000 --- a/errors/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "errors" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/errors/src/main.rs b/errors/src/main.rs deleted file mode 100644 index 1250677..0000000 --- a/errors/src/main.rs +++ /dev/null @@ -1,38 +0,0 @@ -use std::io; -use std::io::Read; -use std::fs::File; -//use std::io::ErrorKind; - -fn read_username_from_file() -> Result { -// let f = File::open("hello.txt"); -// let mut f = match f { -// Ok(file) => file, -// Err(e) => return Err(e), -// }; -// let mut s = String::new(); -// match f.read_to_string(&mut s) { -// Ok(_) => Ok(s), -// Err(e) => Err(e), -// } - let mut s = String::new(); - File::open("hello.txt")?.read_to_string(&mut s)?; - Ok(s) -} -fn main() { -// let f = File::open("hello.txt").map_err(|error| { -// if error.kind() == ErrorKind::NotFound { -// File::create("hello.txt").unwrap_or_else(|error| { -// panic!("Could not create file: {:?}", error); -// }) -// } -// else { -// panic!("Problem opening file: {:?}", error); -// } -// }); - - //let f = File::open("hello.txt").unwrap(); - - //let f = File::open("hello.txt").expect("failed to open hello.txt"); - - dbg!(read_username_from_file()); -} diff --git a/fibonacci/Cargo.lock b/fibonacci/Cargo.lock deleted file mode 100644 index 06aa71c..0000000 --- a/fibonacci/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "fibonacci" -version = "0.1.0" - diff --git a/fibonacci/Cargo.toml b/fibonacci/Cargo.toml deleted file mode 100644 index 60bf227..0000000 --- a/fibonacci/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "fibonacci" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/fibonacci/src/main.rs b/fibonacci/src/main.rs deleted file mode 100644 index 0b4f22b..0000000 --- a/fibonacci/src/main.rs +++ /dev/null @@ -1,31 +0,0 @@ -use std::env; - -fn fib(n: u32) -> u32 { - - if n == 0 || n == 1 { - return n; - } - else { - return fib(n - 1) + fib(n - 2); - } - -} - -fn main() { - // grab iterations - let iterations: u32 = match env::args().nth(1) { - Some(s) => { - let attempt: u32 = s.trim().parse() - .expect("error: could not parse iterations"); - attempt - }, - None => { - eprintln!("error: usage: fibonacci [iterations]"); - return; - }, - }; - - for i in 0..iterations { - println!("{}", fib(i)); - } -} diff --git a/ftoctof/Cargo.lock b/ftoctof/Cargo.lock deleted file mode 100644 index e716471..0000000 --- a/ftoctof/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "ftoctof" -version = "0.1.0" - diff --git a/ftoctof/Cargo.toml b/ftoctof/Cargo.toml deleted file mode 100644 index 544eb2b..0000000 --- a/ftoctof/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "ftoctof" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/ftoctof/src/main.rs b/ftoctof/src/main.rs deleted file mode 100644 index 6425344..0000000 --- a/ftoctof/src/main.rs +++ /dev/null @@ -1,43 +0,0 @@ -use std::env; - -fn print_usage() { - eprintln!("error: usage: ftoctof [degrees] [f|c]"); -} - -fn main() { - // grab degrees value - let degrees: f32 = match env::args().nth(1) { - Some(s) => { - let attempt: f32 = s.trim().parse() - .expect("error: could not parse degrees"); - attempt - }, - None => { - print_usage(); - return; - }, - }; - - // grab scale identifier - let scale = match env::args().nth(2) { - Some(s) => s.to_lowercase(), - None => { - print_usage(); - return; - }, - }; - - // compute and print conversion - if scale == "f" { - let result: f32 = (degrees - 32.0) * 5.0 / 9.0; - println!("{} degrees fahrenheight is {} degrees celcius.", degrees, result); - } - else if scale == "c" { - let result: f32 = degrees * 9.0 / 5.0 + 32.0; - println!("{} degrees celcius is {} degrees fahrenheight.", degrees, result); - } - else { - print_usage(); - } - -} diff --git a/functional/Cargo.lock b/functional/Cargo.lock deleted file mode 100644 index ba41a73..0000000 --- a/functional/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "functional" -version = "0.1.0" - diff --git a/functional/Cargo.toml b/functional/Cargo.toml deleted file mode 100644 index 960ba85..0000000 --- a/functional/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "functional" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/functional/src/main.rs b/functional/src/main.rs deleted file mode 100644 index 7749e58..0000000 --- a/functional/src/main.rs +++ /dev/null @@ -1,188 +0,0 @@ -//use std::thread; -//use std::time::Duration; -// -//struct Cacher -// where T: Fn(u32) -> u32 -//{ -// calculation: T, -// value: Option, -//} -// -//impl Cacher -// where T: Fn(u32) -> u32 -//{ -// fn new (calculation: T) -> Cacher { -// Cacher { -// calculation, -// value: None, -// } -// } -// -// fn value(&mut self, arg: u32) -> u32 { -// match self.value { -// Some(v) => v, -// None => { -// let v = (self.calculation)(arg); -// self.value = Some(v); -// v -// }, -// } -// } -//} -// -//fn main() { -// let simulated_user_specified_value = 26; -// let simulated_random_number = 3; -// -// generate_workout( -// simulated_user_specified_value, -// simulated_random_number -// ); -//} -// -//fn generate_workout(intensity: u32, random_number: u32) { -// let mut expensive_result = Cacher::new(|num| { -// println!("calculating slowly..."); -// thread::sleep(Duration::from_secs(2)); -// num -// }); -// -// if intensity < 25 { -// println!( -// "Today, do {} pushups!", -// expensive_result.value(intensity) -// ); -// println!( -// "Next, do {} situps!", -// expensive_result.value(intensity) -// ); -// } -// else { -// if random_number == 3 { -// println!("Take a break today! Remember to stay hydrated!"); -// } -// else { -// println!( -// "Today, run for {} minutes!", -// expensive_result.value(intensity) -// ); -// } -// } -//} -// - - - - -fn main() { - let v1 = vec![1, 2, 3]; - let v1_iter = v1.iter(); - - for val in v1_iter { - dbg!(val); - } -} - -#[test] -fn iterator_demonstration() { - let v1 = vec![1, 2, 3]; - let mut v1_iter = v1.iter(); - - assert_eq!(v1_iter.next(), Some(&1)); - assert_eq!(v1_iter.next(), Some(&2)); - assert_eq!(v1_iter.next(), Some(&3)); - assert_eq!(v1_iter.next(), None); -} - -#[test] -fn iterator_sum() { - let v1 = vec![1, 2, 3]; - let v1_iter = v1.iter(); - let total: i32 = v1_iter.sum(); - assert_eq!(total, 6); -} - -#[test] -fn iterator_map() { - let v1: Vec = vec![1, 2, 3]; - let v2: Vec<_> = v1.iter().map(|x| x + 1).collect(); - assert_eq!(v2, vec![2, 3, 4]); -} - - - -#[derive(PartialEq, Debug)] -struct Shoe { - size: i32, - style: String, -} - -fn shoes_in_my_size(shoes: Vec, shoe_size: i32) -> Vec { - shoes.into_iter() - .filter(|s| s.size == shoe_size) - .collect() -} - -#[test] -fn filters_by_size() { - let shoes = vec![ - Shoe { size: 10, style: String::from("sneaker") }, - Shoe { size: 10, style: String::from("boot") }, - Shoe { size: 13, style: String::from("sandal") }, - ]; - - let in_my_size = shoes_in_my_size(shoes, 10); - - assert_eq!( - in_my_size, - vec![ - Shoe { size: 10, style: String::from("sneaker") }, - Shoe { size: 10, style: String::from("boot") }, - ] - ); -} - -struct Counter { - count: u32, -} - -impl Counter { - fn new() -> Counter { - Counter { count: 0 } - } -} - -impl Iterator for Counter { - type Item = u32; - - fn next(&mut self) -> Option { - self.count += 1; - - if self.count < 6 { - Some(self.count) - } - else { - None - } - } -} - -#[test] -fn calling_next_directly() { - let mut counter = Counter::new(); - assert_eq!(counter.next(), Some(1)); - assert_eq!(counter.next(), Some(2)); - assert_eq!(counter.next(), Some(3)); - assert_eq!(counter.next(), Some(4)); - assert_eq!(counter.next(), Some(5)); - assert_eq!(counter.next(), None); -} - -#[test] -fn using_other_iterator_trait_methods() { - let sum: u32 = Counter::new().zip(Counter::new().skip(1)) - .map(|(a, b)| a * b) - .filter(|x| x % 3 == 0) - .sum(); - assert_eq!(18, sum); -} diff --git a/functions/Cargo.lock b/functions/Cargo.lock deleted file mode 100755 index 89a654d..0000000 --- a/functions/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "functions" -version = "0.1.0" - diff --git a/functions/Cargo.toml b/functions/Cargo.toml deleted file mode 100755 index 656b779..0000000 --- a/functions/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "functions" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/functions/src/main.rs b/functions/src/main.rs deleted file mode 100755 index 43284ff..0000000 --- a/functions/src/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -fn main() { - let x = plus_one(5); - - println!("The value of x is {}", x); -} - -fn plus_one(x: i32) -> i32 { - x + 1 -} - diff --git a/generics/Cargo.lock b/generics/Cargo.lock deleted file mode 100644 index 3ddbc8c..0000000 --- a/generics/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "generics" -version = "0.1.0" - diff --git a/generics/Cargo.toml b/generics/Cargo.toml deleted file mode 100644 index 5529f73..0000000 --- a/generics/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "generics" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/generics/src/main.rs b/generics/src/main.rs deleted file mode 100644 index e41d6f5..0000000 --- a/generics/src/main.rs +++ /dev/null @@ -1,68 +0,0 @@ -//struct Point { -// x: T, -// y: U, -//} - -//impl Point { -// fn x(&self) -> &T { -// &self.x -// } -// -// fn y(&self) -> &T { -// &self.y -// } - -// fn mixup(self, other: Point) -> Point { -// Point { -// x: self.x, -// y: other.y, -// } -// } -//} - -fn largest(list: &[T]) -> T { - let mut largest = list[0]; - - for &item in list.iter() { - - if item > largest { - largest = item; - } - - } - - largest -} - -//enum Option_i32 { -// Some(i32), -// None, -//} -// -//enum Option_f64 { -// Some(f64), -// None, -//} - -fn main() { - let number_list = vec![34, 50, 25, 100, 65]; - dbg!(largest(&number_list)); - let char_list = vec!['h', 'e', 'l', 'l', 'o']; - dbg!(largest(&char_list)); -// let integer = Point { x: 5, y: 10 }; -// let float = Point { x: 5.0, y: 10.0 }; - -// let p = Point { x: 5.0, y: 10.5 }; -// dbg!(p.x()); -// dbg!(p.y()); - -// let p1 = Point { x: 5, y: 10.4 }; -// let p2 = Point { x: "Hello", y: 'c' }; -// let p3 = p1.mixup(p2); -// -// dbg!(p3.x); -// dbg!(p3.y); - -// let integer = Option_i32::Some(5); -// let float = Option_f64::Some(5.0); -} diff --git a/guessing-game/Cargo.lock b/guessing-game/Cargo.lock deleted file mode 100755 index c25e3df..0000000 --- a/guessing-game/Cargo.lock +++ /dev/null @@ -1,80 +0,0 @@ -[[package]] -name = "bitflags" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "guessing-game" -version = "0.1.0" -dependencies = [ - "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "libc" -version = "0.2.45" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rand" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "rand" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum libc 0.2.45 (registry+https://github.com/rust-lang/crates.io-index)" = "2d2857ec59fadc0773853c664d2d18e7198e83883e7060b63c924cb077bd5c74" -"checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" -"checksum rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8356f47b32624fef5b3301c1be97e5944ecdd595409cc5da11d05f211db6cfbd" -"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/guessing-game/Cargo.toml b/guessing-game/Cargo.toml deleted file mode 100755 index 08e8e30..0000000 --- a/guessing-game/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "guessing-game" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" -description = "A fun game where you guess what number the computer has chosen." -license = "MIT OR Apache-2.0" - -[dependencies] -rand = "0.3.14" diff --git a/guessing-game/src/main.rs b/guessing-game/src/main.rs deleted file mode 100755 index 38dd28d..0000000 --- a/guessing-game/src/main.rs +++ /dev/null @@ -1,36 +0,0 @@ -use std::io; -use std::cmp::Ordering; -use rand::Rng; - -fn main() { - println!("Guess the number!"); - - let secret_number = rand::thread_rng().gen_range(1, 101); - //println!("The secret number is: {}", secret_number); - - loop { - println!("Enter a guess."); - - let mut guess = String::new(); - - io::stdin().read_line(&mut guess) - .expect("Failed to read line."); - - let guess: u32 = match guess.trim().parse() { - Ok(num) => num, - Err(_) => continue, - }; - - println!("You guessed: {}", guess); - - match guess.cmp(&secret_number) { - Ordering::Less => println!("Too small!"), - Ordering::Greater => println!("Too big!"), - Ordering::Equal => { - println!("You win!"); - break; - } - } - } - -} diff --git a/hello_server/404.html b/hello_server/404.html deleted file mode 100644 index b106938..0000000 --- a/hello_server/404.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - Hello! - - - -

- Oops! -

-

- Sorry, Idk what you're asking for. -

- - - diff --git a/hello_server/Cargo.lock b/hello_server/Cargo.lock deleted file mode 100644 index 738010c..0000000 --- a/hello_server/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "hello_server" -version = "0.1.0" - diff --git a/hello_server/Cargo.toml b/hello_server/Cargo.toml deleted file mode 100644 index 39057cc..0000000 --- a/hello_server/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "hello_server" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/hello_server/hello.html b/hello_server/hello.html deleted file mode 100644 index 869c8f9..0000000 --- a/hello_server/hello.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - Hello! - - - -

- Hello! -

-

- Hi from Rust -

- - - diff --git a/hello_server/src/bin/main.rs b/hello_server/src/bin/main.rs deleted file mode 100644 index bcf1e46..0000000 --- a/hello_server/src/bin/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -use hello_server::ThreadPool; -use std::thread; -use std::time::Duration; -use std::io::prelude::*; -use std::fs; -use std::net::TcpStream; -use std::net::TcpListener; - -fn main() { - let listener = TcpListener::bind("127.0.0.1:7878").unwrap(); - let pool = ThreadPool::new(4).unwrap(); - - for stream in listener.incoming().take(2) { - let stream = stream.unwrap(); - - pool.execute(|| { - handle_connection(stream); - }); - } - - println!("shutting down..."); - -} - -fn handle_connection(mut stream: TcpStream) { - let mut buffer = [0; 512]; - stream.read(&mut buffer).unwrap(); - let get = b"GET / HTTP/1.1\r\n"; - let sleep = b"GET /sleep HTTP/1.1\r\n"; - - let (status_line, filename) = if buffer.starts_with(get) { - ("HTTP/1.1 200 OK\r\n\r\n", "hello.html") - } - else if buffer.starts_with(sleep) { - thread::sleep(Duration::from_secs(5)); - ("HTTP/1.1 200 OK\r\n\r\n", "hello.html") - } - else { - ("HTTP/1.1 404 NOT FOUND\r\n\r\n", "404.html") - }; - - let contents = fs::read_to_string(filename).unwrap(); - let response = format!("{}{}", status_line, contents); - stream.write(response.as_bytes()).unwrap(); - stream.flush().unwrap(); -} diff --git a/hello_server/src/lib.rs b/hello_server/src/lib.rs deleted file mode 100644 index cd1f616..0000000 --- a/hello_server/src/lib.rs +++ /dev/null @@ -1,117 +0,0 @@ -use std::sync::Arc; -use std::sync::Mutex; -use std::sync::mpsc; -use std::thread; - -enum Message { - NewJob(Job), - Terminate, -} - -trait FnBox { - fn call_box(self: Box); -} - -impl FnBox for F { - fn call_box(self: Box) { - (*self)() - } -} - -type Job = Box; - -pub struct ThreadPool { - workers: Vec, - sender: mpsc::Sender, -} - -impl ThreadPool { - pub fn new(size: usize) -> Result { - if size <= 0 { - return Err("failed to create pool"); - } - - let (sender, receiver) = mpsc::channel(); - - let receiver = Arc::new(Mutex::new(receiver)); - - let mut workers = Vec::with_capacity(size); - - for id in 0..size { - workers.push(Worker::new(id, Arc::clone(&receiver))?); - } - - Ok(ThreadPool { - workers, - sender, - }) - } - - pub fn spawn(f: F) -> thread::JoinHandle - where - F: FnOnce() -> T + Send + 'static, - T: Send + 'static - { - thread::spawn(f) - } - - pub fn execute(&self, f: F) - where - F: FnOnce() + Send + 'static - { - let job = Box::new(f); - self.sender.send(Message::NewJob(job)).unwrap(); - } - -} - -impl Drop for ThreadPool { - fn drop(&mut self) { - for _ in &mut self.workers { - self.sender.send(Message::Terminate).unwrap(); - } - - println!("shutting down all workers..."); - - for worker in &mut self.workers { - println!("shutting down worker {}", worker.id); - - if let Some(thread) = worker.thread.take() { - thread.join().unwrap(); - } - } - } -} - -struct Worker { - id: usize, - thread: Option>, -} - -impl Worker { - pub fn new(id: usize, receiver: Arc>>) - -> Result - { - let thread = thread::spawn(move || { - loop { - let message = receiver.lock().unwrap().recv().unwrap(); - - match message { - Message::NewJob(job) => { - println!("worker {} got job, executing...", id); - job.call_box(); - }, - Message::Terminate => { - println!("worker {} was told to terminate...", id); - break; - }, - } - } - }); - - Ok(Worker { - id, - thread: Some(thread), - }) - } -} diff --git a/hello_world/hello_cargo/Cargo.lock b/hello_world/hello_cargo/Cargo.lock deleted file mode 100755 index bd8a836..0000000 --- a/hello_world/hello_cargo/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "hello_cargo" -version = "0.1.0" - diff --git a/hello_world/hello_cargo/Cargo.toml b/hello_world/hello_cargo/Cargo.toml deleted file mode 100755 index 61d091a..0000000 --- a/hello_world/hello_cargo/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "hello_cargo" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/hello_world/hello_cargo/src/main.rs b/hello_world/hello_cargo/src/main.rs deleted file mode 100755 index e7a11a9..0000000 --- a/hello_world/hello_cargo/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} diff --git a/hello_world/main.exe b/hello_world/main.exe deleted file mode 100755 index 8bb285b..0000000 Binary files a/hello_world/main.exe and /dev/null differ diff --git a/hello_world/main.rs b/hello_world/main.rs deleted file mode 100755 index 3d46bbe..0000000 --- a/hello_world/main.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { - println!("hello world!"); -} - diff --git a/horcrux/Cargo.toml b/horcrux/Cargo.toml deleted file mode 100755 index f6996ac..0000000 --- a/horcrux/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "horcrux" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/horcrux/src/main.rs b/horcrux/src/main.rs deleted file mode 100755 index e7a11a9..0000000 --- a/horcrux/src/main.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - println!("Hello, world!"); -} diff --git a/lifetimes/Cargo.lock b/lifetimes/Cargo.lock deleted file mode 100644 index 0c2507e..0000000 --- a/lifetimes/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "lifetimes" -version = "0.1.0" - diff --git a/lifetimes/Cargo.toml b/lifetimes/Cargo.toml deleted file mode 100644 index 8003864..0000000 --- a/lifetimes/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "lifetimes" -version = "0.1.0" -authors = ["53hornet <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] diff --git a/lifetimes/src/main.rs b/lifetimes/src/main.rs deleted file mode 100644 index 87b6ce6..0000000 --- a/lifetimes/src/main.rs +++ /dev/null @@ -1,43 +0,0 @@ -fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { - // what this is doing is basically tagging x and y and the - // result with the same 'a, telling rust not to let any - // of them expire before the others; that way nothing - // will go out of scope prematurely and the result will - // always have a non-null reference - - // basically, 'a gives all three values the same lifetime. - // so long as they're all alive at the same time, there are - // no reference errors - - // note that the lifetime selected for the result is - // equal to the smaller of the lifetimes of the - // parameters - - if x.len() > y.len() { - x - } - else { - y - } -} - -struct ImportantExcerpt<'a> { - part: &'a str, -} - -fn main() { - let string1 = String::from("abcd"); - { - let string2 = "xyz"; - - let result = longest(string1.as_str(), string2); - //dbg!(result); - } - - let script = String::from("Before time began, there was the cube. We know not where it comes from."); - let first_sentence = script.split('.') - .next() - .expect("Could not find a '.'"); - let i = ImportantExcerpt { part: first_sentence }; - dbg!(i.part); -} diff --git a/mathsssss/Cargo.lock b/mathsssss/Cargo.lock deleted file mode 100644 index 7ef6f32..0000000 --- a/mathsssss/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "mathsssss" -version = "0.1.0" - diff --git a/mathsssss/Cargo.toml b/mathsssss/Cargo.toml deleted file mode 100644 index 201c096..0000000 --- a/mathsssss/Cargo.toml +++ /dev/null @@ -1,7 +0,0 @@ -[package] -name = "mathsssss" -version = "0.1.0" -authors = ["Adam Carpenter "] -edition = "2018" - -[dependencies] diff --git a/mathsssss/src/main.rs b/mathsssss/src/main.rs deleted file mode 100644 index 991590b..0000000 --- a/mathsssss/src/main.rs +++ /dev/null @@ -1,61 +0,0 @@ -use std::env; -use std::collections::HashMap; - -fn calc_mean(numbers: &Vec) -> f32 { - let sum: i32 = numbers.iter().sum(); - sum as f32 / numbers.len() as f32 -} - -fn calc_median(numbers: &Vec) -> i32 { - numbers[numbers.len() / 2] -} - -fn calc_mode(numbers: &Vec) -> i32 { - let mut counts: HashMap = HashMap::new(); - - for each in numbers { - let count = counts.entry(*each).or_insert(0); - *count += 1; - } - - let mut most: i32 = 0; - let mut result: i32 = 0; - - for (key, val) in counts.iter() { - - if val > &most { - most = *val; - result = *key; - } - } - - if most <= 1 { - 0 - } - else { - result - } - -} - -fn main() { - // grab numbers - let mut numbers: Vec = Vec::new(); - - for arg in env::args().skip(1) { - let number: i32 = arg.trim().parse() - .expect("error: could not parse arg"); - numbers.push(number); - } - - // sort list (mostly for median) - numbers.sort_by(|a, b| a.partial_cmp(b).unwrap()); - - // calculate and print results - let mean: f32 = calc_mean(&numbers); - println!("mean: {}", mean); - let median: i32 = calc_median(&numbers); - println!("median: {}", median); - let mode: i32 = calc_mode(&numbers); - println!("mode: {}", mode); -} diff --git a/meap/ch1/Cargo.lock b/meap/ch1/Cargo.lock new file mode 100644 index 0000000..d9d119e --- /dev/null +++ b/meap/ch1/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "ch1" +version = "0.1.0" + diff --git a/meap/ch1/Cargo.toml b/meap/ch1/Cargo.toml new file mode 100644 index 0000000..b8034fe --- /dev/null +++ b/meap/ch1/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "ch1" +version = "0.1.0" +authors = ["Adam Carpenter <53hornet@gmail.com>"] +edition = "2018" + +[dependencies] diff --git a/meap/ch1/src/main.rs b/meap/ch1/src/main.rs new file mode 100644 index 0000000..cbeadc4 --- /dev/null +++ b/meap/ch1/src/main.rs @@ -0,0 +1,28 @@ +//use std::rc::Rc; +//use std::sync::{Arc, Mutex}; + +fn main() { +// let a = 10; +// +// if a == 10 { +// println!("a eq ten"); +// } + + +// let a = 10; // stack +// let b = Box::new(10); // heap +// let c = Rc::new(10); // heap, reference count +// let d = Arc::new(Mutex::new(10)); // mutex lock, atomic reference counter +// println!("{} {} {} {:?}", a, b, c, d); + + + let english = "Hello, world!"; + let german = "Grüß Gott!"; + let japanese = "ハロー・ワール"; + let languages = [english, german, japanese]; + + for language in languages.iter() { + println!("{}", language); + } +} + diff --git a/meap/ch2/Cargo.lock b/meap/ch2/Cargo.lock new file mode 100644 index 0000000..4ebdd46 --- /dev/null +++ b/meap/ch2/Cargo.lock @@ -0,0 +1,195 @@ +[[package]] +name = "aho-corasick" +version = "0.6.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atty" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)", + "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "bitflags" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "ch2" +version = "0.1.0" +dependencies = [ + "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "clap" +version = "2.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.50" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "redox_syscall" +version = "0.1.51" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "redox_termios" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "strsim" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "termion" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)", + "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "textwrap" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "ucd-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "utf8-ranges" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_map" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "81ce3d38065e618af2d7b77e10c5ad9a069859b4be3c2250f674af3840d9c8a5" +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" +"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e" +"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" +"checksum libc 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)" = "aab692d7759f5cd8c859e169db98ae5b52c924add2af5fbbca11d12fefb567c1" +"checksum memchr 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2efc7bc57c883d4a4d6e3246905283d8dae951bb3bd32f49d6ef297f546e1c39" +"checksum redox_syscall 0.1.51 (registry+https://github.com/rust-lang/crates.io-index)" = "423e376fffca3dfa06c9e9790a9ccd282fafb3cc6e6397d01dbf64f9bacc6b85" +"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" +"checksum regex 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9329abc99e39129fcceabd24cf5d85b4671ef7c29c50e972bc5afe32438ec384" +"checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" +"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" +"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" +"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6" +"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86" +"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526" +"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737" +"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/meap/ch2/Cargo.toml b/meap/ch2/Cargo.toml new file mode 100644 index 0000000..94dc2f4 --- /dev/null +++ b/meap/ch2/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "ch2" +version = "0.1.0" +authors = ["Adam Carpenter <53hornet@gmail.com>"] +edition = "2018" + +[dependencies] +regex = "0.2.2" +clap = "2.24.2" + diff --git a/meap/ch2/src/main.rs b/meap/ch2/src/main.rs new file mode 100644 index 0000000..055ec1c --- /dev/null +++ b/meap/ch2/src/main.rs @@ -0,0 +1,100 @@ +extern crate regex; +extern crate clap; + +use regex::Regex; +use clap::{App, Arg}; +//use std::ops::{Add}; + +fn main() { +// let a = 10; +// let b: i32 = 20; +// +// let c = add(a, b); +// println!("a + b = {}", c); + + +// let twenty = 20; +// let twenty_one: i32 = twenty + 1; +// let floats_okay = 21.0; +// let million = 1_000_000; +// +// println!("{} {} {} {}", twenty, twenty_one, floats_okay, million); +// +// let three = 0b11; +// let thirty = 0o36; +// let three_hundred = 0x12c; +// +// println!("{} {} {}", three, thirty, three_hundred); +// println!("{:b} {:b} {:b}", three, thirty, three_hundred); +// println!("{:o} {:o} {:o}", three, thirty, three_hundred); +// println!("{:x} {:x} {:x}", three, thirty, three_hundred); + + +// //let needle = 42; +// let haystack = [1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862]; +// +// for reference in haystack.iter() { +// let item = *reference; +// +// //if item == needle { +// // println!("{}", item); +// //} +// +// //if reference == &needle { +// // println!("{}", reference); +// //} +// +// let result = match item { +// 42 | 132 => "hit", +// _ => "miss", +// }; +// +// println!("{}", result); +// } + + + // let (a, b) = (1.2, 3.4); + // let (x, y) = (10, 20); + + // let c = add(a, b); + // let z = add(x, y); + + // println!("{} {}", c, z); + + + let args = App::new("ch2") + .version("0.1") + .about("searches for patterns") + .arg(Arg::with_name("pattern") + .help("the pattern to search for") + .takes_value(true) + .required(true)) + .get_matches(); + + let pattern = args.value_of("pattern").unwrap(); + let re = Regex::new(pattern).unwrap(); + let quote = "Every face, every shop, bedroom window, public-house, \ + and\ndark square is a picture feverishly turned--in search \ + of what?\nIt is the same with books. What do we seek through \ + millions of pages?"; + + for (index, line) in quote.lines().enumerate() { + match re.find(line) { + Some(_) => print!("-> "), + None => print!(" "), + }; + + let line_num = index + 1; + println!("{}: {}", line_num, line); + } + +} + +//fn add>(i: T, j: T) -> T { +// i + j +//} + + +//fn add(i: i32, j: i32) -> i32 { +// i + j +//} diff --git a/meap/meap-code/ch1/ch1-animals-specialization.rs b/meap/meap-code/ch1/ch1-animals-specialization.rs new file mode 100644 index 0000000..49fc0eb --- /dev/null +++ b/meap/meap-code/ch1/ch1-animals-specialization.rs @@ -0,0 +1,47 @@ +struct Animal { + age: i32, +} + +type Cat = Animal; +type Dog = Animal; +type LoudDog = Dog; + +trait Talk { + fn talk(&self) -> (); +} + +impl Talk for Animal { + default fn talk(&self) { // note the use of the default + println!(""); + } +} + +impl Talk for Cat { + fn talk(&self) { + println!("Meow"); + } +} + +impl Talk for Dog { + fn talk(&self) { + println!("Woof!"); + } +} + +impl Talk for LoudDog { + fn talk(&self) { + println!("WOOF!!"); + } +} + + + +fn main() { + let fluffy = Cat(Animal { age: 4 }); + let max = Dog(Animal { age: 2 }); + let neighbours_dog = LoudDog(Animal { age: 7 }); + + fluffy.talk(); + max.talk(); + neighbours_dog.talk(); +} diff --git a/meap/meap-code/ch1/ch1-animals-tuple-structs.rs b/meap/meap-code/ch1/ch1-animals-tuple-structs.rs new file mode 100644 index 0000000..ed479ed --- /dev/null +++ b/meap/meap-code/ch1/ch1-animals-tuple-structs.rs @@ -0,0 +1,41 @@ +struct Animal { + age: i32, +} + +struct Cat(Animal); +struct Dog(Animal); +struct LoudDog(Animal); + +trait Talk { + fn talk(&self) -> (); +} + +impl Talk for Cat { + fn talk(&self) { + println!("Meow"); + } +} + +impl Talk for Dog { + fn talk(&self) { + println!("Woof!"); + } +} + +impl Talk for LoudDog { + fn talk(&self) { + println!("WOOF!!"); + } +} + + + +fn main() { + let fluffy = Cat(Animal { age: 4 }); + let max = Dog(Animal { age: 2 }); + let neighbours_dog = LoudDog(Animal { age: 7 }); + + fluffy.talk(); + max.talk(); + neighbours_dog.talk(); +} diff --git a/meap/meap-code/ch1/ch1-animals.rs b/meap/meap-code/ch1/ch1-animals.rs new file mode 100644 index 0000000..ed479ed --- /dev/null +++ b/meap/meap-code/ch1/ch1-animals.rs @@ -0,0 +1,41 @@ +struct Animal { + age: i32, +} + +struct Cat(Animal); +struct Dog(Animal); +struct LoudDog(Animal); + +trait Talk { + fn talk(&self) -> (); +} + +impl Talk for Cat { + fn talk(&self) { + println!("Meow"); + } +} + +impl Talk for Dog { + fn talk(&self) { + println!("Woof!"); + } +} + +impl Talk for LoudDog { + fn talk(&self) { + println!("WOOF!!"); + } +} + + + +fn main() { + let fluffy = Cat(Animal { age: 4 }); + let max = Dog(Animal { age: 2 }); + let neighbours_dog = LoudDog(Animal { age: 7 }); + + fluffy.talk(); + max.talk(); + neighbours_dog.talk(); +} diff --git a/meap/meap-code/ch1/ch1-escape-html.rs b/meap/meap-code/ch1/ch1-escape-html.rs new file mode 100644 index 0000000..7b61232 --- /dev/null +++ b/meap/meap-code/ch1/ch1-escape-html.rs @@ -0,0 +1,22 @@ +fn escape_html(maybe_html: &str) -> String { + let mut out = String::with_capacity(maybe_html.len()); + + for c in maybe_html.chars() { + match c { + '<' => out.push_str("<"), + '>' => out.push_str(">"), + '&' => out.push_str("&"), + '\'' => out.push_str("'"), + '"' => out.push_str("""), + _ => out.push(c), + }; + } + + out +} + +fn main() { + let html = "

\"Hello, World!\"

"; + let escaped_html = escape_html(html); + println!("{}", escaped_html); +} diff --git a/meap/meap-code/ch1/ch1-hashmap-hashset.rs b/meap/meap-code/ch1/ch1-hashmap-hashset.rs new file mode 100644 index 0000000..1fa9229 --- /dev/null +++ b/meap/meap-code/ch1/ch1-hashmap-hashset.rs @@ -0,0 +1,33 @@ +use std::collections::{HashMap, HashSet}; + +fn main() { + + let input_text = "does this work + i dont know + how rust works"; + + let mut character_counts = HashMap::new(); + + let mut n_lines = 0u32; + + for l in input_text.lines() { + n_lines = n_lines + 1; + + let mut chars_for_line = HashSet::new(); + + for c in l.chars() { + if chars_for_line.contains(&c) { + continue + } + let c_count = character_counts.entry(c).or_insert(0u32); + *c_count += 1; + chars_for_line.insert(c); + } + } + + for (c, c_count) in &character_counts { + if *c_count == n_lines { + println!("{}", c); + } + } +} diff --git a/meap/meap-code/ch1/ch1-hello2.rs b/meap/meap-code/ch1/ch1-hello2.rs new file mode 100644 index 0000000..c804513 --- /dev/null +++ b/meap/meap-code/ch1/ch1-hello2.rs @@ -0,0 +1,16 @@ +fn greet_world() { + println!("Hello, world!"); // our old friend. + + let southern_germany = "Grüß Gott!"; + let japan = "ハロー・ワールド"; + + let regions = [southern_germany, japan]; + + for region in regions.iter() { + println!("{}", ®ion); + } +} + +fn main() { + greet_world(); +} \ No newline at end of file diff --git a/meap/meap-code/ch1/ch1-save-user-data.rs b/meap/meap-code/ch1/ch1-save-user-data.rs new file mode 100644 index 0000000..48f8130 --- /dev/null +++ b/meap/meap-code/ch1/ch1-save-user-data.rs @@ -0,0 +1,32 @@ +use std::str; + +#[derive(Debug)] +struct User { + id: u8, + secret: String, +} + +fn store_secrets(user: &User, buffer: &mut[u8]) { + let _secret = user.secret.clone(); + + + // assume we're writing to a database + println!("{:?}: {}", user, str::from_utf8(&buffer).unwrap()); +} + +fn main() { + let buffer = &mut[0u8; 1024]; + let u1 = User { + id: 1, + secret: String::from("Pa55w0rd!"), + }; + let u2 = User { + id: 2, + secret: String::from("correct horse battery staple"), + }; + + store_secrets(&u1, buffer); + store_secrets(&u2, buffer); + + +} \ No newline at end of file diff --git a/meap/meap-code/ch1/ch1-time-api/Cargo.toml b/meap/meap-code/ch1/ch1-time-api/Cargo.toml new file mode 100644 index 0000000..da28bde --- /dev/null +++ b/meap/meap-code/ch1/ch1-time-api/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "ch1-time-api" +version = "0.1.0" +authors = ["Tim McNamara "] + +[dependencies] +chrono = "0.4.0" +rocket = "0.3.0" +rocket_codegen = "0.3.0" +serde = "1.0" +serde_derive = "1.0" + +[dependencies.rocket_contrib] +version = "0.3.0" +default-features = false +features = ["json"] \ No newline at end of file diff --git a/meap/meap-code/ch1/ch1-time-api/src/main.rs b/meap/meap-code/ch1/ch1-time-api/src/main.rs new file mode 100644 index 0000000..660c1cc --- /dev/null +++ b/meap/meap-code/ch1/ch1-time-api/src/main.rs @@ -0,0 +1,36 @@ +#![feature(plugin)] // <1> +#![plugin(rocket_codegen)] // <1> + +extern crate serde; // <2> +extern crate chrono; // <2> +extern crate rocket; // <2> +extern crate rocket_contrib; // <2> + +#[macro_use] // <3> Syntax to indicate that we want to import macros from another module +extern crate serde_derive; // <3> + +use chrono::prelude::*; // <4> brings all exported members into local scope (e.g. DateTime and Utc) +use rocket_contrib::{Json}; // <5> bring single member into local scope + +#[derive(Serialize)] // <6> Automatically generate a string representation of this struct (which will be used as JSON) +struct Timestamp { // <7> Syntax to create a custom type + time: String, // <8> The `Timestamp` `time` field is of type `String` +} + +#[get("/")] // <9> Custom syntax provided by the library that indicates to code generation +fn index() -> &'static str { // <10> Define a function with no arguments and its return type + "Hello, world!" // <11> Rust returns the result of the final expression +} + +#[get("/time")] +fn time_now() -> Json { + let now: DateTime = Utc::now(); + let timestamp = Timestamp { time: now.to_rfc3339() }; + Json(timestamp) +} + +fn main() { + rocket::ignite() + .mount("/", routes![index, time_now]) + .launch(); +} \ No newline at end of file diff --git a/meap/meap-code/ch1/ch1-word-counts.rs b/meap/meap-code/ch1/ch1-word-counts.rs new file mode 100644 index 0000000..fc5c8ea --- /dev/null +++ b/meap/meap-code/ch1/ch1-word-counts.rs @@ -0,0 +1,16 @@ +use std::collections::HashMap; + +fn main() { + let text = "once upon a time ..."; + let mut word_counts = HashMap::new(); + + let pairs = text.split(" ") + .map(|x| { (x, 1) }); + + for (word, count) in pairs { + let tmp = word_counts.entry(word) + .or_insert(0); + *tmp += count; + } + println!("{:?}", word_counts); +} diff --git a/meap/meap-code/ch10/Vagrantfile b/meap/meap-code/ch10/Vagrantfile new file mode 100644 index 0000000..b306dd1 --- /dev/null +++ b/meap/meap-code/ch10/Vagrantfile @@ -0,0 +1,29 @@ +VAGRANTFILE_VERSION = "2" + +$provision_external = <