From 003296a78265ad5123b3658dd8e0c80cd86dcddf Mon Sep 17 00:00:00 2001 From: Pierre Hubert Date: Sat, 1 Oct 2022 19:25:41 +0200 Subject: [PATCH] Start to build cli player --- {sea_battle_backend => rust}/.gitignore | 0 {sea_battle_backend => rust}/Cargo.lock | 320 +++++++++++------- rust/Cargo.toml | 6 + rust/cli_player/Cargo.toml | 14 + rust/cli_player/src/cli_args.rs | 14 + rust/cli_player/src/lib.rs | 2 + rust/cli_player/src/main.rs | 47 +++ rust/cli_player/src/ui_screens/mod.rs | 2 + .../src/ui_screens/select_play_mode.rs | 104 ++++++ rust/cli_player/src/ui_screens/utils.rs | 28 ++ .../sea_battle_backend}/Cargo.toml | 2 +- .../sea_battle_backend}/src/args.rs | 0 .../sea_battle_backend}/src/bot_player.rs | 0 .../sea_battle_backend}/src/consts.rs | 0 .../src/data/boats_layout.rs | 0 .../src/data/current_game_status.rs | 0 .../sea_battle_backend}/src/data/game_map.rs | 0 .../src/data/game_rules.rs | 0 .../sea_battle_backend}/src/data/mod.rs | 0 .../src/data/play_config.rs | 0 .../src/data/printable_map.rs | 0 .../src/dispatcher_actor.rs | 0 .../sea_battle_backend}/src/game.rs | 0 .../sea_battle_backend}/src/human_player.rs | 0 .../src/human_player_ws.rs | 0 .../sea_battle_backend}/src/lib.rs | 0 .../sea_battle_backend}/src/main.rs | 0 .../sea_battle_backend}/src/server.rs | 0 .../src/test/bot_client.rs | 0 .../src/test/bot_intermediate_play.rs | 0 .../src/test/bot_linear_play.rs | 0 .../src/test/bot_random_play.rs | 0 .../src/test/bot_smart_play.rs | 0 .../src/test/invite_mode.rs | 0 .../sea_battle_backend}/src/test/mod.rs | 0 .../src/test/network_utils.rs | 0 .../src/test/play_utils.rs | 0 .../src/test/random_mode.rs | 0 .../sea_battle_backend}/src/utils.rs | 0 39 files changed, 414 insertions(+), 125 deletions(-) rename {sea_battle_backend => rust}/.gitignore (100%) rename {sea_battle_backend => rust}/Cargo.lock (84%) create mode 100644 rust/Cargo.toml create mode 100644 rust/cli_player/Cargo.toml create mode 100644 rust/cli_player/src/cli_args.rs create mode 100644 rust/cli_player/src/lib.rs create mode 100644 rust/cli_player/src/main.rs create mode 100644 rust/cli_player/src/ui_screens/mod.rs create mode 100644 rust/cli_player/src/ui_screens/select_play_mode.rs create mode 100644 rust/cli_player/src/ui_screens/utils.rs rename {sea_battle_backend => rust/sea_battle_backend}/Cargo.toml (97%) rename {sea_battle_backend => rust/sea_battle_backend}/src/args.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/bot_player.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/consts.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/boats_layout.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/current_game_status.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/game_map.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/game_rules.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/mod.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/play_config.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/data/printable_map.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/dispatcher_actor.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/game.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/human_player.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/human_player_ws.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/lib.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/main.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/server.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/bot_client.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/bot_intermediate_play.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/bot_linear_play.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/bot_random_play.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/bot_smart_play.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/invite_mode.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/mod.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/network_utils.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/play_utils.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/test/random_mode.rs (100%) rename {sea_battle_backend => rust/sea_battle_backend}/src/utils.rs (100%) diff --git a/sea_battle_backend/.gitignore b/rust/.gitignore similarity index 100% rename from sea_battle_backend/.gitignore rename to rust/.gitignore diff --git a/sea_battle_backend/Cargo.lock b/rust/Cargo.lock similarity index 84% rename from sea_battle_backend/Cargo.lock rename to rust/Cargo.lock index 82b1e62..c5f2e89 100644 --- a/sea_battle_backend/Cargo.lock +++ b/rust/Cargo.lock @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "actix-cors" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02a0adcaabb68f1dfe8880cb3c5f049261c68f5d69ce06b6f3a930f31710838e" +checksum = "684a6ce1562a5fcca49bc9302896c63547eea78a1e405e837e7416affd8b6eb9" dependencies = [ "actix-utils", "actix-web", @@ -60,9 +60,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.2.1" +version = "3.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f9ffb6db08c1c3a1f4aef540f1a63193adc73c4fbd40b75a95fc8c5258f6e51" +checksum = "0c83abf9903e1f0ad9973cc4f7b9767fd5a03a583f51a5b7a339e07987cd2724" dependencies = [ "actix-codec", "actix-rt", @@ -107,16 +107,15 @@ dependencies = [ [[package]] name = "actix-router" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb60846b52c118f2f04a56cc90880a274271c489b2498623d58176f8ca21fa80" +checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799" dependencies = [ "bytestring", - "firestorm", "http", - "log", "regex", "serde", + "tracing", ] [[package]] @@ -171,9 +170,9 @@ dependencies = [ [[package]] name = "actix-web" -version = "4.1.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27e8fe9ba4ae613c21f677c2cfaf0696c3744030c6f485b34634e502d6bb379" +checksum = "d48f7b6534e06c7bfc72ee91db7917d4af6afe23e7d223b51e68fffbb21e96b9" dependencies = [ "actix-codec", "actix-http", @@ -193,6 +192,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", + "http", "itoa", "language-tags", "log", @@ -228,9 +228,9 @@ dependencies = [ [[package]] name = "actix-web-codegen" -version = "4.0.1" +version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f270541caec49c15673b0af0e9a00143421ad4f118d2df7edcb68b627632f56" +checksum = "1fa9362663c8643d67b2d5eafba49e4cb2c8a053a29ed00a0bea121f17c76b13" dependencies = [ "actix-router", "proc-macro2", @@ -268,24 +268,24 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] [[package]] name = "alloc-no-stdlib" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] @@ -330,9 +330,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -385,6 +385,12 @@ dependencies = [ "bytes", ] +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + [[package]] name = "cc" version = "1.0.73" @@ -415,9 +421,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.17" +version = "3.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e724a68d9319343bb3328c9cc2dfde263f4b3142ee1059a9980580171c954b" +checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750" dependencies = [ "atty", "bitflags", @@ -432,9 +438,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "3.2.17" +version = "3.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13547f7012c01ab4a0e8f8967730ada8f9fdf419e8b6c792788f39cf4e46eefa" +checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65" dependencies = [ "heck", "proc-macro-error", @@ -452,6 +458,18 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "cli_player" +version = "0.1.0" +dependencies = [ + "clap", + "crossterm", + "env_logger", + "log", + "sea_battle_backend", + "tui", +] + [[package]] name = "convert_case" version = "0.4.0" @@ -460,9 +478,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" [[package]] name = "cookie" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" +checksum = "344adc371239ef32293cb1c4fe519592fcf21206c79c02854320afcdf3ab4917" dependencies = [ "percent-encoding", "time", @@ -477,9 +495,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc948ebb96241bb40ab73effeb80d9f93afaad49359d159a5e61be51619fe813" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -505,12 +523,36 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" dependencies = [ "cfg-if", - "once_cell", +] + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +dependencies = [ + "winapi", ] [[package]] @@ -573,9 +615,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" dependencies = [ "block-buffer", "crypto-common", @@ -592,9 +634,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" dependencies = [ "atty", "humantime", @@ -603,12 +645,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "firestorm" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c5f6c2c942da57e2aaaa84b8a521489486f14e75e7fa91dab70aba913975f98" - [[package]] name = "flate2" version = "1.0.24" @@ -627,19 +663,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "futures" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab30e97ab6aacfe635fad58f22c2bb06c8b685f7421eb1e064a729e2a5f481fa" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" dependencies = [ "futures-channel", "futures-core", @@ -652,9 +687,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bfc52cbddcfd745bf1740338492bb0bd83d76c67b445f91c5fb29fae29ecaa1" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" dependencies = [ "futures-core", "futures-sink", @@ -662,15 +697,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" [[package]] name = "futures-executor" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d11aa21b5b587a64682c0094c2bdd4df0076c5324961a40cc3abd7f37930528" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" dependencies = [ "futures-core", "futures-task", @@ -679,15 +714,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" [[package]] name = "futures-macro" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db9cce532b0eae2ccf2766ab246f114b56b9cf6d445e00c2549fbc100ca045d" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" dependencies = [ "proc-macro2", "quote", @@ -696,21 +731,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" [[package]] name = "futures-task" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" [[package]] name = "futures-util" -version = "0.3.23" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ "futures-channel", "futures-core", @@ -804,9 +839,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -841,11 +876,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -869,9 +903,9 @@ checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "jobserver" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] @@ -893,9 +927,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" [[package]] name = "libc" -version = "0.2.132" +version = "0.2.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" [[package]] name = "local-channel" @@ -917,9 +951,9 @@ checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -934,12 +968,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.5.0" @@ -954,9 +982,9 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "miniz_oxide" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34" dependencies = [ "adler", ] @@ -1013,9 +1041,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "os_str_bytes" @@ -1048,15 +1076,15 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9423e2b32f7a043629287a536f21951e8c6a82482d0acb1eeebfc90bc2225b22" +checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1" [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project-lite" @@ -1102,9 +1130,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] @@ -1141,9 +1169,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] @@ -1220,24 +1248,24 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f6841e709003d68bb2deee8c343572bf446003ec20a583e76f7b15cebf3711" +checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" [[package]] name = "serde" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", @@ -1308,15 +1336,36 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.1" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77f4e7f65455545c2153c1253d25056825e77ee2533f0e41deb65a93a34852f" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if", "cpufeatures", "digest", ] +[[package]] +name = "signal-hook" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -1343,9 +1392,9 @@ checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -1359,9 +1408,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "syn" -version = "1.0.99" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" dependencies = [ "proc-macro2", "quote", @@ -1379,24 +1428,24 @@ dependencies = [ [[package]] name = "textwrap" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16" [[package]] name = "thiserror" -version = "1.0.32" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.32" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", @@ -1405,9 +1454,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db76ff9fa4b1458b3c7f077f3ff9887394058460d21e634355b273aaf11eea45" +checksum = "3c3f9a28b618c3a6b9251b6908e9c99e04b9e5c02e6581ccbb67d59c34ef7f9b" dependencies = [ "itoa", "libc", @@ -1439,9 +1488,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.20.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ "autocfg", "bytes", @@ -1449,7 +1498,6 @@ dependencies = [ "memchr", "mio", "num_cpus", - "once_cell", "parking_lot", "pin-project-lite", "signal-hook-registry", @@ -1483,9 +1531,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -1516,6 +1564,19 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tui" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" +dependencies = [ + "bitflags", + "cassowary", + "crossterm", + "unicode-segmentation", + "unicode-width", +] + [[package]] name = "tungstenite" version = "0.17.3" @@ -1549,28 +1610,39 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "unicode-normalization" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] -name = "url" -version = "2.2.2" +name = "unicode-segmentation" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 0000000..c4ee906 --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] + +members = [ + "sea_battle_backend", + "cli_player" +] diff --git a/rust/cli_player/Cargo.toml b/rust/cli_player/Cargo.toml new file mode 100644 index 0000000..e5ec10c --- /dev/null +++ b/rust/cli_player/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "cli_player" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +sea_battle_backend = { path = "../sea_battle_backend" } +clap = { version = "3.2.17", features = ["derive"] } +log = "0.4.17" +env_logger = "0.9.0" +tui = "0.19.0" +crossterm = "0.25.0" \ No newline at end of file diff --git a/rust/cli_player/src/cli_args.rs b/rust/cli_player/src/cli_args.rs new file mode 100644 index 0000000..736b025 --- /dev/null +++ b/rust/cli_player/src/cli_args.rs @@ -0,0 +1,14 @@ +use clap::Parser; + +#[derive(Parser, Debug)] +pub struct CliArgs { + // TODO: switch default sever uri to real one when we get one + /// Upstream server to use + #[clap( + short, + long, + value_parser, + default_value = "https://fixme.communiquons.org" + )] + server_uri: String, +} diff --git a/rust/cli_player/src/lib.rs b/rust/cli_player/src/lib.rs new file mode 100644 index 0000000..14ea756 --- /dev/null +++ b/rust/cli_player/src/lib.rs @@ -0,0 +1,2 @@ +pub mod cli_args; +pub mod ui_screens; diff --git a/rust/cli_player/src/main.rs b/rust/cli_player/src/main.rs new file mode 100644 index 0000000..fdde1ef --- /dev/null +++ b/rust/cli_player/src/main.rs @@ -0,0 +1,47 @@ +use std::error::Error; +use std::io; +use std::time::Duration; + +use cli_player::ui_screens::select_play_mode; +use crossterm::event::DisableMouseCapture; +use crossterm::event::EnableMouseCapture; +use crossterm::execute; +use crossterm::terminal::EnterAlternateScreen; +use crossterm::terminal::LeaveAlternateScreen; +use crossterm::terminal::{disable_raw_mode, enable_raw_mode}; +use env_logger::Env; +use tui::backend::CrosstermBackend; +use tui::Terminal; + +pub fn main() -> Result<(), Box> { + env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); + + // setup terminal + enable_raw_mode()?; + let mut stdout = io::stdout(); + execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?; + let backend = CrosstermBackend::new(stdout); + let mut terminal = Terminal::new(backend)?; + + // create app and run it + let tick_rate = Duration::from_millis(250); + + let res = select_play_mode::select_play_mode(&mut terminal, tick_rate); + + // restore terminal + disable_raw_mode()?; + execute!( + terminal.backend_mut(), + LeaveAlternateScreen, + DisableMouseCapture + )?; + terminal.show_cursor()?; + + if let Err(err) = &res { + println!("{:?}", err) + } + + println!("selected play mode: {:?}", res.unwrap()); + + Ok(()) +} diff --git a/rust/cli_player/src/ui_screens/mod.rs b/rust/cli_player/src/ui_screens/mod.rs new file mode 100644 index 0000000..ae73570 --- /dev/null +++ b/rust/cli_player/src/ui_screens/mod.rs @@ -0,0 +1,2 @@ +pub mod select_play_mode; +pub mod utils; diff --git a/rust/cli_player/src/ui_screens/select_play_mode.rs b/rust/cli_player/src/ui_screens/select_play_mode.rs new file mode 100644 index 0000000..5459927 --- /dev/null +++ b/rust/cli_player/src/ui_screens/select_play_mode.rs @@ -0,0 +1,104 @@ +use std::io; +use std::time::{Duration, Instant}; + +use crate::ui_screens::utils::centered_rect; +use crossterm::event; +use crossterm::event::{Event, KeyCode}; +use tui::backend::Backend; +use tui::style::{Color, Modifier, Style}; +use tui::text::Text; +use tui::widgets::{Block, Borders, List, ListItem, ListState}; +use tui::{Frame, Terminal}; + +#[derive(Debug, Eq, PartialEq, Copy, Clone, Default)] +pub enum SelectPlayModeResult { + #[default] + PlayAgainstBot, + PlayRandom, + Exit, +} + +#[derive(Debug, Clone)] +struct PlayModeDescription { + name: &'static str, + value: SelectPlayModeResult, +} + +const AVAILABLE_PLAY_MODES: [PlayModeDescription; 3] = [ + PlayModeDescription { + name: "Play against bot (offline)", + value: SelectPlayModeResult::PlayAgainstBot, + }, + PlayModeDescription { + name: "Play against random player (online)", + value: SelectPlayModeResult::PlayRandom, + }, + PlayModeDescription { + name: "Exit app", + value: SelectPlayModeResult::Exit, + }, +]; + +#[derive(Default)] +struct SelectPlayModeScreen { + state: ListState, + curr_selection: usize, +} + +pub fn select_play_mode( + terminal: &mut Terminal, + tick_rate: Duration, +) -> io::Result { + let mut model = SelectPlayModeScreen::default(); + + let mut last_tick = Instant::now(); + loop { + model.state.select(Some(model.curr_selection)); + terminal.draw(|f| ui(f, &mut model))?; + + let timeout = tick_rate + .checked_sub(last_tick.elapsed()) + .unwrap_or_else(|| Duration::from_secs(0)); + + if crossterm::event::poll(timeout)? { + if let Event::Key(key) = event::read()? { + match key.code { + KeyCode::Char('q') => return Ok(SelectPlayModeResult::Exit), + KeyCode::Enter => return Ok(AVAILABLE_PLAY_MODES[model.curr_selection].value), + KeyCode::Down => model.curr_selection += 1, + KeyCode::Up => model.curr_selection += AVAILABLE_PLAY_MODES.len() - 1, + _ => {} + } + + model.curr_selection %= AVAILABLE_PLAY_MODES.len(); + } + } + if last_tick.elapsed() >= tick_rate { + last_tick = Instant::now(); + } + } +} + +fn ui(f: &mut Frame, model: &mut SelectPlayModeScreen) { + let area = centered_rect(60, 20, f.size()); + + // Create a List from all list items and highlight the currently selected one + let items = AVAILABLE_PLAY_MODES + .iter() + .map(|mode| ListItem::new(Text::raw(mode.name))) + .collect::>(); + let items = List::new(items) + .block( + Block::default() + .title("Select play mode") + .borders(Borders::ALL), + ) + .highlight_style( + Style::default() + .fg(Color::Green) + .add_modifier(Modifier::BOLD), + ) + .highlight_symbol(">> "); + + f.render_stateful_widget(items, area, &mut model.state); +} diff --git a/rust/cli_player/src/ui_screens/utils.rs b/rust/cli_player/src/ui_screens/utils.rs new file mode 100644 index 0000000..be95528 --- /dev/null +++ b/rust/cli_player/src/ui_screens/utils.rs @@ -0,0 +1,28 @@ +use tui::layout::{Constraint, Direction, Layout, Rect}; + +/// helper function to create a centered rect using up certain percentage of the available rect `r` +pub fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect { + let popup_layout = Layout::default() + .direction(Direction::Vertical) + .constraints( + [ + Constraint::Percentage((100 - percent_y) / 2), + Constraint::Percentage(percent_y), + Constraint::Percentage((100 - percent_y) / 2), + ] + .as_ref(), + ) + .split(r); + + Layout::default() + .direction(Direction::Horizontal) + .constraints( + [ + Constraint::Percentage((100 - percent_x) / 2), + Constraint::Percentage(percent_x), + Constraint::Percentage((100 - percent_x) / 2), + ] + .as_ref(), + ) + .split(popup_layout[1])[1] +} diff --git a/sea_battle_backend/Cargo.toml b/rust/sea_battle_backend/Cargo.toml similarity index 97% rename from sea_battle_backend/Cargo.toml rename to rust/sea_battle_backend/Cargo.toml index e141d11..4003717 100644 --- a/sea_battle_backend/Cargo.toml +++ b/rust/sea_battle_backend/Cargo.toml @@ -25,4 +25,4 @@ tokio = { version = "1", features = ["full"] } #reqwest = { version = "0.11.11", default-features = false, features = ["json", "rustls-tls"] } tokio-tungstenite = "0.17.2" serde_urlencoded = "0.7.1" -futures = "0.3.23" \ No newline at end of file +futures = "0.3.23" diff --git a/sea_battle_backend/src/args.rs b/rust/sea_battle_backend/src/args.rs similarity index 100% rename from sea_battle_backend/src/args.rs rename to rust/sea_battle_backend/src/args.rs diff --git a/sea_battle_backend/src/bot_player.rs b/rust/sea_battle_backend/src/bot_player.rs similarity index 100% rename from sea_battle_backend/src/bot_player.rs rename to rust/sea_battle_backend/src/bot_player.rs diff --git a/sea_battle_backend/src/consts.rs b/rust/sea_battle_backend/src/consts.rs similarity index 100% rename from sea_battle_backend/src/consts.rs rename to rust/sea_battle_backend/src/consts.rs diff --git a/sea_battle_backend/src/data/boats_layout.rs b/rust/sea_battle_backend/src/data/boats_layout.rs similarity index 100% rename from sea_battle_backend/src/data/boats_layout.rs rename to rust/sea_battle_backend/src/data/boats_layout.rs diff --git a/sea_battle_backend/src/data/current_game_status.rs b/rust/sea_battle_backend/src/data/current_game_status.rs similarity index 100% rename from sea_battle_backend/src/data/current_game_status.rs rename to rust/sea_battle_backend/src/data/current_game_status.rs diff --git a/sea_battle_backend/src/data/game_map.rs b/rust/sea_battle_backend/src/data/game_map.rs similarity index 100% rename from sea_battle_backend/src/data/game_map.rs rename to rust/sea_battle_backend/src/data/game_map.rs diff --git a/sea_battle_backend/src/data/game_rules.rs b/rust/sea_battle_backend/src/data/game_rules.rs similarity index 100% rename from sea_battle_backend/src/data/game_rules.rs rename to rust/sea_battle_backend/src/data/game_rules.rs diff --git a/sea_battle_backend/src/data/mod.rs b/rust/sea_battle_backend/src/data/mod.rs similarity index 100% rename from sea_battle_backend/src/data/mod.rs rename to rust/sea_battle_backend/src/data/mod.rs diff --git a/sea_battle_backend/src/data/play_config.rs b/rust/sea_battle_backend/src/data/play_config.rs similarity index 100% rename from sea_battle_backend/src/data/play_config.rs rename to rust/sea_battle_backend/src/data/play_config.rs diff --git a/sea_battle_backend/src/data/printable_map.rs b/rust/sea_battle_backend/src/data/printable_map.rs similarity index 100% rename from sea_battle_backend/src/data/printable_map.rs rename to rust/sea_battle_backend/src/data/printable_map.rs diff --git a/sea_battle_backend/src/dispatcher_actor.rs b/rust/sea_battle_backend/src/dispatcher_actor.rs similarity index 100% rename from sea_battle_backend/src/dispatcher_actor.rs rename to rust/sea_battle_backend/src/dispatcher_actor.rs diff --git a/sea_battle_backend/src/game.rs b/rust/sea_battle_backend/src/game.rs similarity index 100% rename from sea_battle_backend/src/game.rs rename to rust/sea_battle_backend/src/game.rs diff --git a/sea_battle_backend/src/human_player.rs b/rust/sea_battle_backend/src/human_player.rs similarity index 100% rename from sea_battle_backend/src/human_player.rs rename to rust/sea_battle_backend/src/human_player.rs diff --git a/sea_battle_backend/src/human_player_ws.rs b/rust/sea_battle_backend/src/human_player_ws.rs similarity index 100% rename from sea_battle_backend/src/human_player_ws.rs rename to rust/sea_battle_backend/src/human_player_ws.rs diff --git a/sea_battle_backend/src/lib.rs b/rust/sea_battle_backend/src/lib.rs similarity index 100% rename from sea_battle_backend/src/lib.rs rename to rust/sea_battle_backend/src/lib.rs diff --git a/sea_battle_backend/src/main.rs b/rust/sea_battle_backend/src/main.rs similarity index 100% rename from sea_battle_backend/src/main.rs rename to rust/sea_battle_backend/src/main.rs diff --git a/sea_battle_backend/src/server.rs b/rust/sea_battle_backend/src/server.rs similarity index 100% rename from sea_battle_backend/src/server.rs rename to rust/sea_battle_backend/src/server.rs diff --git a/sea_battle_backend/src/test/bot_client.rs b/rust/sea_battle_backend/src/test/bot_client.rs similarity index 100% rename from sea_battle_backend/src/test/bot_client.rs rename to rust/sea_battle_backend/src/test/bot_client.rs diff --git a/sea_battle_backend/src/test/bot_intermediate_play.rs b/rust/sea_battle_backend/src/test/bot_intermediate_play.rs similarity index 100% rename from sea_battle_backend/src/test/bot_intermediate_play.rs rename to rust/sea_battle_backend/src/test/bot_intermediate_play.rs diff --git a/sea_battle_backend/src/test/bot_linear_play.rs b/rust/sea_battle_backend/src/test/bot_linear_play.rs similarity index 100% rename from sea_battle_backend/src/test/bot_linear_play.rs rename to rust/sea_battle_backend/src/test/bot_linear_play.rs diff --git a/sea_battle_backend/src/test/bot_random_play.rs b/rust/sea_battle_backend/src/test/bot_random_play.rs similarity index 100% rename from sea_battle_backend/src/test/bot_random_play.rs rename to rust/sea_battle_backend/src/test/bot_random_play.rs diff --git a/sea_battle_backend/src/test/bot_smart_play.rs b/rust/sea_battle_backend/src/test/bot_smart_play.rs similarity index 100% rename from sea_battle_backend/src/test/bot_smart_play.rs rename to rust/sea_battle_backend/src/test/bot_smart_play.rs diff --git a/sea_battle_backend/src/test/invite_mode.rs b/rust/sea_battle_backend/src/test/invite_mode.rs similarity index 100% rename from sea_battle_backend/src/test/invite_mode.rs rename to rust/sea_battle_backend/src/test/invite_mode.rs diff --git a/sea_battle_backend/src/test/mod.rs b/rust/sea_battle_backend/src/test/mod.rs similarity index 100% rename from sea_battle_backend/src/test/mod.rs rename to rust/sea_battle_backend/src/test/mod.rs diff --git a/sea_battle_backend/src/test/network_utils.rs b/rust/sea_battle_backend/src/test/network_utils.rs similarity index 100% rename from sea_battle_backend/src/test/network_utils.rs rename to rust/sea_battle_backend/src/test/network_utils.rs diff --git a/sea_battle_backend/src/test/play_utils.rs b/rust/sea_battle_backend/src/test/play_utils.rs similarity index 100% rename from sea_battle_backend/src/test/play_utils.rs rename to rust/sea_battle_backend/src/test/play_utils.rs diff --git a/sea_battle_backend/src/test/random_mode.rs b/rust/sea_battle_backend/src/test/random_mode.rs similarity index 100% rename from sea_battle_backend/src/test/random_mode.rs rename to rust/sea_battle_backend/src/test/random_mode.rs diff --git a/sea_battle_backend/src/utils.rs b/rust/sea_battle_backend/src/utils.rs similarity index 100% rename from sea_battle_backend/src/utils.rs rename to rust/sea_battle_backend/src/utils.rs