From 6c0821ecc1089e67e50ba9e85f325b473877a083 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sun, 25 Aug 2024 20:12:57 +0200 Subject: [PATCH 01/20] format flake with nixpkgs#nixfmt-rfc-style --- flake.nix | 133 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 80 insertions(+), 53 deletions(-) diff --git a/flake.nix b/flake.nix index b83676a..1d507a1 100644 --- a/flake.nix +++ b/flake.nix @@ -15,13 +15,21 @@ flatland.url = "github:StardustXR/flatland"; }; outputs = - inputs@{ self, flake-parts, nixpkgs, hercules-ci-effects, flatland, ... }: + inputs@{ + self, + flake-parts, + nixpkgs, + hercules-ci-effects, + flatland, + ... + }: let name = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.name; src = builtins.path { name = "${name}-source"; path = toString ./.; - filter = path: type: + filter = + path: type: nixpkgs.lib.all (n: builtins.baseNameOf path != n) [ "flake.nix" "flake.lock" @@ -29,63 +37,82 @@ "README.md" ]; }; - in flake-parts.lib.mkFlake { inherit inputs; } { + in + flake-parts.lib.mkFlake { inherit inputs; } { imports = [ flake-parts.flakeModules.easyOverlay ]; - systems = [ "aarch64-linux" "x86_64-linux" "riscv64-linux" ]; - perSystem = { config, self', inputs', pkgs, system, ... }: { - _module.args.pkgs = import inputs.nixpkgs { - inherit system; - overlays = [ inputs.self.overlays.default ]; - }; - overlayAttrs = config.packages; - packages = let sk_gpu = pkgs.callPackage ./nix/sk_gpu.nix { }; - in { - default = self'.packages.${name}; - gnome-graphical-test = self'.checks.gnome-graphical-test; - "${name}" = pkgs.callPackage ./nix/stardust-xr-server.nix { - inherit name src sk_gpu; + systems = [ + "aarch64-linux" + "x86_64-linux" + "riscv64-linux" + ]; + perSystem = + { + config, + self', + inputs', + pkgs, + system, + ... + }: + { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; + overlays = [ inputs.self.overlays.default ]; + }; + overlayAttrs = config.packages; + packages = + let + sk_gpu = pkgs.callPackage ./nix/sk_gpu.nix { }; + in + { + default = self'.packages.${name}; + gnome-graphical-test = self'.checks.gnome-graphical-test; + "${name}" = pkgs.callPackage ./nix/stardust-xr-server.nix { inherit name src sk_gpu; }; + }; + apps.default = { + type = "app"; + program = self'.packages.${name} + "/bin/stardust-xr-server"; + }; + checks.gnome-graphical-test = pkgs.nixosTest ( + import ./nix/gnome-graphical-test.nix { inherit pkgs self; } + ); + devShells.default = pkgs.mkShell { + inputsFrom = [ self'.packages.default ]; + LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; }; }; - apps.default = { - type = "app"; - program = self'.packages.${name} + "/bin/stardust-xr-server"; - }; - checks.gnome-graphical-test = pkgs.nixosTest - (import ./nix/gnome-graphical-test.nix { inherit pkgs self; }); - devShells.default = pkgs.mkShell { - inputsFrom = [ self'.packages.default ]; - LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; - }; - }; flake = { herculesCI.ciSystems = [ "x86_64-linux" ]; - effects = let - pkgs = nixpkgs.legacyPackages.x86_64-linux; - hci-effects = hercules-ci-effects.lib.withPkgs pkgs; - in { ref, rev, ... }: { - gnome-graphical-test = hci-effects.mkEffect { - secretsMap."stardustxrDiscord" = "stardustxrDiscord"; - secretsMap."stardustxrIpfs" = "stardustxrIpfs"; - effectScript = '' - readSecretString stardustxrDiscord .webhook > .webhook - readSecretString stardustxrIpfs .basicauth > .basicauth - set -x - export RESPONSE=$(curl -H @.basicauth -F file=@${ - self.packages."x86_64-linux".gnome-graphical-test - }/screen.png https://ipfs-api.stardustxr.org/api/v0/add) - export CID=$(echo "$RESPONSE" | ${pkgs.jq}/bin/jq -r .Hash) - set +x - export ADDRESS="https://ipfs.stardustxr.org/ipfs/$CID" - ${pkgs.discord-sh}/bin/discord.sh \ - --description "\`stardustxr/server\` has been modified, here's how it renders \`weston-cliptest\` on \`flatland\` via \`monado-service\` inside of the \`gnome-graphical-test\`" \ - --field "Ref;${ref}" \ - --field "Commit ID;${rev}" \ - --field "Flatland Revision;${flatland.rev}" \ - --field "Reproducer;\`nix build github:stardustxr/server/${rev}#gnome-graphical-test\`" \ - --image "$ADDRESS" - ''; + effects = + let + pkgs = nixpkgs.legacyPackages.x86_64-linux; + hci-effects = hercules-ci-effects.lib.withPkgs pkgs; + in + { ref, rev, ... }: + { + gnome-graphical-test = hci-effects.mkEffect { + secretsMap."stardustxrDiscord" = "stardustxrDiscord"; + secretsMap."stardustxrIpfs" = "stardustxrIpfs"; + effectScript = '' + readSecretString stardustxrDiscord .webhook > .webhook + readSecretString stardustxrIpfs .basicauth > .basicauth + set -x + export RESPONSE=$(curl -H @.basicauth -F file=@${ + self.packages."x86_64-linux".gnome-graphical-test + }/screen.png https://ipfs-api.stardustxr.org/api/v0/add) + export CID=$(echo "$RESPONSE" | ${pkgs.jq}/bin/jq -r .Hash) + set +x + export ADDRESS="https://ipfs.stardustxr.org/ipfs/$CID" + ${pkgs.discord-sh}/bin/discord.sh \ + --description "\`stardustxr/server\` has been modified, here's how it renders \`weston-cliptest\` on \`flatland\` via \`monado-service\` inside of the \`gnome-graphical-test\`" \ + --field "Ref;${ref}" \ + --field "Commit ID;${rev}" \ + --field "Flatland Revision;${flatland.rev}" \ + --field "Reproducer;\`nix build github:stardustxr/server/${rev}#gnome-graphical-test\`" \ + --image "$ADDRESS" + ''; + }; }; - }; }; }; } -- 2.49.1 From 4683710f095310317633d6aed495d835a5fa609c Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 4 Sep 2024 05:14:43 -0400 Subject: [PATCH 02/20] feat(main): debug launched clients flag --- src/main.rs | 4 ++++ src/session.rs | 35 +++++++++++++++++++++-------------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/main.rs b/src/main.rs index ab1de2d..43679c2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -54,6 +54,10 @@ struct CliArgs { #[clap(id = "PRIORITY", short = 'o', long = "overlay", action)] overlay_priority: Option, + /// Debug the clients started by the server + #[clap(short = 'd', long = "debug", action)] + debug_launched_clients: bool, + /// Run a script when ready for clients to connect. If this is not set the script at $HOME/.config/stardust/startup will be ran if it exists. #[clap(id = "PATH", short = 'e', long = "execute-startup-script", action)] startup_script: Option, diff --git a/src/session.rs b/src/session.rs index 29e52bb..8fef44d 100644 --- a/src/session.rs +++ b/src/session.rs @@ -37,17 +37,22 @@ pub async fn save_session(project_dirs: &ProjectDirs) { pub fn launch_start(cli_args: &CliArgs, project_dirs: &ProjectDirs) -> Vec { match (&cli_args.restore, &cli_args.startup_script) { - (Some(session_id), _) => { - restore_session(&project_dirs.state_dir().unwrap().join(session_id)) - } - (None, Some(startup_script)) => { - run_script(&startup_script.clone().canonicalize().unwrap_or_default()) - } - (None, None) => run_script(&project_dirs.config_dir().join("startup")), + (Some(session_id), _) => restore_session( + &project_dirs.state_dir().unwrap().join(session_id), + cli_args.debug_launched_clients, + ), + (None, Some(startup_script)) => run_script( + &startup_script.clone().canonicalize().unwrap_or_default(), + cli_args.debug_launched_clients, + ), + (None, None) => run_script( + &project_dirs.config_dir().join("startup"), + cli_args.debug_launched_clients, + ), } } -pub fn restore_session(session_dir: &Path) -> Vec { +pub fn restore_session(session_dir: &Path, debug_launched_clients: bool) -> Vec { let Ok(clients) = session_dir.read_dir() else { return Vec::new(); }; @@ -55,22 +60,24 @@ pub fn restore_session(session_dir: &Path) -> Vec { .filter_map(Result::ok) .filter_map(|c| ClientStateParsed::from_file(&c.path())) .filter_map(ClientStateParsed::launch_command) - .filter_map(run_client) + .filter_map(|c| run_client(c, debug_launched_clients)) .collect() } -pub fn run_script(script_path: &Path) -> Vec { +pub fn run_script(script_path: &Path, debug_launched_clients: bool) -> Vec { let _ = std::fs::set_permissions(script_path, std::fs::Permissions::from_mode(0o755)); let startup_command = Command::new(script_path); - run_client(startup_command) + run_client(startup_command, debug_launched_clients) .map(|c| vec![c]) .unwrap_or_default() } -pub fn run_client(mut command: Command) -> Option { +pub fn run_client(mut command: Command, debug_launched_clients: bool) -> Option { command.stdin(Stdio::null()); - command.stdout(Stdio::null()); - command.stderr(Stdio::null()); + if !debug_launched_clients { + command.stdout(Stdio::null()); + command.stderr(Stdio::null()); + } for (var, value) in connection_env() { command.env(var, value); } -- 2.49.1 From c12300e756693c16a4d0d3716a9d89c9178da96a Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 5 Sep 2024 08:52:10 -0400 Subject: [PATCH 03/20] refactor(cargo.toml): upgrade and refine --- Cargo.lock | 797 ++++++++++++++++++++++------- Cargo.toml | 26 +- src/objects/input/mouse_pointer.rs | 8 +- 3 files changed, 614 insertions(+), 217 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5342640..070a466 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aho-corasick" version = "1.1.3" @@ -43,7 +49,7 @@ dependencies = [ "ndk", "ndk-context", "ndk-sys", - "num_enum 0.7.2", + "num_enum 0.7.3", "thiserror", ] @@ -170,6 +176,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + [[package]] name = "async-broadcast" version = "0.7.1" @@ -202,7 +217,7 @@ checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-lite", "slab", ] @@ -220,9 +235,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.3" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ "async-lock", "cfg-if", @@ -234,7 +249,7 @@ dependencies = [ "rustix", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -250,9 +265,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.3" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" +checksum = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374" dependencies = [ "async-channel", "async-io", @@ -265,7 +280,7 @@ dependencies = [ "futures-lite", "rustix", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -276,14 +291,14 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "async-signal" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ "async-io", "async-lock", @@ -294,7 +309,7 @@ dependencies = [ "rustix", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -316,7 +331,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -327,13 +342,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -405,7 +420,7 @@ dependencies = [ "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.7.4", "object", "rustc-demangle", ] @@ -422,6 +437,27 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bitflags" version = "1.3.2" @@ -458,22 +494,22 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee891b04274a59bd38b412188e24b849617b2e45a0fd8d057deb63e7403761b" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -484,9 +520,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "calloop" @@ -503,12 +539,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.6" +version = "1.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" +checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -523,6 +560,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -541,9 +584,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.13" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -551,9 +594,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.13" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -570,7 +613,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -591,9 +634,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" dependencies = [ "cc", ] @@ -686,9 +729,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -717,6 +760,12 @@ version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -767,6 +816,16 @@ dependencies = [ "dirs-sys", ] +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + [[package]] name = "dirs-sys" version = "0.4.1" @@ -779,6 +838,17 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + [[package]] name = "dlib" version = "0.5.2" @@ -830,7 +900,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd39dde40b6e196c2e8763f23d119ddb1a8714534bf7d77fa97a65b0feda3986" dependencies = [ "libc", - "linux-raw-sys 0.6.4", + "linux-raw-sys 0.6.5", ] [[package]] @@ -839,6 +909,15 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + [[package]] name = "endi" version = "1.1.0" @@ -863,7 +942,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -934,9 +1013,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flatbuffers" @@ -950,12 +1035,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1004,7 +1089,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-core", "futures-io", "parking", @@ -1019,7 +1104,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1053,9 +1138,9 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "979f00864edc7516466d6b3157706e06c032f22715700ddd878228a91d02bc56" +checksum = "dbb949699c3e4df3a183b1d2142cb24277057055ed23c68ed58894f76c517223" dependencies = [ "cfg-if", "libc", @@ -1124,9 +1209,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -1134,7 +1219,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.2.6", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -1320,9 +1405,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -1357,9 +1442,18 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itertools" -version = "0.12.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -1418,6 +1512,37 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "pico-args", + "regex", + "regex-syntax 0.8.4", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.7", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -1426,9 +1551,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" @@ -1437,7 +1562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -1458,9 +1583,9 @@ checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "linux-raw-sys" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0b5399f6804fbab912acbd8878ed3532d506b7c951b8f9f164ef90fef39e3f4" +checksum = "2a385b1be4e5c3e362ad2ffa73c392e53f031eaa5b7d648e64cd87f27f6063d7" [[package]] name = "lock_api" @@ -1478,6 +1603,39 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "logos" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1ceb190eb9bdeecdd8f1ad6a71d6d632a50905948771718741b5461fb01e13" +dependencies = [ + "logos-derive", +] + +[[package]] +name = "logos-codegen" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90be66cb7bd40cb5cc2e9cfaf2d1133b04a3d93b72344267715010a466e0915a" +dependencies = [ + "beef", + "fnv", + "lazy_static", + "proc-macro2", + "quote", + "regex-syntax 0.8.4", + "syn 2.0.77", +] + +[[package]] +name = "logos-derive" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45154231e8e96586b39494029e58f12f8ffcb5ecf80333a603a13aa205ea8cbd" +dependencies = [ + "logos-codegen", +] + [[package]] name = "loom" version = "0.7.2" @@ -1500,7 +1658,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1526,9 +1684,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.8.0" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a5a03cefb0d953ec0be133036f14e109412fa594edc2f77227249db66cc3ed" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] @@ -1562,7 +1720,7 @@ checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1586,6 +1744,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mint" version = "0.5.9" @@ -1597,9 +1764,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi 0.3.9", "libc", @@ -1626,7 +1793,7 @@ dependencies = [ "jni-sys", "log", "ndk-sys", - "num_enum 0.7.2", + "num_enum 0.7.3", "raw-window-handle 0.4.3", "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", @@ -1648,6 +1815,12 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.27.1" @@ -1660,6 +1833,18 @@ dependencies = [ "memoffset", ] +[[package]] +name = "nix" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "cfg_aliases 0.1.1", + "libc", +] + [[package]] name = "nix" version = "0.29.0" @@ -1668,7 +1853,7 @@ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.6.0", "cfg-if", - "cfg_aliases", + "cfg_aliases 0.2.1", "libc", "memoffset", ] @@ -1713,11 +1898,11 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ - "num_enum_derive 0.7.2", + "num_enum_derive 0.7.3", ] [[package]] @@ -1734,14 +1919,14 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1856,6 +2041,85 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.5.0", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared 0.11.2", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared 0.11.2", + "proc-macro2", + "quote", + "syn 2.0.77", + "unicase", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", + "unicase", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "pin-project" version = "1.1.5" @@ -1873,7 +2137,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -1890,12 +2154,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.0", + "fastrand 2.1.1", "futures-io", ] @@ -1907,9 +2171,9 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "polling" -version = "3.7.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", @@ -1917,7 +2181,7 @@ dependencies = [ "pin-project-lite", "rustix", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1928,9 +2192,18 @@ checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prisma" @@ -1955,11 +2228,11 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.1.0" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" dependencies = [ - "toml_edit 0.21.1", + "toml_edit 0.22.20", ] [[package]] @@ -1987,14 +2260,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8021cf59c8ec9c432cfc2526ac6b8aa508ecaf29cd415f271b8406c1b851c3fd" dependencies = [ "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "prost" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13db3d3fde688c61e2446b4d843bc27a7e8af269a69440c0308021dc92333cc" +checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" dependencies = [ "bytes", "prost-derive", @@ -2002,40 +2275,40 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18bec9b0adc4eba778b33684b7ba3e7137789434769ee3ce3930463ef904cfca" +checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" dependencies = [ "anyhow", - "itertools", + "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "prost-types" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee5168b05f49d4b0ca581206eb14a7b22fafd963efe729ac48eb03266e25cc2" +checksum = "60caa6738c7369b940c3d49246a8d1749323674c65cb13010134f5c9bad5b519" dependencies = [ "prost", ] [[package]] name = "quick-xml" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4" +checksum = "96a05e2e8efddfa51a84ca47cec303fac86c8541b686d37cac5efc0e094417bc" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2120,9 +2393,9 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom", "libredox", @@ -2131,9 +2404,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -2187,18 +2460,18 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ "bitflags 2.6.0", "errno", @@ -2260,31 +2533,32 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.120" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -2297,7 +2571,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2342,6 +2616,12 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -2351,6 +2631,12 @@ dependencies = [ "libc", ] +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -2378,7 +2664,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay" version = "0.3.0" -source = "git+https://github.com/smithay/smithay.git#c6aab182a3c9f106d9c7a0ea34187f90403e59e7" +source = "git+https://github.com/smithay/smithay.git#656178be0a19ae4c577c9c93a3d4ebfdb80e649c" dependencies = [ "appendlist", "bitflags 2.6.0", @@ -2391,7 +2677,7 @@ dependencies = [ "drm-fourcc", "errno", "gl_generator", - "indexmap 2.2.6", + "indexmap 2.5.0", "lazy_static", "libc", "libloading", @@ -2408,7 +2694,7 @@ dependencies = [ "wayland-protocols-misc", "wayland-protocols-wlr", "wayland-server", - "xkbcommon 0.7.0", + "xkbcommon", ] [[package]] @@ -2430,7 +2716,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#1b82b6c9fa43e080a03f103924fd282c21815176" +source = "git+https://github.com/StardustXR/core.git?branch=dev#c5591c713e85cc2df9c63583fb3026e6c93ccef7" dependencies = [ "cluFlock", "dirs", @@ -2450,7 +2736,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#1b82b6c9fa43e080a03f103924fd282c21815176" +source = "git+https://github.com/StardustXR/core.git?branch=dev#c5591c713e85cc2df9c63583fb3026e6c93ccef7" dependencies = [ "flatbuffers", "flexbuffers", @@ -2503,7 +2789,7 @@ dependencies = [ "tracing-tracy", "wayland-backend", "wayland-scanner", - "xkbcommon 0.8.0", + "xkbcommon-rs", "zbus", ] @@ -2550,12 +2836,44 @@ dependencies = [ "thiserror", ] +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot 0.12.3", + "phf_shared 0.10.0", + "precomputed-hash", +] + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.77", +] + [[package]] name = "syn" version = "1.0.109" @@ -2569,9 +2887,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -2592,14 +2910,26 @@ checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", - "fastrand 2.1.0", + "fastrand 2.1.1", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", ] [[package]] @@ -2619,7 +2949,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2633,10 +2963,19 @@ dependencies = [ ] [[package]] -name = "tokio" -version = "1.39.2" +name = "tiny-keccak" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tokio" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -2659,7 +2998,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2675,9 +3014,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -2713,18 +3052,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", - "toml_datetime", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "toml_datetime", "winnow 0.5.40", ] @@ -2735,7 +3063,7 @@ version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -2744,9 +3072,9 @@ dependencies = [ [[package]] name = "tonic" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38659f4a91aba8598d27821589f5db7dddd94601e7a01b1e485a50e5484c7401" +checksum = "c6f6ba989e4b2c58ae83d862d3a3e27690b6e3ae630d0deb59f3697f32aa88ad" dependencies = [ "async-stream", "async-trait", @@ -2794,15 +3122,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -2823,7 +3151,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -2867,9 +3195,9 @@ dependencies = [ [[package]] name = "tracing-tracy" -version = "0.11.1" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be7f8874d6438e4263f9874c84eded5095bda795d9c7da6ea0192e1750d3ffe" +checksum = "c6a90519f16f55e5c62ffd5976349f10744435a919ecff83d918300575dfb69b" dependencies = [ "tracing-core", "tracing-subscriber", @@ -2878,9 +3206,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.17.1" +version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63de1e1d4115534008d8fd5788b39324d6f58fc707849090533828619351d855" +checksum = "373db47331c3407b343538df77eea2516884a0b126cdfb4b135acfd400015dd7" dependencies = [ "loom", "once_cell", @@ -2889,9 +3217,9 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98b98232a2447ce0a58f9a0bfb5f5e39647b5c597c994b63945fcccd1306fafb" +checksum = "49cf0064dcb31c99aa1244c1b93439359e53f72ed217eef5db50abd442241e9a" dependencies = [ "cc", ] @@ -2919,6 +3247,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-ident" version = "1.0.12" @@ -2937,6 +3274,12 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" +[[package]] +name = "unicode-xid" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2982,9 +3325,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wayland-backend" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90e11ce2ca99c97b940ee83edbae9da2d56a08f9ea8158550fd77fa31722993" +checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" dependencies = [ "cc", "downcast-rs", @@ -2996,9 +3339,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.3" +version = "0.32.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62989625a776e827cc0f15d41444a3cea5205b963c3a25be48ae1b52d6b4daaa" +checksum = "2b5755d77ae9040bb872a25026555ce4cb0ae75fd923e90d25fba07d81057de0" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -3008,9 +3351,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe44d48a0e51909c89da297f6b43bb814b881c78b69e254a4558a5fa8752887" +checksum = "d40dd9d2f7f2713724d84b920d6f73ff878f6a353712942f75f78f4dadb72886" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -3021,9 +3364,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd993de54a40a40fbe5601d9f1fbcaef0aebcc5fda447d7dc8f6dcbaae4f8953" +checksum = "dad87b5fd1b1d3ca2f792df8f686a2a11e3fe1077b71096f7a175ab699f89109" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -3034,9 +3377,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.4" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7b56f89937f1cf2ee1f1259cf2936a17a1f45d8f0aa1019fae6d470d304cfa6" +checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" dependencies = [ "proc-macro2", "quick-xml", @@ -3045,9 +3388,9 @@ dependencies = [ [[package]] name = "wayland-server" -version = "0.31.4" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a4bab6d420ee4a609b63ef4d5f9b5d309c6b93a029fccab70f2594c0cb3ae" +checksum = "0f18d47038c0b10479e695d99ed073e400ccd9bdbb60e6e503c96f62adcb12b6" dependencies = [ "bitflags 2.6.0", "downcast-rs", @@ -3059,9 +3402,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.4" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43676fe2daf68754ecf1d72026e4e6c15483198b5d24e888b74d3f22f887a148" +checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" dependencies = [ "dlib", "log", @@ -3086,11 +3429,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3130,7 +3473,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3141,7 +3484,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] [[package]] @@ -3190,6 +3533,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -3388,23 +3740,12 @@ dependencies = [ [[package]] name = "xdg-home" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "xkbcommon" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13867d259930edc7091a6c41b4ce6eee464328c6ff9659b7e4c668ca20d4c91e" -dependencies = [ - "libc", - "memmap2", - "xkeysym", + "windows-sys 0.59.0", ] [[package]] @@ -3414,9 +3755,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9" dependencies = [ "libc", + "memmap2", "xkeysym", ] +[[package]] +name = "xkbcommon-rs" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d02316af6831aee03a1ecc7b887ec1e983f4cc43792b80faade552cd7e710c6" +dependencies = [ + "bitflags 2.6.0", + "indexmap 2.5.0", + "lalrpop", + "lalrpop-util", + "log", + "logos", + "nix 0.28.0", + "phf", + "phf_shared 0.11.2", + "strum", + "strum_macros", + "thiserror", + "unicase", + "xkbcommon-rs-codegen", + "xkeysym", +] + +[[package]] +name = "xkbcommon-rs-codegen" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2254a32bc6e1a177d8f6348da65f295487a66987a101a76dcb84b27d72f9f711" +dependencies = [ + "convert_case", + "phf", + "phf_codegen", + "regex", + "unicase", +] + [[package]] name = "xkeysym" version = "0.2.1" @@ -3425,9 +3803,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" +checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" [[package]] name = "zbus" @@ -3474,10 +3852,10 @@ version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "zvariant_utils", ] @@ -3492,6 +3870,27 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] + [[package]] name = "zvariant" version = "4.2.0" @@ -3511,10 +3910,10 @@ version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", "zvariant_utils", ] @@ -3526,5 +3925,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.77", ] diff --git a/Cargo.toml b/Cargo.toml index ce87e34..9d67e8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ path = "src/main.rs" [features] default = ["wayland"] -wayland = ["dep:smithay"] +wayland = ["dep:smithay", "dep:wayland-scanner", "dep:wayland-backend"] profile_tokio = ["dep:console-subscriber", "tokio/tracing"] profile_app = ["dep:tracing-tracy"] local_deps = ["stereokit-rust/force-local-deps"] @@ -36,16 +36,17 @@ auto_link_exclude_list = [ [profile.dev.package."*"] opt-level = 3 +debug = true +strip = "none" +debug-assertions = true +overflow-checks = true [profile.release] opt-level = 3 debug = "line-tables-only" -strip = "symbols" +strip = "none" debug-assertions = true overflow-checks = false -lto = true -panic = 'unwind' - [dependencies] # small utility thingys @@ -85,11 +86,11 @@ nix = "0.29.0" input-event-codes = "6.2.0" zbus = { version = "4.4.0", default-features = false, features = ["tokio"] } directories = "5.0.1" -xkbcommon = { version = "0.8.0", default-features = false } +xkbcommon-rs = "0.1.0" # wayland -wayland-scanner = "0.31.4" -wayland-backend = "0.3.6" +wayland-backend = { version = "0.3.7", optional = true, default-features = false } +wayland-scanner = { version = "0.31.4", optional = true } [dependencies.smithay] # git = "https://github.com/technobaboo/smithay.git" @@ -97,15 +98,10 @@ wayland-backend = "0.3.6" git = "https://github.com/smithay/smithay.git" # path = "../smithay" default-features = false -features = [ - "desktop", - "backend_drm", - "backend_egl", - "renderer_gl", - "wayland_frontend", -] +features = ["desktop", "backend_drm", "renderer_gl", "wayland_frontend"] optional = true + [dependencies.stereokit-rust] # path = "../StereoKit-rust" # git = "https://github.com/mvvvv/StereoKit-rust.git" diff --git a/src/objects/input/mouse_pointer.rs b/src/objects/input/mouse_pointer.rs index 2e97a50..41858f3 100644 --- a/src/objects/input/mouse_pointer.rs +++ b/src/objects/input/mouse_pointer.rs @@ -18,7 +18,7 @@ use slotmap::{DefaultKey, Key as SlotKey}; use stardust_xr::values::Datamap; use std::sync::Arc; use stereokit_rust::system::{Input, Key}; -use xkbcommon::xkb::{Context, Keymap, FORMAT_TEXT_V1}; +use xkbcommon_rs::{xkb_keymap::CompileFlags, Context, Keymap, KeymapFormat}; use super::{get_sorted_handlers, CaptureManager, DistanceCalculator}; @@ -75,10 +75,12 @@ impl MousePointer { Datamap::from_typed(MouseEvent::default())?, )?; + let context = Context::new(0).unwrap(); let keymap = KEYMAPS.lock().insert( - Keymap::new_from_names(&Context::new(0), "evdev", "", "", "", None, 0) + Keymap::new_from_names(context, None, CompileFlags::NO_FLAGS) .unwrap() - .get_as_string(FORMAT_TEXT_V1), + .get_as_string(KeymapFormat::TextV1) + .unwrap(), ); let keyboard_sender = PulseSender::add_to( -- 2.49.1 From 9546a362000bf4afa80591ea6099bcd326464f89 Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 15 Sep 2024 12:27:10 -0400 Subject: [PATCH 04/20] fix(packaging): update stereokit --- Cargo.lock | 8 ++++---- Cargo.toml | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 070a466..f967c7f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1189,9 +1189,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" +checksum = "c28091a37a5d09b555cb6628fd954da299b536433834f5b8e59eba78e0cbbf8a" dependencies = [ "mint", "serde", @@ -2814,12 +2814,12 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stereokit-macros" version = "0.1.0" -source = "git+https://github.com/technobaboo/StereoKit-rust.git#93829181d5eea954e15dba9d9bfb0ec62e98d400" +source = "git+https://github.com/mvvvv/StereoKit-rust.git#1a0ba771a948e31044f0dd264efcc9f5be4682d5" [[package]] name = "stereokit-rust" version = "0.1.0" -source = "git+https://github.com/technobaboo/StereoKit-rust.git#93829181d5eea954e15dba9d9bfb0ec62e98d400" +source = "git+https://github.com/mvvvv/StereoKit-rust.git#1a0ba771a948e31044f0dd264efcc9f5be4682d5" dependencies = [ "android-activity", "android_logger", diff --git a/Cargo.toml b/Cargo.toml index 9d67e8b..e1db669 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -75,7 +75,7 @@ serde_repr = "0.1.19" toml = "0.8.19" # mathy stuffs -glam = { version = "0.28.0", features = ["mint", "serde"] } +glam = { version = "0.29.0", features = ["mint", "serde"] } mint = "0.5.9" tokio = { version = "1.39.2", features = ["rt-multi-thread", "signal", "time"] } prisma = "0.1.1" @@ -104,8 +104,8 @@ optional = true [dependencies.stereokit-rust] # path = "../StereoKit-rust" -# git = "https://github.com/mvvvv/StereoKit-rust.git" -git = "https://github.com/technobaboo/StereoKit-rust.git" +git = "https://github.com/mvvvv/StereoKit-rust.git" +# git = "https://github.com/technobaboo/StereoKit-rust.git" features = ["no-event-loop"] default-features = false -- 2.49.1 From bf68b878130bfbefba73b3af93a23647b9c5fdff Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 1 Nov 2024 12:10:45 -0400 Subject: [PATCH 05/20] fix(packaging): don't do dev in core --- Cargo.lock | 25 ++++++++++++++++++++++--- Cargo.toml | 1 - 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f967c7f..40a7030 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2716,7 +2716,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#c5591c713e85cc2df9c63583fb3026e6c93ccef7" +source = "git+https://github.com/StardustXR/core.git#1bc94e67cad6b69fa3c509598b07bc5085cc65a3" dependencies = [ "cluFlock", "dirs", @@ -2727,7 +2727,7 @@ dependencies = [ "rustc-hash", "serde", "shiva-color-rs", - "stardust-xr-schemas", + "stardust-xr-schemas 1.5.3 (git+https://github.com/StardustXR/core.git)", "thiserror", "tokio", "tracing", @@ -2752,6 +2752,25 @@ dependencies = [ "zbus", ] +[[package]] +name = "stardust-xr-schemas" +version = "1.5.3" +source = "git+https://github.com/StardustXR/core.git#1bc94e67cad6b69fa3c509598b07bc5085cc65a3" +dependencies = [ + "flatbuffers", + "flexbuffers", + "fnv", + "futures-util", + "kdl", + "manifest-dir-macros", + "random-string", + "serde", + "serde_repr", + "thiserror", + "tokio", + "zbus", +] + [[package]] name = "stardust-xr-server" version = "0.45.0" @@ -2802,7 +2821,7 @@ dependencies = [ "proc-macro2", "quote", "split-iter", - "stardust-xr-schemas", + "stardust-xr-schemas 1.5.3 (git+https://github.com/StardustXR/core.git?branch=dev)", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e1db669..207f865 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,7 +111,6 @@ default-features = false [dependencies.stardust-xr] git = "https://github.com/StardustXR/core.git" -branch = "dev" [dependencies.stardust-xr-server-codegen] path = "codegen" -- 2.49.1 From e8e485b4721fff7ab4b06f2ac65596afc7bd7262 Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 1 Nov 2024 12:31:44 -0400 Subject: [PATCH 06/20] fix(packaging): even more shenanigans --- Cargo.lock | 125 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 40a7030..37bbab0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2736,7 +2736,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#c5591c713e85cc2df9c63583fb3026e6c93ccef7" +source = "git+https://github.com/StardustXR/core.git?branch=dev#b68343a67f93e95ac5bec138c8ee0e082189a489" dependencies = [ "flatbuffers", "flexbuffers", @@ -2744,12 +2744,12 @@ dependencies = [ "futures-util", "kdl", "manifest-dir-macros", - "random-string", + "nanoid", "serde", "serde_repr", "thiserror", "tokio", - "zbus", + "zbus 5.0.1", ] [[package]] @@ -2768,7 +2768,7 @@ dependencies = [ "serde_repr", "thiserror", "tokio", - "zbus", + "zbus 4.4.0", ] [[package]] @@ -2809,7 +2809,7 @@ dependencies = [ "wayland-backend", "wayland-scanner", "xkbcommon-rs", - "zbus", + "zbus 4.4.0", ] [[package]] @@ -3860,9 +3860,45 @@ dependencies = [ "uds_windows", "windows-sys 0.52.0", "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", + "zbus_macros 4.4.0", + "zbus_names 3.0.0", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333be40ef37976542e10832ba961e3e44ea215a6b1e2673066b303ee3e0ede10" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-util", + "hex", + "nix 0.29.0", + "ordered-stream", + "serde", + "serde_repr", + "static_assertions", + "tokio", + "tracing", + "uds_windows", + "windows-sys 0.59.0", + "xdg-home", + "zbus_macros 5.0.1", + "zbus_names 4.0.0", + "zvariant 5.0.1", ] [[package]] @@ -3875,7 +3911,20 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.77", - "zvariant_utils", + "zvariant_utils 2.1.0", +] + +[[package]] +name = "zbus_macros" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381be624000c82e716c2a45d9213fabacf82177591fa8a6ff655d2825450601a" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.77", + "zvariant_utils 3.0.1", ] [[package]] @@ -3886,7 +3935,18 @@ checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", - "zvariant", + "zvariant 4.2.0", +] + +[[package]] +name = "zbus_names" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc27fbd3593ff015cef906527a2ec4115e2e3dbf6204a24d952ac4975c80614" +dependencies = [ + "serde", + "static_assertions", + "zvariant 5.0.1", ] [[package]] @@ -3920,7 +3980,21 @@ dependencies = [ "enumflags2", "serde", "static_assertions", - "zvariant_derive", + "zvariant_derive 4.2.0", +] + +[[package]] +name = "zvariant" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c690a1da8858fd4377b8cc3134a753b0bea1d8ebd78ad6e5897fab821c5e184e" +dependencies = [ + "endi", + "enumflags2", + "serde", + "static_assertions", + "zvariant_derive 5.0.1", + "zvariant_utils 3.0.1", ] [[package]] @@ -3933,7 +4007,20 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.77", - "zvariant_utils", + "zvariant_utils 2.1.0", +] + +[[package]] +name = "zvariant_derive" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b6ddc1fed08493e4f2bd9350e7d00a3383467228735f3f169a9f8820fde755" +dependencies = [ + "proc-macro-crate 3.2.0", + "proc-macro2", + "quote", + "syn 2.0.77", + "zvariant_utils 3.0.1", ] [[package]] @@ -3946,3 +4033,17 @@ dependencies = [ "quote", "syn 2.0.77", ] + +[[package]] +name = "zvariant_utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d85190ba70bc7b9540430df078bb529620b1464ed4a606010de584e27094d" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "static_assertions", + "syn 2.0.77", + "winnow 0.6.18", +] -- 2.49.1 From c830becbff8907809c87dc0949f9a0abd4d77ed6 Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 1 Nov 2024 15:10:00 -0400 Subject: [PATCH 07/20] fix(packaging): use workspace deps --- Cargo.lock | 142 ++++----------------------------------------- Cargo.toml | 5 +- codegen/Cargo.toml | 4 +- codegen/src/lib.rs | 2 +- 4 files changed, 17 insertions(+), 136 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37bbab0..f044a50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2727,31 +2727,12 @@ dependencies = [ "rustc-hash", "serde", "shiva-color-rs", - "stardust-xr-schemas 1.5.3 (git+https://github.com/StardustXR/core.git)", + "stardust-xr-schemas", "thiserror", "tokio", "tracing", ] -[[package]] -name = "stardust-xr-schemas" -version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#b68343a67f93e95ac5bec138c8ee0e082189a489" -dependencies = [ - "flatbuffers", - "flexbuffers", - "fnv", - "futures-util", - "kdl", - "manifest-dir-macros", - "nanoid", - "serde", - "serde_repr", - "thiserror", - "tokio", - "zbus 5.0.1", -] - [[package]] name = "stardust-xr-schemas" version = "1.5.3" @@ -2768,7 +2749,7 @@ dependencies = [ "serde_repr", "thiserror", "tokio", - "zbus 4.4.0", + "zbus", ] [[package]] @@ -2809,7 +2790,7 @@ dependencies = [ "wayland-backend", "wayland-scanner", "xkbcommon-rs", - "zbus 4.4.0", + "zbus", ] [[package]] @@ -2821,7 +2802,7 @@ dependencies = [ "proc-macro2", "quote", "split-iter", - "stardust-xr-schemas 1.5.3 (git+https://github.com/StardustXR/core.git?branch=dev)", + "stardust-xr", ] [[package]] @@ -3860,45 +3841,9 @@ dependencies = [ "uds_windows", "windows-sys 0.52.0", "xdg-home", - "zbus_macros 4.4.0", - "zbus_names 3.0.0", - "zvariant 4.2.0", -] - -[[package]] -name = "zbus" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333be40ef37976542e10832ba961e3e44ea215a6b1e2673066b303ee3e0ede10" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", - "async-recursion", - "async-task", - "async-trait", - "blocking", - "enumflags2", - "event-listener", - "futures-core", - "futures-util", - "hex", - "nix 0.29.0", - "ordered-stream", - "serde", - "serde_repr", - "static_assertions", - "tokio", - "tracing", - "uds_windows", - "windows-sys 0.59.0", - "xdg-home", - "zbus_macros 5.0.1", - "zbus_names 4.0.0", - "zvariant 5.0.1", + "zbus_macros", + "zbus_names", + "zvariant", ] [[package]] @@ -3911,20 +3856,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.77", - "zvariant_utils 2.1.0", -] - -[[package]] -name = "zbus_macros" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381be624000c82e716c2a45d9213fabacf82177591fa8a6ff655d2825450601a" -dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.77", - "zvariant_utils 3.0.1", + "zvariant_utils", ] [[package]] @@ -3935,18 +3867,7 @@ checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", - "zvariant 4.2.0", -] - -[[package]] -name = "zbus_names" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc27fbd3593ff015cef906527a2ec4115e2e3dbf6204a24d952ac4975c80614" -dependencies = [ - "serde", - "static_assertions", - "zvariant 5.0.1", + "zvariant", ] [[package]] @@ -3980,21 +3901,7 @@ dependencies = [ "enumflags2", "serde", "static_assertions", - "zvariant_derive 4.2.0", -] - -[[package]] -name = "zvariant" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c690a1da8858fd4377b8cc3134a753b0bea1d8ebd78ad6e5897fab821c5e184e" -dependencies = [ - "endi", - "enumflags2", - "serde", - "static_assertions", - "zvariant_derive 5.0.1", - "zvariant_utils 3.0.1", + "zvariant_derive", ] [[package]] @@ -4007,20 +3914,7 @@ dependencies = [ "proc-macro2", "quote", "syn 2.0.77", - "zvariant_utils 2.1.0", -] - -[[package]] -name = "zvariant_derive" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b6ddc1fed08493e4f2bd9350e7d00a3383467228735f3f169a9f8820fde755" -dependencies = [ - "proc-macro-crate 3.2.0", - "proc-macro2", - "quote", - "syn 2.0.77", - "zvariant_utils 3.0.1", + "zvariant_utils", ] [[package]] @@ -4033,17 +3927,3 @@ dependencies = [ "quote", "syn 2.0.77", ] - -[[package]] -name = "zvariant_utils" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8d85190ba70bc7b9540430df078bb529620b1464ed4a606010de584e27094d" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "static_assertions", - "syn 2.0.77", - "winnow 0.6.18", -] diff --git a/Cargo.toml b/Cargo.toml index 207f865..dd3a454 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,9 @@ homepage = "https://stardustxr.org" [workspace] members = ["codegen"] +[workspace.dependencies.stardust-xr] +git = "https://github.com/StardustXR/core.git" + [[bin]] name = "stardust-xr-server" path = "src/main.rs" @@ -110,7 +113,7 @@ features = ["no-event-loop"] default-features = false [dependencies.stardust-xr] -git = "https://github.com/StardustXR/core.git" +workspace = true [dependencies.stardust-xr-server-codegen] path = "codegen" diff --git a/codegen/Cargo.toml b/codegen/Cargo.toml index 26cf44b..242fa09 100644 --- a/codegen/Cargo.toml +++ b/codegen/Cargo.toml @@ -13,6 +13,4 @@ mint = "0.5.9" proc-macro2 = "1.0.71" split-iter = "0.1.0" -[dependencies.stardust-xr-schemas] -git = "https://github.com/StardustXR/core.git" -branch = "dev" +stardust-xr = { workspace = true } diff --git a/codegen/src/lib.rs b/codegen/src/lib.rs index 1be760e..5ededbe 100644 --- a/codegen/src/lib.rs +++ b/codegen/src/lib.rs @@ -2,7 +2,7 @@ use convert_case::{Case, Casing}; use proc_macro2::{Ident, Span, TokenStream}; use quote::{quote, ToTokens}; use split_iter::Splittable; -use stardust_xr_schemas::protocol::*; +use stardust_xr::schemas::protocol::*; fn fold_tokens(a: TokenStream, b: TokenStream) -> TokenStream { quote!(#a #b) -- 2.49.1 From 6b744f598cc86d5bb010a0719ad2b5f0263f0d12 Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 5 Sep 2024 10:26:23 -0400 Subject: [PATCH 08/20] fix(cargo.toml): build settings that don't deadlock --- Cargo.toml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index dd3a454..3c4b504 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,16 +40,17 @@ auto_link_exclude_list = [ [profile.dev.package."*"] opt-level = 3 debug = true -strip = "none" +strip = false debug-assertions = true overflow-checks = true [profile.release] opt-level = 3 debug = "line-tables-only" -strip = "none" +strip = true debug-assertions = true overflow-checks = false +lto = "thin" [dependencies] # small utility thingys -- 2.49.1 From 1ebb5e8824fe8c2f55092e68920970b36cf2ad2e Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 9 Sep 2024 02:52:00 -0400 Subject: [PATCH 09/20] refactor: upgrade packages --- Cargo.lock | 33 +++++++-------------------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f044a50..61dd02f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -217,7 +217,7 @@ checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.1", + "fastrand", "futures-lite", "slab", ] @@ -1002,15 +1002,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.1.1" @@ -1089,7 +1080,7 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.1.1", + "fastrand", "futures-core", "futures-io", "parking", @@ -2159,7 +2150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.1", + "fastrand", "futures-io", ] @@ -2343,15 +2334,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "random-string" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f70fd13c3024ae3f17381bb5c4d409c6dc9ea6895c08fa2147aba305bea3c4af" -dependencies = [ - "fastrand 1.9.0", -] - [[package]] name = "raw-window-handle" version = "0.4.3" @@ -2716,7 +2698,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git#1bc94e67cad6b69fa3c509598b07bc5085cc65a3" +source = "git+https://github.com/StardustXR/core.git?branch=dev#8313d5ce425dfec9f460526d527536b52d58b963" dependencies = [ "cluFlock", "dirs", @@ -2736,7 +2718,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git#1bc94e67cad6b69fa3c509598b07bc5085cc65a3" +source = "git+https://github.com/StardustXR/core.git?branch=dev#8313d5ce425dfec9f460526d527536b52d58b963" dependencies = [ "flatbuffers", "flexbuffers", @@ -2744,12 +2726,11 @@ dependencies = [ "futures-util", "kdl", "manifest-dir-macros", - "random-string", "serde", "serde_repr", "thiserror", "tokio", - "zbus", + "zbus 4.4.0", ] [[package]] @@ -2915,7 +2896,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", - "fastrand 2.1.1", + "fastrand", "once_cell", "rustix", "windows-sys 0.59.0", -- 2.49.1 From 5df9d26ca1bdc095cd8f4b676c4a8e7aabcee034 Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 11 Sep 2024 13:55:15 -0400 Subject: [PATCH 10/20] refactor: alias_id --- Cargo.lock | 4 +- codegen/src/lib.rs | 151 +++++++++++++++++++++++++---------- src/core/idl_utils.rs | 11 --- src/core/mod.rs | 1 - src/core/scenegraph.rs | 20 +++-- src/main.rs | 2 - src/nodes/alias.rs | 28 ++++++- src/nodes/audio.rs | 11 +-- src/nodes/data.rs | 11 +-- src/nodes/drawable/lines.rs | 6 +- src/nodes/drawable/mod.rs | 24 ++++-- src/nodes/drawable/model.rs | 10 +-- src/nodes/drawable/text.rs | 6 +- src/nodes/fields.rs | 97 +++++++++++----------- src/nodes/input/handler.rs | 5 +- src/nodes/input/method.rs | 42 +++++----- src/nodes/input/mod.rs | 16 +++- src/nodes/items/camera.rs | 35 +++++--- src/nodes/items/mod.rs | 14 ++-- src/nodes/items/panel.rs | 38 ++++++--- src/nodes/mod.rs | 129 +++++++++++++++++------------- src/nodes/root.rs | 15 ++-- src/nodes/spatial/mod.rs | 138 ++++++++++++++++---------------- src/nodes/spatial/zone.rs | 6 +- src/objects/input/sk_hand.rs | 1 - src/wayland/mod.rs | 2 - 26 files changed, 467 insertions(+), 356 deletions(-) delete mode 100644 src/core/idl_utils.rs diff --git a/Cargo.lock b/Cargo.lock index 61dd02f..c107d96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2698,7 +2698,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#8313d5ce425dfec9f460526d527536b52d58b963" +source = "git+https://github.com/StardustXR/core.git?branch=dev#22fcdda7937308a067a9f61ecbcffb0907739ecb" dependencies = [ "cluFlock", "dirs", @@ -2718,7 +2718,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#8313d5ce425dfec9f460526d527536b52d58b963" +source = "git+https://github.com/StardustXR/core.git?branch=dev#22fcdda7937308a067a9f61ecbcffb0907739ecb" dependencies = [ "flatbuffers", "flexbuffers", diff --git a/codegen/src/lib.rs b/codegen/src/lib.rs index 5ededbe..ce06650 100644 --- a/codegen/src/lib.rs +++ b/codegen/src/lib.rs @@ -64,11 +64,25 @@ fn codegen_protocol(protocol: &'static str) -> proc_macro::TokenStream { }; let aspect = generate_aspect(&Aspect { name: "interface".to_string(), + id: 0, description: protocol.description.clone(), inherits: vec![], members: p.members, }); - quote!(#node_id #aspect) + quote! { + #node_id + #aspect + pub struct Interface; + impl crate::nodes::Aspect for Interface { + impl_aspect_for_interface_aspect!{} + } + pub fn create_interface(client: &std::sync::Arc) -> color_eyre::eyre::Result<()>{ + let node = crate::nodes::Node::from_id(client,INTERFACE_NODE_ID,false); + node.add_aspect(Interface); + node.add_to_scenegraph()?; + Ok(()) + } + } }) .unwrap_or_default(); let custom_enums = protocol @@ -177,7 +191,7 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { Span::call_site(), ); let client_side_members = client_members - .map(generate_member) + .map(|m| generate_member(aspect.id, m)) .reduce(fold_tokens) .map(|t| { // TODO: properly import all dependencies @@ -190,11 +204,6 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { }) .unwrap_or_default(); - let aspect_trait_name = Ident::new( - &format!("{}Aspect", &aspect.name.to_case(Case::Pascal)), - Span::call_site(), - ); - let opcodes = aspect .members .iter() @@ -219,31 +228,87 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { let alias_info = generate_alias_info(aspect); let server_side_members = server_members - .map(generate_member) + .map(|m| generate_member(aspect.id, m)) .reduce(fold_tokens) .unwrap_or_default(); - let add_node_members = aspect + let aspect_trait_name = Ident::new( + &format!("{}Aspect", &aspect.name.to_case(Case::Pascal)), + Span::call_site(), + ); + let run_signals = aspect .members .iter() .filter(|m| m.side == Side::Server) - .map(generate_handler) + .filter(|m| m._type == MemberType::Signal) + .map(|m| generate_run_member(&aspect_trait_name, MemberType::Signal, m)) + .reduce(fold_tokens) + .unwrap_or_default(); + let run_methods = aspect + .members + .iter() + .filter(|m| m.side == Side::Server) + .filter(|m| m._type == MemberType::Method) + .map(|m| generate_run_member(&aspect_trait_name, MemberType::Method, m)) .reduce(fold_tokens) - .map(|members| { - quote! { - fn add_node_members(node: &crate::nodes::Node) { - #members - } - } - }) .unwrap_or_default(); let server_side_members = quote! { #[doc = #description] pub trait #aspect_trait_name { - #add_node_members #server_side_members } }; - quote!(#opcodes #alias_info #client_side_members #server_side_members) + let aspect_name = aspect.name.to_case(Case::Camel); + let aspect_macro_name = Ident::new( + &format!( + "impl_aspect_for_{}_aspect", + aspect.name.to_case(Case::Snake) + ), + Span::call_site(), + ); + let aspect_id = aspect.id; + let aspect_macro = quote! { + macro_rules! #aspect_macro_name { + () => { + fn name(&self) -> String { + #aspect_name.to_string() + } + fn id(&self) -> u64 { + #aspect_id + } + fn as_any(self: Arc) -> Arc { + self + } + fn run_signal( + &self, + _calling_client: std::sync::Arc, + _node: std::sync::Arc, + _signal: u64, + _message: crate::nodes::Message + ) -> Result<(), stardust_xr::scenegraph::ScenegraphError> { + match _signal { + #run_signals + _ => Err(stardust_xr::scenegraph::ScenegraphError::SignalNotFound) + } + } + fn run_method( + &self, + _calling_client: std::sync::Arc, + _node: std::sync::Arc, + _method: u64, + _message: crate::nodes::Message, + _method_response: crate::nodes::MethodResponseSender, + ) { + match _method { + #run_methods + _ => { + let _ = _method_response.send(Err(stardust_xr::scenegraph::ScenegraphError::MethodNotFound)); + } + } + } + }; + } + }; + quote!(#opcodes #alias_info #client_side_members #server_side_members #aspect_macro) } fn generate_alias_opcodes(aspect: &Aspect, side: Side, _type: MemberType) -> TokenStream { @@ -293,8 +358,8 @@ fn generate_alias_info(aspect: &Aspect) -> TokenStream { } } -fn generate_member(member: &Member) -> TokenStream { - let id = member.opcode; +fn generate_member(aspect_id: u64, member: &Member) -> TokenStream { + let opcode = member.opcode; let name = Ident::new(&member.name.to_case(Case::Snake), Span::call_site()); let description = &member.description; @@ -326,27 +391,21 @@ fn generate_member(member: &Member) -> TokenStream { .unwrap_or_else(|| quote!(())); match (side, _type) { - (Side::Client, MemberType::Method) => { - quote! { - #[doc = #description] - pub async fn #name(#argument_decls) -> color_eyre::eyre::Result<(#return_type, Vec)> { - _node.execute_remote_method_typed(#id, &(#argument_uses), vec![]).await - } - } - } (Side::Client, MemberType::Signal) => { quote! { #[doc = #description] pub fn #name(#argument_decls) -> color_eyre::eyre::Result<()> { let serialized = stardust_xr::schemas::flex::serialize((#argument_uses))?; - _node.send_remote_signal(#id, serialized) + _node.send_remote_signal(#aspect_id, #opcode, serialized) } } } - (Side::Server, MemberType::Method) => { + (Side::Client, MemberType::Method) => { quote! { #[doc = #description] - fn #name(#argument_decls) -> impl std::future::Future> + Send + 'static; + pub async fn #name(#argument_decls) -> color_eyre::eyre::Result<(#return_type, Vec)> { + _node.execute_remote_method_typed(#aspect_id, #opcode, &(#argument_uses), vec![]).await + } } } (Side::Server, MemberType::Signal) => { @@ -355,9 +414,15 @@ fn generate_member(member: &Member) -> TokenStream { fn #name(#argument_decls) -> color_eyre::eyre::Result<()>; } } + (Side::Server, MemberType::Method) => { + quote! { + #[doc = #description] + fn #name(#argument_decls) -> impl std::future::Future> + Send + Sync + 'static; + } + } } } -fn generate_handler(member: &Member) -> TokenStream { +fn generate_run_member(aspect_name: &Ident, _type: MemberType, member: &Member) -> TokenStream { let opcode = member.opcode; let member_name_ident = Ident::new(&member.name, Span::call_site()); @@ -393,21 +458,19 @@ fn generate_handler(member: &Member) -> TokenStream { .map(|a| generate_argument_deserialize(&a.name, &a._type, a.optional)) .reduce(|a, b| quote!(#a, #b)) .unwrap_or_default(); - match member._type { + match _type { MemberType::Signal => quote! { - node.add_local_signal(#opcode, |_node, _calling_client, _message| { + #opcode => (move || { #deserialize - Self::#member_name_ident(_node, _calling_client.clone(), #argument_uses) - }); + ::#member_name_ident(_node, _calling_client.clone(), #argument_uses) + })().map_err(|e: color_eyre::Report| stardust_xr::scenegraph::ScenegraphError::SignalError { error: e.to_string() }), }, MemberType::Method => quote! { - node.add_local_method(#opcode, |_node, _calling_client, _message, _method_response| { - _method_response.wrap_async(async move { - #deserialize - let result = Self::#member_name_ident(_node, _calling_client.clone(), #argument_uses).await?; - Ok((#serialize, Vec::new())) - }); - }); + #opcode => _method_response.wrap_async(async move { + #deserialize + let result = ::#member_name_ident(_node, _calling_client.clone(), #argument_uses).await?; + Ok((#serialize, Vec::::new())) + }), }, } } diff --git a/src/core/idl_utils.rs b/src/core/idl_utils.rs deleted file mode 100644 index e84d53c..0000000 --- a/src/core/idl_utils.rs +++ /dev/null @@ -1,11 +0,0 @@ -#[macro_export] -macro_rules! create_interface { - ($iface:ident) => { - pub fn create_interface(client: &Arc) -> Result<()> { - let node = Node::from_id(client, INTERFACE_NODE_ID, false); - <$iface as self::InterfaceAspect>::add_node_members(&node); - node.add_to_scenegraph()?; - Ok(()) - } - }; -} diff --git a/src/core/mod.rs b/src/core/mod.rs index 93931c2..d2acc81 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -2,7 +2,6 @@ pub mod client; pub mod client_state; pub mod delta; pub mod destroy_queue; -pub mod idl_utils; pub mod registry; pub mod resource; pub mod scenegraph; diff --git a/src/core/scenegraph.rs b/src/core/scenegraph.rs index 55c1d79..efbd103 100644 --- a/src/core/scenegraph.rs +++ b/src/core/scenegraph.rs @@ -86,19 +86,21 @@ fn map_method_return( impl scenegraph::Scenegraph for Scenegraph { fn send_signal( &self, - node: u64, + node_id: u64, + aspect_id: u64, method: u64, data: &[u8], fds: Vec, ) -> Result<(), ScenegraphError> { let Some(client) = self.get_client() else { - return Err(ScenegraphError::SignalNotFound); + return Err(ScenegraphError::NodeNotFound); }; - debug_span!("Handle signal", node, method).in_scope(|| { - self.get_node(node) + debug_span!("Handle signal", aspect_id, node_id, method).in_scope(|| { + self.get_node(node_id) .ok_or(ScenegraphError::NodeNotFound)? .send_local_signal( client, + aspect_id, method, Message { data: data.to_vec(), @@ -109,23 +111,25 @@ impl scenegraph::Scenegraph for Scenegraph { } fn execute_method( &self, - node: u64, + node_id: u64, + aspect_id: u64, method: u64, data: &[u8], fds: Vec, response: oneshot::Sender, Vec), ScenegraphError>>, ) { let Some(client) = self.get_client() else { - let _ = response.send(Err(ScenegraphError::MethodNotFound)); + let _ = response.send(Err(ScenegraphError::NodeNotFound)); return; }; - debug!(node, method, "Handle method"); - let Some(node) = self.get_node(node) else { + debug!(aspect_id, node_id, method, "Handle method"); + let Some(node) = self.get_node(node_id) else { let _ = response.send(Err(ScenegraphError::NodeNotFound)); return; }; node.execute_local_method( client, + aspect_id, method, Message { data: data.to_vec(), diff --git a/src/main.rs b/src/main.rs index 43679c2..30457f2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -262,8 +262,6 @@ fn stereokit_loop( } info!("Cleanly shut down StereoKit"); - #[cfg(feature = "wayland")] - drop(wayland); } fn adaptive_sleep( diff --git a/src/nodes/alias.rs b/src/nodes/alias.rs index 9ba9386..e5c1381 100644 --- a/src/nodes/alias.rs +++ b/src/nodes/alias.rs @@ -69,7 +69,33 @@ impl Alias { } } impl Aspect for Alias { - const NAME: &'static str = "Alias"; + fn name(&self) -> String { + "Alias".to_string() + } + fn id(&self) -> u64 { + 0 + } + fn as_any(self: Arc) -> Arc { + self + } + fn run_signal( + &self, + _calling_client: Arc, + _node: Arc, + _signal: u64, + _message: super::Message, + ) -> Result<(), stardust_xr::scenegraph::ScenegraphError> { + Ok(()) + } + fn run_method( + &self, + _calling_client: Arc, + _node: Arc, + _method: u64, + _message: super::Message, + _response: crate::core::scenegraph::MethodResponseSender, + ) { + } } pub fn get_original(node: Arc, stop_on_disabled: bool) -> Option> { diff --git a/src/nodes/audio.rs b/src/nodes/audio.rs index c0c2a0f..725a9a2 100644 --- a/src/nodes/audio.rs +++ b/src/nodes/audio.rs @@ -3,9 +3,7 @@ use crate::core::client::Client; use crate::core::destroy_queue; use crate::core::registry::Registry; use crate::core::resource::get_resource_file; -use crate::create_interface; -use crate::nodes::spatial::SPATIAL_ASPECT_ALIAS_INFO; -use crate::nodes::spatial::{Spatial, Transform}; +use crate::nodes::spatial::{Spatial, Transform, SPATIAL_ASPECT_ALIAS_INFO}; use color_eyre::eyre::{eyre, Result}; use glam::{vec3, Vec4Swizzles}; use once_cell::sync::OnceCell; @@ -49,7 +47,6 @@ impl Sound { }; let sound_arc = SOUND_REGISTRY.add(sound); node.add_aspect_raw(sound_arc.clone()); - ::add_node_members(node); Ok(sound_arc) } @@ -72,7 +69,7 @@ impl Sound { } } impl Aspect for Sound { - const NAME: &'static str = "Sound"; + impl_aspect_for_sound_aspect! {} } impl SoundAspect for Sound { fn play(node: Arc, _calling_client: Arc) -> Result<()> { @@ -101,9 +98,7 @@ pub fn update() { } } -create_interface!(AudioInterface); -struct AudioInterface; -impl InterfaceAspect for AudioInterface { +impl InterfaceAspect for Interface { #[doc = "Create a sound node. WAV and MP3 are supported."] fn create_sound( _node: Arc, diff --git a/src/nodes/data.rs b/src/nodes/data.rs index 0fb2a6d..2b50ac1 100644 --- a/src/nodes/data.rs +++ b/src/nodes/data.rs @@ -4,7 +4,6 @@ use super::spatial::{parse_transform, Spatial}; use super::{Alias, Aspect, Node}; use crate::core::client::Client; use crate::core::registry::Registry; -use crate::create_interface; use crate::nodes::fields::FIELD_ALIAS_INFO; use crate::nodes::spatial::Transform; use crate::nodes::spatial::SPATIAL_ASPECT_ALIAS_INFO; @@ -71,7 +70,6 @@ impl PulseSender { field_aliases: AliasList::default(), }; - // ::add_node_members(node); let sender = PULSE_SENDER_REGISTRY.add(sender); node.add_aspect_raw(sender.clone()); for receiver in PULSE_RECEIVER_REGISTRY.get_valid_contents() { @@ -134,7 +132,7 @@ impl PulseSender { } } impl Aspect for PulseSender { - const NAME: &'static str = "PulseSender"; + impl_aspect_for_pulse_sender_aspect! {} } impl PulseSenderAspect for PulseSender {} impl Drop for PulseSender { @@ -161,7 +159,6 @@ impl PulseReceiver { }; let receiver = PULSE_RECEIVER_REGISTRY.add(receiver); - ::add_node_members(node); node.add_aspect_raw(receiver.clone()); for sender in PULSE_SENDER_REGISTRY.get_valid_contents() { sender.handle_new_receiver(&receiver); @@ -170,7 +167,7 @@ impl PulseReceiver { } } impl Aspect for PulseReceiver { - const NAME: &'static str = "PulseReceiver"; + impl_aspect_for_pulse_receiver_aspect! {} } impl PulseReceiverAspect for PulseReceiver { fn send_data( @@ -199,9 +196,7 @@ impl Drop for PulseReceiver { } } -create_interface!(DataInterface); -struct DataInterface; -impl InterfaceAspect for DataInterface { +impl InterfaceAspect for Interface { fn create_pulse_sender( _node: Arc, calling_client: Arc, diff --git a/src/nodes/drawable/lines.rs b/src/nodes/drawable/lines.rs index 1266755..7ecf767 100644 --- a/src/nodes/drawable/lines.rs +++ b/src/nodes/drawable/lines.rs @@ -1,7 +1,7 @@ use super::{Line, LinesAspect}; use crate::{ core::{client::Client, registry::Registry}, - nodes::{spatial::Spatial, Aspect, Node}, + nodes::{spatial::Spatial, Node}, }; use color_eyre::eyre::Result; use glam::Vec3; @@ -40,7 +40,6 @@ impl Lines { space: node.get_aspect::()?.clone(), data: Mutex::new(lines), }); - ::add_node_members(node); node.add_aspect_raw(lines.clone()); Ok(lines) @@ -83,9 +82,6 @@ impl Lines { } } } -impl Aspect for Lines { - const NAME: &'static str = "Lines"; -} impl LinesAspect for Lines { fn set_lines(node: Arc, _calling_client: Arc, lines: Vec) -> Result<()> { let lines_aspect = node.get_aspect::()?; diff --git a/src/nodes/drawable/mod.rs b/src/nodes/drawable/mod.rs index 43b2c64..a533a91 100644 --- a/src/nodes/drawable/mod.rs +++ b/src/nodes/drawable/mod.rs @@ -8,14 +8,12 @@ pub mod text; use self::{lines::Lines, model::Model, text::Text}; use super::{ spatial::{Spatial, Transform}, - Node, + Aspect, Node, }; +use crate::core::{client::Client, resource::get_resource_file}; use crate::nodes::spatial::SPATIAL_ASPECT_ALIAS_INFO; -use crate::{ - core::{client::Client, resource::get_resource_file}, - create_interface, -}; use color_eyre::eyre::{self, Result}; +use model::ModelPart; use parking_lot::Mutex; use stardust_xr::values::ResourceID; use std::{ffi::OsStr, path::PathBuf, sync::Arc}; @@ -43,10 +41,20 @@ static QUEUED_SKYLIGHT: Mutex> = Mutex::new(None); static QUEUED_SKYTEX: Mutex> = Mutex::new(None); stardust_xr_server_codegen::codegen_drawable_protocol!(); -create_interface!(DrawableInterface); +impl Aspect for Lines { + impl_aspect_for_lines_aspect! {} +} +impl Aspect for Model { + impl_aspect_for_model_aspect! {} +} +impl Aspect for ModelPart { + impl_aspect_for_model_part_aspect! {} +} +impl Aspect for Text { + impl_aspect_for_text_aspect! {} +} -pub struct DrawableInterface; -impl InterfaceAspect for DrawableInterface { +impl InterfaceAspect for Interface { fn set_sky_tex(_node: Arc, calling_client: Arc, tex: ResourceID) -> Result<()> { let resource_path = get_resource_file(&tex, &calling_client, &[OsStr::new("hdr")]) .ok_or(eyre::eyre!("Could not find resource"))?; diff --git a/src/nodes/drawable/model.rs b/src/nodes/drawable/model.rs index 01c396f..a47a237 100644 --- a/src/nodes/drawable/model.rs +++ b/src/nodes/drawable/model.rs @@ -4,7 +4,7 @@ use crate::core::registry::Registry; use crate::core::resource::get_resource_file; use crate::nodes::alias::{Alias, AliasList}; use crate::nodes::spatial::Spatial; -use crate::nodes::{Aspect, Node}; +use crate::nodes::Node; use color_eyre::eyre::{bail, eyre, Result}; use glam::{Mat4, Vec2, Vec3}; use once_cell::sync::{Lazy, OnceCell}; @@ -204,7 +204,6 @@ impl ModelPart { pending_material_replacement: Mutex::new(None), aliases: AliasList::default(), }); - ::add_node_members(&node); node.add_aspect_raw(model_part.clone()); parts.push(model_part.clone()); Some(model_part) @@ -278,9 +277,6 @@ impl ModelPart { } } } -impl Aspect for ModelPart { - const NAME: &'static str = "ModelPart"; -} impl ModelPartAspect for ModelPart { #[doc = "Set this model part's material to one that cuts a hole in the world. Often used for overlays/passthrough where you want to show the background through an object."] fn apply_holdout_material(node: Arc, _calling_client: Arc) -> Result<()> { @@ -327,7 +323,6 @@ impl Model { sk_model: OnceCell::new(), parts: Mutex::new(Vec::default()), }); - ::add_node_members(node); MODEL_REGISTRY.add_raw(&model); // technically doing this in anything but the main thread isn't a good idea but dangit we need those model nodes ASAP @@ -361,9 +356,6 @@ impl Model { // TODO: proper hread safety in stereokit_rust (probably just bind stereokit directly) unsafe impl Send for Model {} unsafe impl Sync for Model {} -impl Aspect for Model { - const NAME: &'static str = "Model"; -} impl ModelAspect for Model { #[doc = "Bind a model part to the node with the ID input."] fn bind_model_part( diff --git a/src/nodes/drawable/text.rs b/src/nodes/drawable/text.rs index 33a757f..7f5c744 100644 --- a/src/nodes/drawable/text.rs +++ b/src/nodes/drawable/text.rs @@ -1,6 +1,6 @@ use crate::{ core::{client::Client, destroy_queue, registry::Registry, resource::get_resource_file}, - nodes::{spatial::Spatial, Aspect, Node}, + nodes::{spatial::Spatial, Node}, }; use color_eyre::eyre::{eyre, Result}; use glam::{vec3, Mat4, Vec2}; @@ -53,7 +53,6 @@ impl Text { text: Mutex::new(text), data: Mutex::new(style), }); - ::add_node_members(node); node.add_aspect_raw(text.clone()); Ok(text) @@ -132,9 +131,6 @@ impl Text { } } } -impl Aspect for Text { - const NAME: &'static str = "Text"; -} impl TextAspect for Text { fn set_character_height( node: Arc, diff --git a/src/nodes/fields.rs b/src/nodes/fields.rs index aa93c85..990d5d2 100644 --- a/src/nodes/fields.rs +++ b/src/nodes/fields.rs @@ -5,7 +5,6 @@ use super::spatial::{ }; use super::{Aspect, Node}; use crate::core::client::Client; -use crate::create_interface; use crate::nodes::spatial::Transform; use crate::nodes::spatial::SPATIAL_ASPECT_ALIAS_INFO; use crate::nodes::spatial::SPATIAL_REF_ASPECT_ALIAS_INFO; @@ -145,15 +144,59 @@ impl Field { shape: Mutex::new(shape), }; let field = node.add_aspect(field); - ::add_node_members(node); - ::add_node_members(node); + node.add_aspect(FieldRef); Ok(field) } } impl Aspect for Field { - const NAME: &'static str = "Field"; + impl_aspect_for_field_aspect! {} } -impl FieldRefAspect for Field { +impl FieldAspect for Field { + fn set_shape(node: Arc, _calling_client: Arc, shape: Shape) -> Result<()> { + let field = node.get_aspect::()?; + *field.shape.lock() = shape; + Ok(()) + } + + async fn export_field(node: Arc, _calling_client: Arc) -> Result { + let id = rand::random(); + EXPORTED_FIELDS.lock().insert(id, node); + Ok(id) + } +} +impl FieldTrait for Field { + fn spatial_ref(&self) -> &Spatial { + &self.spatial + } + fn local_distance(&self, p: Vec3A) -> f32 { + match self.shape.lock().clone() { + Shape::Box(size) => { + let q = vec3( + p.x.abs() - (size.x * 0.5_f32), + p.y.abs() - (size.y * 0.5_f32), + p.z.abs() - (size.z * 0.5_f32), + ); + let v = vec3a(q.x.max(0_f32), q.y.max(0_f32), q.z.max(0_f32)); + v.length() + q.x.max(q.y.max(q.z)).min(0_f32) + } + Shape::Cylinder(CylinderShape { length, radius }) => { + let d = vec2(p.xy().length().abs() - radius, p.z.abs() - (length * 0.5)); + d.x.max(d.y).min(0.0) + d.max(vec2(0.0, 0.0)).length() + } + Shape::Sphere(radius) => p.length() - radius, + Shape::Torus(TorusShape { radius_a, radius_b }) => { + let q = vec2(p.xz().length() - radius_a, p.y); + q.length() - radius_b + } + } + } +} + +pub struct FieldRef; +impl Aspect for FieldRef { + impl_aspect_for_field_ref_aspect! {} +} +impl FieldRefAspect for FieldRef { async fn distance( node: Arc, _calling_client: Arc, @@ -205,50 +248,8 @@ impl FieldRefAspect for Field { })) } } -impl FieldAspect for Field { - fn set_shape(node: Arc, _calling_client: Arc, shape: Shape) -> Result<()> { - let field = node.get_aspect::()?; - *field.shape.lock() = shape; - Ok(()) - } - async fn export_field(node: Arc, _calling_client: Arc) -> Result { - let id = rand::random(); - EXPORTED_FIELDS.lock().insert(id, node); - Ok(id) - } -} -impl FieldTrait for Field { - fn spatial_ref(&self) -> &Spatial { - &self.spatial - } - fn local_distance(&self, p: Vec3A) -> f32 { - match self.shape.lock().clone() { - Shape::Box(size) => { - let q = vec3( - p.x.abs() - (size.x * 0.5_f32), - p.y.abs() - (size.y * 0.5_f32), - p.z.abs() - (size.z * 0.5_f32), - ); - let v = vec3a(q.x.max(0_f32), q.y.max(0_f32), q.z.max(0_f32)); - v.length() + q.x.max(q.y.max(q.z)).min(0_f32) - } - Shape::Cylinder(CylinderShape { length, radius }) => { - let d = vec2(p.xy().length().abs() - radius, p.z.abs() - (length * 0.5)); - d.x.max(d.y).min(0.0) + d.max(vec2(0.0, 0.0)).length() - } - Shape::Sphere(radius) => p.length() - radius, - Shape::Torus(TorusShape { radius_a, radius_b }) => { - let q = vec2(p.xz().length() - radius_a, p.y); - q.length() - radius_b - } - } - } -} - -create_interface!(FieldInterface); -pub struct FieldInterface; -impl InterfaceAspect for FieldInterface { +impl InterfaceAspect for Interface { async fn import_field_ref( _node: Arc, calling_client: Arc, diff --git a/src/nodes/input/handler.rs b/src/nodes/input/handler.rs index 59e7fef..6bcd2c7 100644 --- a/src/nodes/input/handler.rs +++ b/src/nodes/input/handler.rs @@ -1,5 +1,5 @@ use super::{InputHandlerAspect, INPUT_HANDLER_REGISTRY, INPUT_METHOD_REGISTRY}; -use crate::nodes::{alias::AliasList, fields::Field, spatial::Spatial, Aspect, Node}; +use crate::nodes::{alias::AliasList, fields::Field, spatial::Spatial, Node}; use color_eyre::eyre::Result; use std::sync::Arc; @@ -23,9 +23,6 @@ impl InputHandler { Ok(()) } } -impl Aspect for InputHandler { - const NAME: &'static str = "InputHandler"; -} impl InputHandlerAspect for InputHandler {} impl PartialEq for InputHandler { fn eq(&self, other: &Self) -> bool { diff --git a/src/nodes/input/method.rs b/src/nodes/input/method.rs index d235050..392bb66 100644 --- a/src/nodes/input/method.rs +++ b/src/nodes/input/method.rs @@ -9,7 +9,7 @@ use crate::{ alias::{Alias, AliasList}, fields::{Field, FIELD_ALIAS_INFO}, spatial::Spatial, - Aspect, Node, + Node, }, }; use color_eyre::eyre::Result; @@ -45,13 +45,12 @@ impl InputMethod { internal_capture_requests: Registry::new(), captures: Registry::new(), }; - ::add_node_members(node); - ::add_node_members(node); for handler in INPUT_HANDLER_REGISTRY.get_valid_contents() { method.handle_new_handler(&handler); } let method = INPUT_METHOD_REGISTRY.add(method); node.add_aspect_raw(method.clone()); + node.add_aspect(InputMethodRef); Ok(method) } @@ -154,25 +153,6 @@ impl InputMethod { } } } -impl Aspect for InputMethod { - const NAME: &'static str = "InputMethod"; -} -impl InputMethodRefAspect for InputMethod { - #[doc = "Have the input handler that this method reference came from capture the method for the next frame."] - fn request_capture( - node: Arc, - _calling_client: Arc, - handler: Arc, - ) -> Result<()> { - let input_method = node.get_aspect::()?; - let input_handler = handler.get_aspect::()?; - - input_method - .internal_capture_requests - .add_raw(&input_handler); - Ok(()) - } -} impl InputMethodAspect for InputMethod { #[doc = "Set the spatial input component of this input method. You must keep the same input data type throughout the entire thing."] fn set_input( @@ -231,3 +211,21 @@ impl Drop for InputMethod { INPUT_METHOD_REGISTRY.remove(self); } } + +pub struct InputMethodRef; +impl InputMethodRefAspect for InputMethodRef { + #[doc = "Have the input handler that this method reference came from capture the method for the next frame."] + fn request_capture( + node: Arc, + _calling_client: Arc, + handler: Arc, + ) -> Result<()> { + let input_method = node.get_aspect::()?; + let input_handler = handler.get_aspect::()?; + + input_method + .internal_capture_requests + .add_raw(&input_handler); + Ok(()) + } +} diff --git a/src/nodes/input/mod.rs b/src/nodes/input/mod.rs index 45e2955..eaa08bb 100644 --- a/src/nodes/input/mod.rs +++ b/src/nodes/input/mod.rs @@ -11,7 +11,7 @@ pub use method::*; use super::fields::Field; use super::spatial::Spatial; -use crate::create_interface; +use super::Aspect; use crate::nodes::spatial::SPATIAL_ASPECT_ALIAS_INFO; use crate::nodes::spatial::SPATIAL_REF_ASPECT_ALIAS_INFO; use crate::{core::client::Client, nodes::Node}; @@ -25,6 +25,16 @@ pub static INPUT_HANDLER_REGISTRY: Registry = Registry::new(); stardust_xr_server_codegen::codegen_input_protocol!(); +impl Aspect for InputHandler { + impl_aspect_for_input_handler_aspect! {} +} +impl Aspect for InputMethod { + impl_aspect_for_input_method_aspect! {} +} +impl Aspect for InputMethodRef { + impl_aspect_for_input_method_ref_aspect! {} +} + pub trait InputDataTrait { fn transform(&mut self, method: &InputMethod, handler: &InputHandler); fn distance(&self, space: &Arc, field: &Field) -> f32; @@ -47,9 +57,7 @@ impl InputDataTrait for InputDataType { } } -create_interface!(InputInterface); -pub struct InputInterface; -impl InterfaceAspect for InputInterface { +impl InterfaceAspect for Interface { #[doc = "Create an input method node"] fn create_input_method( _node: Arc, diff --git a/src/nodes/items/camera.rs b/src/nodes/items/camera.rs index 55d65db..93fcfa9 100644 --- a/src/nodes/items/camera.rs +++ b/src/nodes/items/camera.rs @@ -1,11 +1,9 @@ -use super::{ - create_item_acceptor_flex, register_item_ui_flex, Item, ItemAcceptor, ItemInterface, ItemType, -}; +use super::{create_item_acceptor_flex, register_item_ui_flex, Item, ItemType}; use crate::nodes::items::ITEM_ACCEPTOR_ASPECT_ALIAS_INFO; use crate::nodes::items::ITEM_ASPECT_ALIAS_INFO; +use crate::nodes::Aspect; use crate::{ core::{client::Client, registry::Registry, scenegraph::MethodResponseSender}, - create_interface, nodes::{ drawable::{ model::{MaterialWrapper, ModelPart}, @@ -48,6 +46,12 @@ lazy_static! { ui: Default::default(), items: Registry::new(), acceptors: Registry::new(), + add_acceptor_aspect: |node| { + node.add_aspect(CameraItemAcceptor); + }, + add_ui_aspect: |node| { + node.add_aspect(CameraItemUi); + }, new_acceptor_fn: |node, acceptor, acceptor_field| { let _ = camera_item_ui_client::create_acceptor(node, acceptor, acceptor_field); } @@ -85,7 +89,7 @@ impl CameraItem { apply_to: Registry::new(), }), ); - // ::node_methods(node); + node.add_aspect(CameraItemUi); } fn frame_flex( @@ -169,7 +173,17 @@ impl CameraItem { } impl CameraItemAspect for CameraItem {} -impl CameraItemAcceptorAspect for ItemAcceptor { +pub struct CameraItemUi; +impl Aspect for CameraItemUi { + impl_aspect_for_camera_item_ui_aspect! {} +} +impl CameraItemUiAspect for CameraItemUi {} + +pub struct CameraItemAcceptor; +impl Aspect for CameraItemAcceptor { + impl_aspect_for_camera_item_acceptor_aspect! {} +} +impl CameraItemAcceptorAspect for CameraItemAcceptor { fn capture_item(node: Arc, _calling_client: Arc, item: Arc) -> Result<()> { super::acceptor_capture_item_flex(node, item) } @@ -184,8 +198,7 @@ pub fn update(token: &MainThreadToken) { } } -create_interface!(ItemInterface); -impl InterfaceAspect for ItemInterface { +impl InterfaceAspect for Interface { #[doc = "Create a camera item at a specific location"] fn create_camera_item( _node: Arc, @@ -206,19 +219,21 @@ impl InterfaceAspect for ItemInterface { } #[doc = "Register this client to manage camera items and create default 3D UI for them."] - fn register_camera_item_ui(_node: Arc, calling_client: Arc) -> Result<()> { + fn register_camera_item_ui(node: Arc, calling_client: Arc) -> Result<()> { + node.add_aspect(CameraItemUi); register_item_ui_flex(calling_client, &ITEM_TYPE_INFO_CAMERA) } #[doc = "Create an item acceptor to allow temporary ownership of a given type of item. Creates a node at `/item/camera/acceptor/`."] fn create_camera_item_acceptor( - _node: Arc, + node: Arc, calling_client: Arc, id: u64, parent: Arc, transform: Transform, field: Arc, ) -> Result<()> { + node.add_aspect(CameraItemAcceptor); create_item_acceptor_flex( calling_client, id, diff --git a/src/nodes/items/mod.rs b/src/nodes/items/mod.rs index e32fda8..f6c81cf 100644 --- a/src/nodes/items/mod.rs +++ b/src/nodes/items/mod.rs @@ -47,6 +47,8 @@ pub struct TypeInfo { pub ui: Mutex>, pub items: Registry, pub acceptors: Registry, + pub add_ui_aspect: fn(node: &Node), + pub add_acceptor_aspect: fn(node: &Node), pub new_acceptor_fn: fn(node: &Node, acceptor: &Arc, acceptor_field: &Arc), } impl Hash for TypeInfo { @@ -81,7 +83,6 @@ impl Item { }; let item = type_info.items.add(item); - ::add_node_members(node); if let Some(ui) = type_info.ui.lock().upgrade() { ui.handle_create_item(&item); } @@ -109,7 +110,7 @@ impl Item { } } impl Aspect for Item { - const NAME: &'static str = "Item"; + impl_aspect_for_item_aspect! {} } impl ItemAspect for Item { fn release(node: Arc, _calling_client: Arc) -> Result<()> { @@ -285,7 +286,7 @@ impl ItemUI { } } impl Aspect for ItemUI { - const NAME: &'static str = "Item"; + impl_aspect_for_item_ui_aspect! {} } impl Drop for ItemUI { fn drop(&mut self) { @@ -343,7 +344,7 @@ impl ItemAcceptor { } } impl Aspect for ItemAcceptor { - const NAME: &'static str = "ItemAcceptor"; + impl_aspect_for_item_acceptor_aspect! {} } impl ItemAcceptorAspect for ItemAcceptor {} impl Drop for ItemAcceptor { @@ -364,6 +365,7 @@ pub fn register_item_ui_flex( ) -> Result<()> { let ui = Node::from_id(&calling_client, type_info.ui_node_id, true).add_to_scenegraph()?; ItemUI::add_to(&ui, type_info)?; + (type_info.add_ui_aspect)(&ui); Ok(()) } fn create_item_acceptor_flex( @@ -381,6 +383,7 @@ fn create_item_acceptor_flex( let node = Node::from_id(&calling_client, id, true).add_to_scenegraph()?; Spatial::add_to(&node, Some(space.clone()), transform, false); ItemAcceptor::add_to(&node, type_info, field); + (type_info.add_acceptor_aspect)(&node); Ok(()) } @@ -391,6 +394,3 @@ fn acceptor_capture_item_flex(node: Arc, item: Arc) -> Result<()> { Ok(()) } - -struct ItemInterface; -// create_interface!(ItemInterface); diff --git a/src/nodes/items/panel.rs b/src/nodes/items/panel.rs index 32827c0..d7e8642 100644 --- a/src/nodes/items/panel.rs +++ b/src/nodes/items/panel.rs @@ -1,12 +1,13 @@ -use super::{create_item_acceptor_flex, register_item_ui_flex, ItemAcceptor, ItemInterface}; +use super::camera::CameraItemAcceptor; +use super::{create_item_acceptor_flex, register_item_ui_flex}; use crate::nodes::items::ITEM_ACCEPTOR_ASPECT_ALIAS_INFO; use crate::nodes::items::ITEM_ASPECT_ALIAS_INFO; +use crate::nodes::Aspect; use crate::{ core::{ client::{get_env, state, Client, INTERNAL_CLIENT}, registry::Registry, }, - create_interface, nodes::{ drawable::model::ModelPart, items::{Item, ItemType, TypeInfo}, @@ -39,6 +40,12 @@ lazy_static! { ui: Default::default(), items: Registry::new(), acceptors: Registry::new(), + add_acceptor_aspect: |node| { + node.add_aspect(PanelItemUi); + }, + add_ui_aspect: |node| { + node.add_aspect(PanelItemAcceptor); + }, new_acceptor_fn: |node, acceptor, acceptor_field| { let _ = panel_item_ui_client::create_acceptor(node, acceptor, acceptor_field); } @@ -115,7 +122,6 @@ impl PanelItem { &ITEM_TYPE_INFO_PANEL, ItemType::Panel(generic_panel_item), ); - ::add_node_members(&node); (node, panel_item) } @@ -198,8 +204,9 @@ impl PanelItem { } } -// make these stupid vectors u32 in the protocol somehow!!!!!!!1 - +impl Aspect for PanelItem { + impl_aspect_for_panel_item_aspect! {} +} #[allow(unused)] impl PanelItemAspect for PanelItem { #[doc = "Apply the cursor as a material to a model."] @@ -405,7 +412,17 @@ impl PanelItemAspect for PanelItem { } } -impl PanelItemAcceptorAspect for ItemAcceptor { +pub struct PanelItemUi; +impl Aspect for PanelItemUi { + impl_aspect_for_panel_item_ui_aspect! {} +} +impl PanelItemUiAspect for PanelItemUi {} + +pub struct PanelItemAcceptor; +impl Aspect for PanelItemAcceptor { + impl_aspect_for_panel_item_acceptor_aspect! {} +} +impl PanelItemAcceptorAspect for PanelItemAcceptor { fn capture_item(node: Arc, _calling_client: Arc, item: Arc) -> Result<()> { super::acceptor_capture_item_flex(node, item) } @@ -435,22 +452,23 @@ impl Drop for PanelItem { } } -create_interface!(ItemInterface); -impl InterfaceAspect for ItemInterface { +impl InterfaceAspect for Interface { #[doc = "Register this client to manage the items of a certain type and create default 3D UI for them."] - fn register_panel_item_ui(_node: Arc, calling_client: Arc) -> Result<()> { + fn register_panel_item_ui(node: Arc, calling_client: Arc) -> Result<()> { + node.add_aspect(CameraItemAcceptor); register_item_ui_flex(calling_client, &ITEM_TYPE_INFO_PANEL) } #[doc = "Create an item acceptor to allow temporary ownership of a given type of item. Creates a node at `/item//acceptor/`."] fn create_panel_item_acceptor( - _node: Arc, + node: Arc, calling_client: Arc, id: u64, parent: Arc, transform: Transform, field: Arc, ) -> Result<()> { + node.add_aspect(PanelItemAcceptor); create_item_acceptor_flex( calling_client, id, diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index 1af5a76..f6edc30 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -21,7 +21,7 @@ use spatial::Spatial; use stardust_xr::messenger::MessageSenderHandle; use stardust_xr::scenegraph::ScenegraphError; use stardust_xr::schemas::flex::{deserialize, serialize}; -use std::any::{Any, TypeId}; +use std::any::Any; use std::fmt::Debug; use std::os::fd::OwnedFd; use std::sync::{Arc, Weak}; @@ -46,11 +46,26 @@ impl AsRef<[u8]> for Message { } } -pub type Signal = fn(Arc, Arc, Message) -> Result<()>; -pub type Method = fn(Arc, Arc, Message, MethodResponseSender); - stardust_xr_server_codegen::codegen_node_protocol!(); +pub struct Owned; +impl Aspect for Owned { + impl_aspect_for_owned_aspect! {} +} +impl OwnedAspect for Owned { + fn set_enabled(node: Arc, _calling_client: Arc, enabled: bool) -> Result<()> { + node.set_enabled(enabled); + Ok(()) + } + + fn destroy(node: Arc, _calling_client: Arc) -> Result<()> { + if node.destroyable { + node.destroy(); + } + Ok(()) + } +} + pub struct OwnedNode(pub Arc); impl Drop for OwnedNode { fn drop(&mut self) { @@ -64,8 +79,6 @@ pub struct Node { client: Weak, message_sender_handle: Option, - local_signals: Mutex>, - local_methods: Mutex>, aliases: Registry, aspects: Aspects, destroyable: bool, @@ -87,13 +100,11 @@ impl Node { client: Arc::downgrade(client), message_sender_handle: client.message_sender_handle.clone(), id, - local_signals: Default::default(), - local_methods: Default::default(), aliases: Default::default(), aspects: Default::default(), destroyable, }; - ::add_node_members(&node); + node.aspects.add(Owned); node } pub fn add_to_scenegraph(self) -> Result> { @@ -146,13 +157,6 @@ impl Node { // Ok(serialize(pid)?.into()) // } - pub fn add_local_signal(&self, id: u64, signal: Signal) { - self.local_signals.lock().insert(id, signal); - } - pub fn add_local_method(&self, id: u64, method: Method) { - self.local_methods.lock().insert(id, method); - } - pub fn add_aspect(&self, aspect: A) -> Arc { self.aspects.add(aspect) } @@ -166,6 +170,7 @@ impl Node { pub fn send_local_signal( self: Arc, calling_client: Arc, + aspect_id: u64, method: u64, message: Message, ) -> Result<(), ScenegraphError> { @@ -177,22 +182,26 @@ impl Node { .original .upgrade() .ok_or(ScenegraphError::BrokenAlias)? - .send_local_signal(calling_client, method, message) + .send_local_signal(calling_client, aspect_id, method, message) } else { - let signal = self - .local_signals + let aspect = self + .aspects + .0 .lock() - .get(&method) - .cloned() - .ok_or(ScenegraphError::SignalNotFound)?; - signal(self, calling_client, message).map_err(|error| ScenegraphError::SignalError { - error: error.to_string(), - }) + .get(&aspect_id) + .ok_or(ScenegraphError::AspectNotFound)? + .clone(); + aspect + .run_signal(calling_client, self.clone(), method, message) + .map_err(|error| ScenegraphError::SignalError { + error: error.to_string(), + }) } } pub fn execute_local_method( self: Arc, calling_client: Arc, + aspect_id: u64, method: u64, message: Message, response: MethodResponseSender, @@ -208,6 +217,7 @@ impl Node { }; alias.execute_local_method( calling_client, + aspect_id, method, Message { data: message.data.clone(), @@ -216,14 +226,19 @@ impl Node { response, ) } else { - let Some(method) = self.local_methods.lock().get(&method).cloned() else { - response.send(Err(ScenegraphError::MethodNotFound)); + let Some(aspect) = self.aspects.0.lock().get(&aspect_id).cloned() else { + response.send(Err(ScenegraphError::AspectNotFound)); return; }; - method(self, calling_client, message, response); + aspect.run_method(calling_client, self.clone(), method, message, response); } } - pub fn send_remote_signal(&self, method: u64, message: impl Into) -> Result<()> { + pub fn send_remote_signal( + &self, + aspect_id: u64, + method: u64, + message: impl Into, + ) -> Result<()> { let message = message.into(); self.aliases .get_valid_contents() @@ -233,6 +248,7 @@ impl Node { .for_each(|node| { // Beware! file descriptors will not be sent to aliases!!! let _ = node.send_remote_signal( + aspect_id, method, Message { data: message.data.clone(), @@ -241,12 +257,13 @@ impl Node { ); }); if let Some(handle) = self.message_sender_handle.as_ref() { - handle.signal(self.id, method, &message.data, message.fds)?; + handle.signal(self.id, aspect_id, method, &message.data, message.fds)?; } Ok(()) } pub async fn execute_remote_method_typed( &self, + aspect_id: u64, method: u64, input: S, fds: Vec, @@ -258,7 +275,7 @@ impl Node { let serialized = serialize(input)?; let result = message_sender_handle - .method(self.id, method, &serialized, fds)? + .method(self.id, aspect_id, method, &serialized, fds)? .await .map_err(|e| eyre!(e))?; @@ -271,25 +288,10 @@ impl Debug for Node { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("Node") .field("id", &self.id) - .field("local_signals", &self.local_signals.lock().keys()) - .field("local_methods", &self.local_methods.lock().keys()) .field("destroyable", &self.destroyable) .finish() } } -impl OwnedAspect for Node { - fn set_enabled(node: Arc, _calling_client: Arc, enabled: bool) -> Result<()> { - node.set_enabled(enabled); - Ok(()) - } - - fn destroy(node: Arc, _calling_client: Arc) -> Result<()> { - if node.destroyable { - node.destroy(); - } - Ok(()) - } -} impl Drop for Node { fn drop(&mut self) { // Debug breakpoint @@ -297,12 +299,28 @@ impl Drop for Node { } pub trait Aspect: Any + Send + Sync + 'static { - const NAME: &'static str; + fn name(&self) -> String; + fn id(&self) -> u64; + fn as_any(self: Arc) -> Arc; + fn run_signal( + &self, + calling_client: Arc, + node: Arc, + signal: u64, + message: Message, + ) -> Result<(), stardust_xr::scenegraph::ScenegraphError>; + fn run_method( + &self, + calling_client: Arc, + node: Arc, + method: u64, + message: Message, + response: MethodResponseSender, + ); } #[derive(Default)] -struct Aspects(Mutex>>); - +struct Aspects(Mutex>>); impl Aspects { fn add(&self, t: A) -> Arc { let aspect = Arc::new(t); @@ -310,18 +328,15 @@ impl Aspects { aspect } fn add_raw(&self, aspect: Arc) { - self.0.lock().insert(Self::type_key::(), aspect); + let id = aspect.id(); + self.0.lock().insert(id, aspect); } fn get(&self) -> Result> { self.0 .lock() - .get(&Self::type_key::()) - .and_then(|a| Arc::downcast(a.clone()).ok()) - .ok_or(eyre!("Couldn't get aspect {}", A::NAME.to_lowercase())) - } - - fn type_key() -> TypeId { - TypeId::of::() + .values() + .find_map(|a| Arc::downcast(a.clone().as_any()).ok()) + .ok_or(eyre!("Couldn't get aspect")) } } impl Drop for Aspects { diff --git a/src/nodes/root.rs b/src/nodes/root.rs index 558ee32..c221fed 100644 --- a/src/nodes/root.rs +++ b/src/nodes/root.rs @@ -1,5 +1,5 @@ use super::spatial::Spatial; -use super::Node; +use super::{Aspect, Node}; use crate::core::client::Client; use crate::core::client_state::ClientStateParsed; use crate::core::registry::Registry; @@ -23,14 +23,14 @@ pub struct Root { impl Root { pub fn create(client: &Arc, transform: Mat4) -> Result> { let node = Node::from_id(client, 0, false); - ::add_node_members(&node); let node = node.add_to_scenegraph()?; let _ = Spatial::add_to(&node, None, transform, false); - - Ok(ROOT_REGISTRY.add(Root { - node, + let root_aspect = node.add_aspect(Root { + node: node.clone(), connect_instant: Instant::now(), - })) + }); + ROOT_REGISTRY.add_raw(&root_aspect); + Ok(root_aspect) } pub fn send_frame_events(delta: f64) { @@ -54,6 +54,9 @@ impl Root { Ok(root_client::save_state(&self.node).await?.0) } } +impl Aspect for Root { + impl_aspect_for_root_aspect! {} +} impl RootAspect for Root { async fn get_state(_node: Arc, calling_client: Arc) -> Result { let Some(state) = calling_client.state.get() else { diff --git a/src/nodes/spatial/mod.rs b/src/nodes/spatial/mod.rs index b7069b8..b579e8a 100644 --- a/src/nodes/spatial/mod.rs +++ b/src/nodes/spatial/mod.rs @@ -6,7 +6,6 @@ use super::fields::{Field, FieldTrait}; use super::Aspect; use crate::core::client::Client; use crate::core::registry::Registry; -use crate::create_interface; use crate::nodes::{Node, OWNED_ASPECT_ALIAS_INFO}; use color_eyre::eyre::{eyre, OptionExt, Result}; use glam::{vec3a, Mat4, Quat, Vec3}; @@ -38,6 +37,9 @@ impl Transform { Mat4::from_scale_rotation_translation(scale.into(), rotation.into(), position.into()) } } +impl Aspect for Zone { + impl_aspect_for_zone_aspect! {} +} lazy_static::lazy_static! { pub static ref EXPORTED_SPATIALS: Mutex>> = Mutex::new(FxHashMap::default()); @@ -74,16 +76,14 @@ impl Spatial { zoneable: bool, ) -> Arc { let spatial = Spatial::new(Arc::downgrade(node), parent.clone(), transform); - ::add_node_members(node); if zoneable { ZONEABLE_REGISTRY.add_raw(&spatial); } if let Some(parent) = parent { parent.children.add_raw(&spatial); } - ::add_node_members(node); - ::add_node_members(node); node.add_aspect_raw(spatial.clone()); + node.add_aspect(SpatialRef); spatial } @@ -242,66 +242,7 @@ impl Spatial { } } impl Aspect for Spatial { - const NAME: &'static str = "Spatial"; -} -impl SpatialRefAspect for Spatial { - async fn get_local_bounding_box( - node: Arc, - _calling_client: Arc, - ) -> Result { - let this_spatial = node.get_aspect::()?; - let bounds = this_spatial.get_bounding_box(); - - Ok(BoundingBox { - center: Vec3::from(bounds.center).into(), - size: Vec3::from(bounds.dimensions).into(), - }) - } - - async fn get_relative_bounding_box( - node: Arc, - _calling_client: Arc, - relative_to: Arc, - ) -> Result { - let this_spatial = node.get_aspect::()?; - let relative_spatial = relative_to.get_aspect::()?; - let center = Spatial::space_to_space_matrix(Some(&this_spatial), Some(&relative_spatial)) - .transform_point3([0.0; 3].into()); - let mut bounds = Bounds { - center: center.into(), - dimensions: [0.0; 3].into(), - }; - bounds.grown_box( - this_spatial.get_bounding_box(), - Spatial::space_to_space_matrix(Some(&this_spatial), Some(&relative_spatial)), - ); - - Ok(BoundingBox { - center: Vec3::from(bounds.center).into(), - size: Vec3::from(bounds.dimensions).into(), - }) - } - - async fn get_transform( - node: Arc, - _calling_client: Arc, - relative_to: Arc, - ) -> Result { - let this_spatial = node.get_aspect::()?; - let relative_spatial = relative_to.get_aspect::()?; - - let (scale, rotation, position) = Spatial::space_to_space_matrix( - Some(this_spatial.as_ref()), - Some(relative_spatial.as_ref()), - ) - .to_scale_rotation_translation(); - - Ok(Transform { - translation: Some(position.into()), - rotation: Some(rotation.into()), - scale: Some(scale.into()), - }) - } + impl_aspect_for_spatial_aspect! {} } impl SpatialAspect for Spatial { fn set_local_transform( @@ -389,6 +330,70 @@ impl Drop for Spatial { } } +pub struct SpatialRef; +impl Aspect for SpatialRef { + impl_aspect_for_spatial_ref_aspect! {} +} +impl SpatialRefAspect for SpatialRef { + async fn get_local_bounding_box( + node: Arc, + _calling_client: Arc, + ) -> Result { + let this_spatial = node.get_aspect::()?; + let bounds = this_spatial.get_bounding_box(); + + Ok(BoundingBox { + center: Vec3::from(bounds.center).into(), + size: Vec3::from(bounds.dimensions).into(), + }) + } + + async fn get_relative_bounding_box( + node: Arc, + _calling_client: Arc, + relative_to: Arc, + ) -> Result { + let this_spatial = node.get_aspect::()?; + let relative_spatial = relative_to.get_aspect::()?; + let center = Spatial::space_to_space_matrix(Some(&this_spatial), Some(&relative_spatial)) + .transform_point3([0.0; 3].into()); + let mut bounds = Bounds { + center: center.into(), + dimensions: [0.0; 3].into(), + }; + bounds.grown_box( + this_spatial.get_bounding_box(), + Spatial::space_to_space_matrix(Some(&this_spatial), Some(&relative_spatial)), + ); + + Ok(BoundingBox { + center: Vec3::from(bounds.center).into(), + size: Vec3::from(bounds.dimensions).into(), + }) + } + + async fn get_transform( + node: Arc, + _calling_client: Arc, + relative_to: Arc, + ) -> Result { + let this_spatial = node.get_aspect::()?; + let relative_spatial = relative_to.get_aspect::()?; + + let (scale, rotation, position) = Spatial::space_to_space_matrix( + Some(this_spatial.as_ref()), + Some(relative_spatial.as_ref()), + ) + .to_scale_rotation_translation(); + + Ok(Transform { + translation: Some(position.into()), + rotation: Some(rotation.into()), + scale: Some(scale.into()), + }) + } +} + pub fn parse_transform(transform: Transform, position: bool, rotation: bool, scale: bool) -> Mat4 { let position = position .then_some(transform.translation) @@ -406,8 +411,7 @@ pub fn parse_transform(transform: Transform, position: bool, rotation: bool, sca Mat4::from_scale_rotation_translation(scale.into(), rotation.into(), position.into()) } -pub struct SpatialInterface; -impl InterfaceAspect for SpatialInterface { +impl InterfaceAspect for Interface { fn create_spatial( _node: Arc, calling_client: Arc, @@ -460,5 +464,3 @@ impl InterfaceAspect for SpatialInterface { .ok_or_eyre("Couldn't find spatial with that ID") } } - -create_interface!(SpatialInterface); diff --git a/src/nodes/spatial/zone.rs b/src/nodes/spatial/zone.rs index b4703f4..420f33c 100644 --- a/src/nodes/spatial/zone.rs +++ b/src/nodes/spatial/zone.rs @@ -7,7 +7,7 @@ use crate::{ nodes::{ alias::{get_original, Alias, AliasList}, fields::{Field, FieldTrait}, - Aspect, Node, + Node, }, }; use color_eyre::eyre::Result; @@ -73,7 +73,6 @@ impl Zone { intersecting: AliasList::default(), captured: AliasList::default(), }); - ::add_node_members(node); node.add_aspect_raw(zone.clone()); zone } @@ -124,9 +123,6 @@ impl Zone { Ok(()) } } -impl Aspect for Zone { - const NAME: &'static str = "Zone"; -} impl ZoneAspect for Zone { fn update(node: Arc, _calling_client: Arc) -> Result<()> { let zone = node.get_aspect::()?; diff --git a/src/objects/input/sk_hand.rs b/src/objects/input/sk_hand.rs index 06b1bde..730bd86 100644 --- a/src/objects/input/sk_hand.rs +++ b/src/objects/input/sk_hand.rs @@ -12,7 +12,6 @@ use color_eyre::eyre::Result; use glam::{Mat4, Quat, Vec3}; use serde::{Deserialize, Serialize}; use stardust_xr::values::Datamap; -use std::f32::INFINITY; use std::sync::Arc; use stereokit_rust::sk::{DisplayMode, MainThreadToken, Sk}; use stereokit_rust::system::{HandJoint, HandSource, Handed, Input, LinePoint, Lines}; diff --git a/src/wayland/mod.rs b/src/wayland/mod.rs index f129787..356e797 100644 --- a/src/wayland/mod.rs +++ b/src/wayland/mod.rs @@ -93,7 +93,6 @@ impl Drop for UnownedFd { pub struct Wayland { display: Arc, - pub socket_name: Option, join_handle: JoinHandle>, renderer: GlesRenderer, output: Output, @@ -133,7 +132,6 @@ impl Wayland { Ok(Wayland { display, - socket_name, join_handle, renderer, output, -- 2.49.1 From 74731bf4a3ea2dec78bb759165bf1099bb6a5aac Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 11 Sep 2024 14:26:09 -0400 Subject: [PATCH 11/20] fix(items): add the proper aspects --- src/nodes/items/camera.rs | 30 +++++++++++++++--------------- src/nodes/items/mod.rs | 2 +- src/nodes/items/panel.rs | 1 + 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/nodes/items/camera.rs b/src/nodes/items/camera.rs index 93fcfa9..08b161d 100644 --- a/src/nodes/items/camera.rs +++ b/src/nodes/items/camera.rs @@ -74,22 +74,19 @@ pub struct CameraItem { #[allow(unused)] impl CameraItem { pub fn add_to(node: &Arc, proj_matrix: Mat4, px_size: Vector2) { - Item::add_to( - node, - &ITEM_TYPE_INFO_CAMERA, - ItemType::Camera(CameraItem { - space: node.get_aspect::().unwrap().clone(), - frame_info: Mutex::new(FrameInfo { - proj_matrix, - px_size, - }), - sk_tex: OnceCell::new(), - sk_mat: OnceCell::new(), - applied_to: Registry::new(), - apply_to: Registry::new(), + let item = Arc::new(CameraItem { + space: node.get_aspect::().unwrap().clone(), + frame_info: Mutex::new(FrameInfo { + proj_matrix, + px_size, }), - ); - node.add_aspect(CameraItemUi); + sk_tex: OnceCell::new(), + sk_mat: OnceCell::new(), + applied_to: Registry::new(), + apply_to: Registry::new(), + }); + Item::add_to(node, &ITEM_TYPE_INFO_CAMERA, ItemType::Camera(item.clone())); + node.add_aspect_raw(item); } fn frame_flex( @@ -171,6 +168,9 @@ impl CameraItem { } } } +impl Aspect for CameraItem { + impl_aspect_for_camera_item_aspect! {} +} impl CameraItemAspect for CameraItem {} pub struct CameraItemUi; diff --git a/src/nodes/items/mod.rs b/src/nodes/items/mod.rs index f6c81cf..83acd41 100644 --- a/src/nodes/items/mod.rs +++ b/src/nodes/items/mod.rs @@ -130,7 +130,7 @@ impl Drop for Item { } pub enum ItemType { - Camera(CameraItem), + Camera(Arc), Panel(Arc), } impl ItemType { diff --git a/src/nodes/items/panel.rs b/src/nodes/items/panel.rs index d7e8642..50b0205 100644 --- a/src/nodes/items/panel.rs +++ b/src/nodes/items/panel.rs @@ -122,6 +122,7 @@ impl PanelItem { &ITEM_TYPE_INFO_PANEL, ItemType::Panel(generic_panel_item), ); + node.add_aspect_raw(panel_item.clone()); (node, panel_item) } -- 2.49.1 From fec41dc1a11422a4f285348f1dbe94bbf0a5775c Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 11 Sep 2024 15:21:40 -0400 Subject: [PATCH 12/20] fix(objects/sk_hand): draw pinky --- src/objects/input/sk_hand.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/objects/input/sk_hand.rs b/src/objects/input/sk_hand.rs index 730bd86..49c44c3 100644 --- a/src/objects/input/sk_hand.rs +++ b/src/objects/input/sk_hand.rs @@ -210,6 +210,17 @@ impl SkHand { joint_to_line_point(&hand.ring.metacarpal, color), ], ); + // little + Lines::add_list( + token, + &[ + joint_to_line_point(&hand.little.tip, color), + joint_to_line_point(&hand.little.distal, color), + joint_to_line_point(&hand.little.intermediate, color), + joint_to_line_point(&hand.little.proximal, color), + joint_to_line_point(&hand.little.metacarpal, color), + ], + ); // palm Lines::add_list( -- 2.49.1 From 7f78f6f1a8559c8dd5cea02d18fba6b5a4143ad9 Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 12 Sep 2024 15:32:56 -0400 Subject: [PATCH 13/20] fix(audio): stop sound when dropped --- src/nodes/audio.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/nodes/audio.rs b/src/nodes/audio.rs index 725a9a2..205df13 100644 --- a/src/nodes/audio.rs +++ b/src/nodes/audio.rs @@ -85,6 +85,9 @@ impl SoundAspect for Sound { } impl Drop for Sound { fn drop(&mut self) { + if let Some(instance) = self.instance.lock().take() { + instance.stop(); + } if let Some(sk_sound) = self.sk_sound.take() { destroy_queue::add(sk_sound); } -- 2.49.1 From f330492a01bd058ecef2ea3a647cfa9a66bc5643 Mon Sep 17 00:00:00 2001 From: Nova Date: Sat, 14 Sep 2024 20:24:55 -0400 Subject: [PATCH 14/20] clippy --- codegen/src/lib.rs | 14 +++++++++----- src/nodes/alias.rs | 3 --- src/nodes/mod.rs | 1 - 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/codegen/src/lib.rs b/codegen/src/lib.rs index ce06650..71d2c2b 100644 --- a/codegen/src/lib.rs +++ b/codegen/src/lib.rs @@ -196,6 +196,7 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { .map(|t| { // TODO: properly import all dependencies quote! { + #[allow(clippy::all)] pub mod #client_mod_name { use super::*; #t @@ -252,12 +253,12 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { .reduce(fold_tokens) .unwrap_or_default(); let server_side_members = quote! { + #[allow(clippy::all)] #[doc = #description] pub trait #aspect_trait_name { #server_side_members } }; - let aspect_name = aspect.name.to_case(Case::Camel); let aspect_macro_name = Ident::new( &format!( "impl_aspect_for_{}_aspect", @@ -269,15 +270,13 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { let aspect_macro = quote! { macro_rules! #aspect_macro_name { () => { - fn name(&self) -> String { - #aspect_name.to_string() - } fn id(&self) -> u64 { #aspect_id } fn as_any(self: Arc) -> Arc { self } + #[allow(clippy::all)] fn run_signal( &self, _calling_client: std::sync::Arc, @@ -290,6 +289,7 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { _ => Err(stardust_xr::scenegraph::ScenegraphError::SignalNotFound) } } + #[allow(clippy::all)] fn run_method( &self, _calling_client: std::sync::Arc, @@ -348,6 +348,7 @@ fn generate_alias_info(aspect: &Aspect) -> TokenStream { quote! { lazy_static::lazy_static! { + #[allow(clippy::all)] pub static ref #aspect_alias_info_name: crate::nodes::alias::AliasInfo = crate::nodes::alias::AliasInfo { server_signals: vec![#local_signals], server_methods: vec![#local_methods], @@ -444,7 +445,10 @@ fn generate_run_member(aspect_name: &Ident, _type: MemberType, member: &Member) .clone() .zip(argument_types) .map(|(argument_names, argument_types)| { - quote!(let (#argument_names): (#argument_types) = stardust_xr::schemas::flex::deserialize(_message.as_ref())?;) + quote!{ + #[allow(unused_parens)] + let (#argument_names): (#argument_types) = stardust_xr::schemas::flex::deserialize(_message.as_ref())?; + } }) .unwrap_or_default(); let serialize = generate_argument_serialize( diff --git a/src/nodes/alias.rs b/src/nodes/alias.rs index e5c1381..fdbfd3a 100644 --- a/src/nodes/alias.rs +++ b/src/nodes/alias.rs @@ -69,9 +69,6 @@ impl Alias { } } impl Aspect for Alias { - fn name(&self) -> String { - "Alias".to_string() - } fn id(&self) -> u64 { 0 } diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index f6edc30..aaa5ca9 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -299,7 +299,6 @@ impl Drop for Node { } pub trait Aspect: Any + Send + Sync + 'static { - fn name(&self) -> String; fn id(&self) -> u64; fn as_any(self: Arc) -> Arc; fn run_signal( -- 2.49.1 From a4ec7c7c6be42cb47959fb10aeaccb4fbf71c6ae Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 7 Oct 2024 21:02:40 -0400 Subject: [PATCH 15/20] feat: justfile --- justfile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 justfile diff --git a/justfile b/justfile new file mode 100644 index 0000000..36f9336 --- /dev/null +++ b/justfile @@ -0,0 +1,9 @@ + PREFIX := "usr" +BINARY := PREFIX / "bin" +DESTDIR := "/" + +build: + cargo build --release + +install: + install -Dm755 target/release/stardust-xr-server {{ DESTDIR }}{{ BINARY }}/stardust-xr-server -- 2.49.1 From 77b22789dd22afd9f002feaeabc80a3b2b63ca09 Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 21 Oct 2024 06:18:52 -0400 Subject: [PATCH 16/20] clippy: cleanup --- src/wayland/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wayland/mod.rs b/src/wayland/mod.rs index 356e797..af66172 100644 --- a/src/wayland/mod.rs +++ b/src/wayland/mod.rs @@ -87,7 +87,7 @@ impl UnownedFd { } impl Drop for UnownedFd { fn drop(&mut self) { - self.0.take().unwrap().into_inner().into_raw_fd(); + let _ = self.0.take().unwrap().into_inner().into_raw_fd(); } } -- 2.49.1 From 38c8704c8375cc577fc1f0483026986ca199bfab Mon Sep 17 00:00:00 2001 From: Nova Date: Mon, 21 Oct 2024 06:32:02 -0400 Subject: [PATCH 17/20] feat: update zbus --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c107d96..61dd02f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2698,7 +2698,7 @@ checksum = "2f2b15926089e5526bb2dd738a2eb0e59034356e06eb71e1cd912358c0e62c4d" [[package]] name = "stardust-xr" version = "0.45.0" -source = "git+https://github.com/StardustXR/core.git?branch=dev#22fcdda7937308a067a9f61ecbcffb0907739ecb" +source = "git+https://github.com/StardustXR/core.git?branch=dev#8313d5ce425dfec9f460526d527536b52d58b963" dependencies = [ "cluFlock", "dirs", @@ -2718,7 +2718,7 @@ dependencies = [ [[package]] name = "stardust-xr-schemas" version = "1.5.3" -source = "git+https://github.com/StardustXR/core.git?branch=dev#22fcdda7937308a067a9f61ecbcffb0907739ecb" +source = "git+https://github.com/StardustXR/core.git?branch=dev#8313d5ce425dfec9f460526d527536b52d58b963" dependencies = [ "flatbuffers", "flexbuffers", diff --git a/Cargo.toml b/Cargo.toml index 3c4b504..2c40961 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -88,7 +88,7 @@ prisma = "0.1.1" libc = "0.2.155" nix = "0.29.0" input-event-codes = "6.2.0" -zbus = { version = "4.4.0", default-features = false, features = ["tokio"] } +zbus = { version = "5.0.0", default-features = false, features = ["tokio"] } directories = "5.0.1" xkbcommon-rs = "0.1.0" -- 2.49.1 From 68b06d8810b4b75396a7cbfc0c58ced9efa78f5e Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 31 Oct 2024 07:40:06 -0400 Subject: [PATCH 18/20] fix: scenegraph errors --- codegen/src/lib.rs | 6 +++--- src/core/scenegraph.rs | 6 +++--- src/nodes/mod.rs | 9 +++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/codegen/src/lib.rs b/codegen/src/lib.rs index 71d2c2b..4af4df8 100644 --- a/codegen/src/lib.rs +++ b/codegen/src/lib.rs @@ -286,7 +286,7 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { ) -> Result<(), stardust_xr::scenegraph::ScenegraphError> { match _signal { #run_signals - _ => Err(stardust_xr::scenegraph::ScenegraphError::SignalNotFound) + _ => Err(stardust_xr::scenegraph::ScenegraphError::MemberNotFound) } } #[allow(clippy::all)] @@ -301,7 +301,7 @@ fn generate_aspect(aspect: &Aspect) -> TokenStream { match _method { #run_methods _ => { - let _ = _method_response.send(Err(stardust_xr::scenegraph::ScenegraphError::MethodNotFound)); + let _ = _method_response.send(Err(stardust_xr::scenegraph::ScenegraphError::MemberNotFound)); } } } @@ -467,7 +467,7 @@ fn generate_run_member(aspect_name: &Ident, _type: MemberType, member: &Member) #opcode => (move || { #deserialize ::#member_name_ident(_node, _calling_client.clone(), #argument_uses) - })().map_err(|e: color_eyre::Report| stardust_xr::scenegraph::ScenegraphError::SignalError { error: e.to_string() }), + })().map_err(|e: color_eyre::Report| stardust_xr::scenegraph::ScenegraphError::MemberError { error: e.to_string() }), }, MemberType::Method => quote! { #opcode => _method_response.wrap_async(async move { diff --git a/src/core/scenegraph.rs b/src/core/scenegraph.rs index efbd103..5956639 100644 --- a/src/core/scenegraph.rs +++ b/src/core/scenegraph.rs @@ -60,7 +60,7 @@ impl MethodResponseSender { // let _ = self.0.send(map_method_return(result)); // } pub fn wrap_sync color_eyre::eyre::Result>(self, f: F) { - self.send(f().map_err(|e| ScenegraphError::MethodError { + self.send(f().map_err(|e| ScenegraphError::MemberError { error: e.to_string(), })) } @@ -74,11 +74,11 @@ impl MethodResponseSender { fn map_method_return( result: color_eyre::eyre::Result<(T, Vec)>, ) -> Result<(Vec, Vec), ScenegraphError> { - let (value, fds) = result.map_err(|e| ScenegraphError::MethodError { + let (value, fds) = result.map_err(|e| ScenegraphError::MemberError { error: e.to_string(), })?; - let serialized_value = serialize(value).map_err(|e| ScenegraphError::MethodError { + let serialized_value = serialize(value).map_err(|e| ScenegraphError::MemberError { error: format!("Internal: Serialization failed: {e}"), })?; Ok((serialized_value, fds)) diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index aaa5ca9..44824de 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -129,7 +129,8 @@ impl Node { .global_transform() .to_scale_rotation_translation() .0 - .length_squared() > 0.0 + .length_squared() + > 0.0 } else { true } @@ -176,7 +177,7 @@ impl Node { ) -> Result<(), ScenegraphError> { if let Ok(alias) = self.get_aspect::() { if !alias.info.server_signals.iter().any(|e| *e == method) { - return Err(ScenegraphError::SignalNotFound); + return Err(ScenegraphError::MemberNotFound); } alias .original @@ -193,7 +194,7 @@ impl Node { .clone(); aspect .run_signal(calling_client, self.clone(), method, message) - .map_err(|error| ScenegraphError::SignalError { + .map_err(|error| ScenegraphError::MemberError { error: error.to_string(), }) } @@ -208,7 +209,7 @@ impl Node { ) { if let Ok(alias) = self.get_aspect::() { if !alias.info.server_methods.iter().any(|e| *e == method) { - response.send(Err(ScenegraphError::MethodNotFound)); + response.send(Err(ScenegraphError::MemberNotFound)); return; } let Some(alias) = alias.original.upgrade() else { -- 2.49.1 From 5c8a0845c2705635394e6b025c1963cc326e7a95 Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 31 Oct 2024 07:40:12 -0400 Subject: [PATCH 19/20] refactor: justfile --- justfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index 36f9336..5807123 100644 --- a/justfile +++ b/justfile @@ -1,9 +1,12 @@ - PREFIX := "usr" +PREFIX := "usr" BINARY := PREFIX / "bin" DESTDIR := "/" build: cargo build --release +test: + cargo test + install: install -Dm755 target/release/stardust-xr-server {{ DESTDIR }}{{ BINARY }}/stardust-xr-server -- 2.49.1 From 878eb075d2eabf9cf4e6105208a1b7e635a8a916 Mon Sep 17 00:00:00 2001 From: Nova Date: Sat, 2 Nov 2024 13:52:30 -0400 Subject: [PATCH 20/20] feat: switch back to dev branch of core --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 2c40961..6d9f166 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ members = ["codegen"] [workspace.dependencies.stardust-xr] git = "https://github.com/StardustXR/core.git" +branch = "dev" [[bin]] name = "stardust-xr-server" -- 2.49.1