diff --git a/Cargo.lock b/Cargo.lock index e96a6ba..611c3c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,15 @@ dependencies = [ "subtle", ] +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -167,6 +176,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "bstr" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" +dependencies = [ + "memchr", +] + [[package]] name = "bumpalo" version = "3.11.1" @@ -222,6 +240,20 @@ dependencies = [ "inout", ] +[[package]] +name = "codegen" +version = "0.1.0" +dependencies = [ + "futures", + "lazy_static", + "regex", + "reqwest", + "serde", + "serde_json", + "tera", + "tokio", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -302,6 +334,15 @@ dependencies = [ "libc", ] +[[package]] +name = "crossbeam-utils" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" +dependencies = [ + "cfg-if", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -682,6 +723,30 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "globset" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" +dependencies = [ + "aho-corasick", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "globwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +dependencies = [ + "bitflags", + "ignore", + "walkdir", +] + [[package]] name = "graphql-parser" version = "0.3.0" @@ -808,6 +873,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "iana-time-zone" version = "0.1.53" @@ -842,6 +920,24 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "ignore" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" +dependencies = [ + "crossbeam-utils", + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + [[package]] name = "indexmap" version = "1.9.2" @@ -877,6 +973,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "ipnet" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745" + [[package]] name = "itoa" version = "1.0.4" @@ -1224,6 +1326,50 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +[[package]] +name = "pest" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f400b0f7905bf702f9f3dc3df5a121b16c54e9e8012c082905fdf09a931861a" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "423c2ba011d6e27b02b482a3707c773d19aec65cc024637aec44e19652e66f63" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e64e6c2c85031c02fdbd9e5c72845445ca0a724d419aa0bc068ac620c9935c1" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57959b91f0a133f89a68be874a5c88ed689c19cd729ecdb5d762ebf16c64d662" +dependencies = [ + "once_cell", + "pest", + "sha1", +] + [[package]] name = "pin-project-lite" version = "0.2.9" @@ -1475,6 +1621,8 @@ version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ + "aho-corasick", + "memchr", "regex-syntax", ] @@ -1502,6 +1650,43 @@ dependencies = [ "winapi", ] +[[package]] +name = "reqwest" +version = "0.11.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "retain_mut" version = "0.1.9" @@ -1625,6 +1810,15 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.20" @@ -1717,6 +1911,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha-1" version = "0.10.0" @@ -1728,6 +1934,17 @@ dependencies = [ "digest", ] +[[package]] +name = "sha1" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha1_smol" version = "1.0.0" @@ -1866,6 +2083,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "tera" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df578c295f9ec044ff1c829daf31bb7581d5b3c2a7a3d87419afe1f2531438c" +dependencies = [ + "globwalk", + "lazy_static", + "pest", + "pest_derive", + "regex", + "serde", + "serde_json", + "unic-segment", +] + [[package]] name = "termcolor" version = "1.1.3" @@ -1969,6 +2202,7 @@ dependencies = [ "memchr", "mio", "num_cpus", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", @@ -2154,6 +2388,12 @@ dependencies = [ "serde", ] +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + [[package]] name = "uncased" version = "0.9.7" @@ -2164,6 +2404,56 @@ dependencies = [ "version_check", ] +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + [[package]] name = "unicode-bidi" version = "0.3.8" @@ -2263,6 +2553,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" @@ -2316,6 +2617,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.83" @@ -2345,6 +2658,16 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +[[package]] +name = "web-sys" +version = "0.3.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "websocket" version = "0.1.0" @@ -2535,6 +2858,15 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +[[package]] +name = "winreg" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +dependencies = [ + "winapi", +] + [[package]] name = "yansi" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index 1c48a52..b180b7b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] members = [ - "services/*" + "services/*", + "hack/*" ] \ No newline at end of file diff --git a/hack/codegen/.gitignore b/hack/codegen/.gitignore deleted file mode 100644 index b512c09..0000000 --- a/hack/codegen/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/hack/codegen/Cargo.toml b/hack/codegen/Cargo.toml new file mode 100644 index 0000000..450f2e5 --- /dev/null +++ b/hack/codegen/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "codegen" +version = "0.1.0" +edition = "2021" + +[dependencies] +reqwest = { version="0.11.13", features = ["json"] } +tera = { version = "1.17.1", default-features = false } +lazy_static = "1.4.0" +regex = "1.7.0" +futures = "0.3.25" +tokio = { version = "1.22.0", features = ["full"] } +serde = { version = "1.0.147", features = ["derive"] } +serde_json = "1.0.89" \ No newline at end of file diff --git a/hack/codegen/codegen.js b/hack/codegen/codegen.js deleted file mode 100644 index a9c23da..0000000 --- a/hack/codegen/codegen.js +++ /dev/null @@ -1,88 +0,0 @@ -import fetch from "node-fetch"; - -const vehicles_hashmap = async () => { - const req = await fetch("https://census.lithafalcon.cc/get/ps2/vehicle"); - const resp = await req.json(); - - const relevantVehicles = [ - "flash", - "sunderer", - "lightning", - "scythe", - "vanguard", - "prowler", - "reaver", - "mosquito", - "galaxy", - "valkyrie", - "liberator", - "ant", - "harasser", - "dervish", - "chimera", - "javelin", - "corsair", - "magrider", - ]; - - const matcher = new RegExp(`\\b${relevantVehicles.join("|")}\\b`, "i"); - - return resp.vehicle_list - .reduce((acc, vehicle) => { - if (vehicle.name?.en) { - let result = vehicle.name.en.match(matcher); - if (result) { - acc.push(`("${vehicle.vehicle_id}", "${result[0].toLowerCase()}")`); - } - } - - return acc; - }, []) - .filter((v) => !!v); -}; - -const class_hashmap = async () => { - const req = await fetch("https://census.lithafalcon.cc/get/ps2/loadout"); - const resp = await req.json(); - - return resp.loadout_list.map( - (loadout) => - `("${loadout.loadout_id}", "${loadout.code_name - .toLowerCase() - .replace(/\btr|nc|vs|nso\b/, "") - .trim() - .replace("defector", "max") - .replace(/ /g, "_")}")` - ); -}; - -console.log(`// GENERATED CODE -- Do not edit. Run \`node hack/codegen/codegen.js > services/websocket/src/translators.rs\` to regenerate. - -use once_cell::sync::Lazy; -use std::collections::HashMap; - -static VEHICLE_TO_NAME: Lazy> = Lazy::new(|| { - HashMap::from([ - ${(await vehicles_hashmap()).join(",\n ")}, - ]) -}); - -pub fn vehicle_to_name(vehicle_id: &str) -> String { - match VEHICLE_TO_NAME.get(&vehicle_id) { - Some(name) => name.to_string(), - None => "unknown".to_string(), - } -} - -static LOADOUT_TO_CLASS: Lazy> = Lazy::new(|| { - HashMap::from([ - ${(await class_hashmap()).join(",\n ")}, - ]) -}); - -pub fn loadout_to_class(loadout_id: &str) -> String { - match LOADOUT_TO_CLASS.get(&loadout_id) { - Some(name) => name.to_string(), - None => "unknown".to_string(), - } -}`); diff --git a/hack/codegen/package-lock.json b/hack/codegen/package-lock.json deleted file mode 100644 index 0e86274..0000000 --- a/hack/codegen/package-lock.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "name": "saerro-codegen", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "saerro-codegen", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "node-fetch": "^3.3.0" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - } - }, - "dependencies": { - "data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", - "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - } - } -} diff --git a/hack/codegen/package.json b/hack/codegen/package.json deleted file mode 100644 index b624ec0..0000000 --- a/hack/codegen/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "saerro-codegen", - "version": "1.0.0", - "description": "", - "main": "codegen.js", - "type": "module", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "node-fetch": "^3.3.0" - } -} diff --git a/hack/codegen/src/main.rs b/hack/codegen/src/main.rs new file mode 100644 index 0000000..012931c --- /dev/null +++ b/hack/codegen/src/main.rs @@ -0,0 +1,168 @@ +use std::process; + +use lazy_static::lazy_static; +use regex::{Regex, RegexBuilder}; +use serde::{Deserialize, Serialize}; +use tera::Tera; + +#[derive(Deserialize, Serialize, Debug)] +struct LangEn { + en: Option, +} + +#[derive(Deserialize, Serialize, Debug)] +struct Vehicle { + vehicle_id: String, + name: Option, + propulsion_type: String, +} + +#[derive(Deserialize, Serialize, Debug)] +struct VehicleResponse { + vehicle_list: Vec, +} + +#[derive(Deserialize, Serialize, Debug)] +struct Loadout { + loadout_id: String, + code_name: String, +} + +#[derive(Deserialize, Serialize, Debug)] +struct ClassesResponse { + loadout_list: Vec, +} + +async fn translators_rs() { + lazy_static! { + static ref ALL_VEHICLES: Vec<&'static str> = vec![ + "flash", + "sunderer", + "lightning", + "scythe", + "vanguard", + "prowler", + "reaver", + "mosquito", + "galaxy", + "valkyrie", + "liberator", + "ant", + "harasser", + "dervish", + "chimera", + "javelin", + "corsair", + "magrider", + ]; + static ref VEHICLES_RE: Regex = + RegexBuilder::new(format!("{}", ALL_VEHICLES.join("|")).as_str()) + .case_insensitive(true) + .build() + .unwrap(); + } + + let mut tera = Tera::default(); + + tera.add_raw_template( + "translators.rs", + include_str!("templates/translators.rs.tera"), + ) + .unwrap(); + + let res: VehicleResponse = reqwest::get("https://census.lithafalcon.cc/get/ps2/vehicle") + .await + .unwrap() + .json() + .await + .unwrap(); + + let vehicles: Vec = res + .vehicle_list + .into_iter() + .filter(|item| { + // filter if no name + if item.name.is_none() || item.name.as_ref().unwrap().en.is_none() { + // println!("Skipping vehicle (no name): {:#?}", item); + return false; + } + + let name = item.name.as_ref().unwrap().en.as_ref().unwrap(); + if name.contains("Turret") { + // println!("Skipping vehicle (turret): {:#?}", item); + return false; + } + + // filter if not in list + if !VEHICLES_RE.is_match(name.as_str()) { + // println!("Skipping vehicle (not tracked): {:#?}", item); + return false; + } + + return true; + }) + .map(|item| { + // match to regex + let matched = VEHICLES_RE + .find(&item.name.as_ref().unwrap().en.as_ref().unwrap()) + .unwrap(); + + Vehicle { + vehicle_id: item.vehicle_id, + name: Some(LangEn { + en: Some(matched.as_str().to_string().to_lowercase()), + }), + propulsion_type: item.propulsion_type, + } + }) + .collect(); + + let res: ClassesResponse = reqwest::get("https://census.lithafalcon.cc/get/ps2/loadout") + .await + .unwrap() + .json() + .await + .unwrap(); + + let classes: Vec = res + .loadout_list + .into_iter() + .map(|item| { + let new_name = item + .code_name + .replace(" ", "_") + .to_lowercase() + .replace("vs_", "") + .replace("tr_", "") + .replace("nso_", "") + .replace("nc_", "") + .replace("defector", "max"); + Loadout { + loadout_id: item.loadout_id.clone(), + code_name: new_name, + } + }) + .collect(); + + let mut context = tera::Context::new(); + context.insert("vehicles", &vehicles); + context.insert("classes", &classes); + + let rendered = tera.render("translators.rs", &context).unwrap(); + let path_raw = format!( + "{}/../../services/websocket/src/translators.rs", + env!("CARGO_MANIFEST_DIR") + ); + let path = std::path::Path::new(path_raw.as_str()); + + std::fs::write(path, rendered).unwrap(); + process::Command::new("rustfmt") + .arg(path) + .output() + .expect("failed to execute process"); +} + +#[tokio::main] +async fn main() { + translators_rs().await; +} diff --git a/hack/codegen/src/templates/translators.rs.tera b/hack/codegen/src/templates/translators.rs.tera new file mode 100644 index 0000000..9fb44b6 --- /dev/null +++ b/hack/codegen/src/templates/translators.rs.tera @@ -0,0 +1,30 @@ +// GENERATED CODE -- Do not edit. Run `cargo run --bin codegen` to regenerate. + +use once_cell::sync::Lazy; +use std::collections::HashMap; + +static VEHICLE_TO_NAME: Lazy> = Lazy::new(|| { + HashMap::from([ + {% for vehicle in vehicles %}("{{ vehicle.vehicle_id }}", "{{ vehicle.name.en }}"),{% endfor %} + ]) +}); + +pub fn vehicle_to_name(vehicle_id: &str) -> String { + match VEHICLE_TO_NAME.get(&vehicle_id) { + Some(name) => name.to_string(), + None => "unknown".to_string(), + } +} + +static LOADOUT_TO_CLASS: Lazy> = Lazy::new(|| { + HashMap::from([ + {% for class in classes %}("{{ class.loadout_id }}", "{{ class.code_name }}"),{% endfor %} + ]) +}); + +pub fn loadout_to_class(loadout_id: &str) -> String { + match LOADOUT_TO_CLASS.get(&loadout_id) { + Some(name) => name.to_string(), + None => "unknown".to_string(), + } +} diff --git a/services/websocket/src/translators.rs b/services/websocket/src/translators.rs index 83b4bc7..b77bc0f 100644 --- a/services/websocket/src/translators.rs +++ b/services/websocket/src/translators.rs @@ -1,4 +1,4 @@ -// GENERATED CODE -- Do not edit. Run `node hack/codegen/codegen.js > services/websocket/src/translators.rs` to regenerate. +// GENERATED CODE -- Do not edit. Run `cargo run --bin codegen` to regenerate. use once_cell::sync::Lazy; use std::collections::HashMap; @@ -19,11 +19,6 @@ static VEHICLE_TO_NAME: Lazy> = Lazy::new(|| { ("12", "harasser"), ("14", "valkyrie"), ("15", "ant"), - ("100", "ant"), - ("101", "ant"), - ("102", "ant"), - ("150", "ant"), - ("151", "ant"), ("160", "ant"), ("161", "ant"), ("162", "ant"), @@ -37,8 +32,6 @@ static VEHICLE_TO_NAME: Lazy> = Lazy::new(|| { ("1010", "liberator"), ("1011", "galaxy"), ("1105", "vanguard"), - ("2006", "ant"), - ("2009", "ant"), ("2010", "flash"), ("2033", "javelin"), ("2122", "mosquito"), diff --git a/terraform/compute.tf b/terraform/compute.tf deleted file mode 100644 index e69de29..0000000 diff --git a/terraform/providers.tf b/terraform/providers.tf deleted file mode 100644 index e69de29..0000000