From 500f882abbdaa0d1d61ca7d76d091c3fe396e645 Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Sun, 25 Aug 2024 18:55:00 +0100 Subject: [PATCH] Upgrade deps, fix generator, regenerate --- Cargo.lock | 2748 +++++++++++++---------- Cargo.toml | 62 +- examples/camera-client.rs | 4 +- src/api/autogen/ASCOM.DriverAccess.xml | 1141 ++++++++-- src/api/autogen/AlpacaDeviceAPI_v1.yaml | 1131 ++++++---- src/api/autogen/index.ts | 149 +- src/api/autogen/package.json | 6 +- src/api/autogen/pnpm-lock.yaml | 564 +++-- src/api/autogen/tsconfig.json | 2 +- src/api/mod.rs | 220 +- src/macros.rs | 1 + src/server/params.rs | 2 +- 12 files changed, 3758 insertions(+), 2272 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a933592..54eeb34 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.21" +version = "0.2.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" +checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -20,9 +20,9 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb10ed32c63247e4e39a8f42e8e30fb9442fbf7878c8e4a9849e7e381619bea" +checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" [[package]] name = "accesskit_consumer" @@ -41,7 +41,7 @@ checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" dependencies = [ "accesskit", "accesskit_consumer", - "objc2 0.3.0-beta.3", + "objc2 0.3.0-beta.3.patch-leaks.3", "once_cell", ] @@ -91,9 +91,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -106,9 +106,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", "getrandom", @@ -119,21 +119,27 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + [[package]] name = "android-activity" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39b801912a977c3fd52d80511fe1c0c8480c6f957f21ae2ce1b92ffe970cf4b9" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" dependencies = [ "android-properties", - "bitflags 2.4.1", + "bitflags 2.6.0", "cc", "cesu8", "jni", @@ -153,6 +159,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anes" version = "0.1.6" @@ -170,45 +185,42 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arboard" -version = "3.2.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854" +checksum = "9fb4009533e8ff8f1450a5bcbc30f4242a1d34442221f72314bea1f5dc9c7f89" dependencies = [ "clipboard-win", "log", - "objc", - "objc-foundation", - "objc_id", - "once_cell", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", "parking_lot", - "thiserror", - "winapi", - "x11rb 0.10.1", + "x11rb", ] [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" -version = "0.7.2" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "as-raw-xcb-connection" @@ -235,8 +247,8 @@ dependencies = [ "eframe", "eyre", "futures", - "http 1.0.0", - "indexmap 2.1.0", + "http", + "indexmap", "macro_rules_attribute", "mediatype", "mime", @@ -255,7 +267,7 @@ dependencies = [ "serde_plain", "serde_repr", "serial_test", - "socket2 0.5.5", + "socket2 0.5.7", "thiserror", "time", "tokio", @@ -264,7 +276,16 @@ dependencies = [ "tracing-forest", "tracing-futures", "tracing-subscriber", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", ] [[package]] @@ -279,12 +300,11 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.1.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener 4.0.3", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -292,25 +312,24 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.5.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" dependencies = [ - "async-lock 2.7.0", "async-task", "concurrent-queue", - "fastrand 1.9.0", - "futures-lite 1.13.0", + "fastrand 2.1.0", + "futures-lite 2.3.0", "slab", ] [[package]] name = "async-fn-stream" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d5f39746cfb8c7686cc5da3be489d066b2dee606e6e0daec64e59657f016be7" +checksum = "e71711442f1016c768c259bec59300a10efe753bc3e686ec19e2c6a54a97c29b" dependencies = [ - "futures", + "futures-util", "pin-project-lite", ] @@ -320,7 +339,7 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" dependencies = [ - "async-lock 2.7.0", + "async-lock 2.8.0", "autocfg", "blocking", "futures-lite 1.13.0", @@ -332,7 +351,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock 2.7.0", + "async-lock 2.8.0", "autocfg", "cfg-if 1.0.0", "concurrent-queue", @@ -340,47 +359,47 @@ dependencies = [ "log", "parking", "polling 2.8.0", - "rustix 0.37.19", + "rustix 0.37.27", "slab", - "socket2 0.4.9", + "socket2 0.4.10", "waker-fn", ] [[package]] name = "async-io" -version = "2.2.2" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if 1.0.0", "concurrent-queue", "futures-io", - "futures-lite 2.2.0", + "futures-lite 2.3.0", "parking", - "polling 3.3.2", - "rustix 0.38.30", + "polling 3.7.3", + "rustix 0.38.34", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ "event-listener 2.5.3", ] [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", + "event-listener 5.3.1", "event-listener-strategy", "pin-project-lite", ] @@ -398,60 +417,60 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ "async-io 1.13.0", - "async-lock 2.7.0", + "async-lock 2.8.0", "async-signal", "blocking", "cfg-if 1.0.0", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.30", + "rustix 0.38.34", "windows-sys 0.48.0", ] [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "async-signal" -version = "0.2.5" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.2.2", - "async-lock 2.7.0", + "async-io 2.3.4", + "async-lock 3.4.0", "atomic-waker", "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.30", + "rustix 0.38.34", "signal-hook-registry", "slab", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "async-task" -version = "4.4.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.77" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] @@ -508,37 +527,26 @@ dependencies = [ "zbus", ] -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "axum" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1236b4b292f6c4d6dc34604bb5120d85c3fe1d1aa596bd5cc52ca054d13e7b9e" +checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf" dependencies = [ "async-trait", "axum-core", "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", - "hyper 1.1.0", + "hyper", "hyper-util", "itoa", "matchit", @@ -551,7 +559,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "tokio", "tower", "tower-layer", @@ -568,13 +576,13 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper", + "sync_wrapper 0.1.2", "tower-layer", "tower-service", "tracing", @@ -582,24 +590,24 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide 0.6.2", + "miniz_oxide", "object", "rustc-demangle", ] [[package]] name = "base64" -version = "0.21.2" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bayer" @@ -615,27 +623,42 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.56.0" +version = "0.65.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" dependencies = [ "bitflags 1.3.2", "cexpr", "clang-sys", - "clap 2.34.0", - "env_logger", "lazy_static", "lazycell", "log", "peeking_take_while", + "prettyplease", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", + "syn 2.0.75", "which", ] +[[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" @@ -644,9 +667,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block" @@ -678,7 +701,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" dependencies = [ - "objc-sys 0.3.2", + "objc-sys 0.3.5", ] [[package]] @@ -701,70 +724,96 @@ dependencies = [ "objc2 0.4.1", ] +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] + [[package]] name = "blocking" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ "async-channel", - "async-lock 3.3.0", "async-task", - "fastrand 2.0.1", "futures-io", - "futures-lite 2.2.0", + "futures-lite 2.3.0", "piper", - "tracing", ] [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "6fd4c6dcc3b0aea2f5c0b4b82c2b15fe39ddbc76041a310848f4706edf76bb31" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.4.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.5.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "calloop" -version = "0.12.3" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +dependencies = [ + "bitflags 2.6.0", + "log", + "polling 3.7.3", + "rustix 0.38.34", + "slab", + "thiserror", +] + +[[package]] +name = "calloop" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b50b5a44d59a98c55a9eeb518f39bf7499ba19fd98ee7d22618687f3f10adbf" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "log", - "polling 3.3.2", - "rustix 0.38.30", + "polling 3.7.3", + "rustix 0.38.34", "slab", "thiserror", ] @@ -775,8 +824,20 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ - "calloop", - "rustix 0.38.30", + "calloop 0.12.4", + "rustix 0.38.34", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop 0.13.0", + "rustix 0.38.34", "wayland-backend", "wayland-client", ] @@ -789,11 +850,13 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48" dependencies = [ "jobserver", + "libc", + "shlex", ] [[package]] @@ -804,11 +867,11 @@ checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" [[package]] name = "cexpr" -version = "0.4.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom 5.1.3", + "nom", ] [[package]] @@ -840,9 +903,9 @@ dependencies = [ [[package]] name = "ciborium" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", @@ -851,15 +914,15 @@ dependencies = [ [[package]] name = "ciborium-io" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", "half", @@ -867,44 +930,29 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading 0.7.4", -] - -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags 1.3.2", - "strsim", - "textwrap", - "unicode-width", - "vec_map", + "libloading 0.8.5", ] [[package]] name = "clap" -version = "4.4.16" +version = "4.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58e54881c004cec7895b0068a0a954cd5d62da01aef83fa35b1e594497bf5445" +checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.16" +version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cb82d7f531603d2fd1f507441cdd35184fa81beff7bd489570de7f773460bb" +checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" dependencies = [ "anstyle", "clap_lex", @@ -912,19 +960,17 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.6.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "clipboard-win" -version = "4.5.0" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" dependencies = [ "error-code", - "str-buf", - "winapi", ] [[package]] @@ -943,41 +989,34 @@ dependencies = [ ] [[package]] -name = "cocoa" -version = "0.25.0" +name = "cocoa-foundation" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ "bitflags 1.3.2", "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.23.1", - "foreign-types 0.5.0", + "core-foundation 0.9.4", + "core-graphics-types", "libc", "objc", ] [[package]] -name = "cocoa-foundation" -version = "0.1.1" +name = "codespan-reporting" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ - "bitflags 1.3.2", - "block", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types 0.3.2", - "libc", - "objc", + "termcolor", + "unicode-width", ] [[package]] name = "color-eyre" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" dependencies = [ "backtrace", "color-spantrace", @@ -990,9 +1029,9 @@ dependencies = [ [[package]] name = "color-spantrace" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" dependencies = [ "once_cell", "owo-colors", @@ -1006,11 +1045,42 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -1018,9 +1088,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] @@ -1037,11 +1107,11 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ - "core-foundation-sys 0.8.4", + "core-foundation-sys 0.8.7", "libc", ] @@ -1053,9 +1123,9 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" @@ -1071,12 +1141,12 @@ dependencies = [ [[package]] name = "core-graphics" -version = "0.23.1" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.3", + "core-foundation 0.9.4", "core-graphics-types", "foreign-types 0.5.0", "libc", @@ -1084,13 +1154,12 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.3", - "foreign-types 0.3.2", + "core-foundation 0.9.4", "libc", ] @@ -1115,24 +1184,24 @@ dependencies = [ "core-foundation-sys 0.7.0", "core-graphics 0.19.2", "libc", - "metal", + "metal 0.18.0", "objc", ] [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if 1.0.0", ] @@ -1146,16 +1215,16 @@ dependencies = [ "anes", "cast", "ciborium", - "clap 4.4.16", + "clap", "criterion-plot", "futures", "is-terminal", - "itertools", + "itertools 0.10.5", "num-traits", "once_cell", "oorandom", "plotters", - "rayon 1.7.0", + "rayon 1.10.0", "regex", "serde", "serde_derive", @@ -1172,51 +1241,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", + "itertools 0.10.5", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if 1.0.0", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.14" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if 1.0.0", "crossbeam-utils", - "memoffset 0.8.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if 1.0.0", -] +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" @@ -1230,12 +1287,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] @@ -1246,42 +1303,67 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "custom_debug" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89e0ae2c2a42be29595d05c50e3ce6096c0698a97e021c3289790f0750cc8e2" +checksum = "14e715bf0e503e909c7076c052e39dd215202e8edeb32f1c194fd630c314d256" dependencies = [ "custom_debug_derive", ] [[package]] name = "custom_debug_derive" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a9f3941234c9f62ceaa2782974827749de9b0a8a6487275a278da068e1baf7" +checksum = "f731440b39c73910e253cb465ec1fac97732b3c7af215639881ec0c2a38f4f69" dependencies = [ + "darling", + "itertools 0.12.1", "proc-macro2", - "syn 1.0.109", + "quote", + "syn 2.0.75", "synstructure", ] [[package]] -name = "dashmap" -version = "5.4.0" +name = "darling" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "cfg-if 1.0.0", - "hashbrown 0.12.3", - "lock_api", - "once_cell", - "parking_lot_core", + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.75", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.75", ] [[package]] name = "default-net" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85dc7576d8346d3c86ad64dc64d26d0f6c970ba4795b850f15ee94467d8e53eb" +checksum = "0c5a6569a908354d49b10db3c516d69aca1eccd97562fd31c98b13f00b73ca66" dependencies = [ "dlopen2", "libc", @@ -1336,7 +1418,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.1", + "libloading 0.8.5", ] [[package]] @@ -1350,82 +1432,118 @@ dependencies = [ "winapi", ] +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "ecolor" -version = "0.25.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57539aabcdbb733b6806ef421b66dec158dc1582107ad6d51913db3600303354" +checksum = "2e6b451ff1143f6de0f33fc7f1b68fecfd2c7de06e104de96c4514de3f5396f8" dependencies = [ "bytemuck", + "emath", ] [[package]] name = "eframe" -version = "0.25.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79c00143a1d564cf27570234c9a199cbe75dc3d43a135510fb2b93406a87ee8e" +checksum = "6490ef800b2e41ee129b1f32f9ac15f713233fe3bc18e241a1afe1e4fb6811e0" dependencies = [ + "ahash", "bytemuck", - "cocoa 0.25.0", + "document-features", "egui", + "egui-wgpu", "egui-winit", "egui_glow", "glow", "glutin", "glutin-winit", - "image", + "image 0.25.2", "js-sys", "log", - "objc", + "objc2 0.5.2", + "objc2-app-kit", + "objc2-foundation", "parking_lot", "percent-encoding", "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", "static_assertions", - "thiserror", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "web-time", "winapi", "winit", ] [[package]] name = "egui" -version = "0.25.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0bf640ed7f3bf3d14ebf00d73bacc09c886443ee84ca6494bde37953012c9e3" +checksum = "20c97e70a2768de630f161bb5392cbd3874fcf72868f14df0e002e82e06cb798" dependencies = [ "accesskit", "ahash", + "emath", "epaint", "log", "nohash-hasher", ] [[package]] -name = "egui-winit" -version = "0.25.0" +name = "egui-wgpu" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d95d9762056c541bd2724de02910d8bccf3af8e37689dc114b21730e64f80a0" +checksum = "47c7a7c707877c3362a321ebb4f32be811c0b91f7aebf345fb162405c0218b4c" dependencies = [ - "accesskit_winit", - "arboard", + "ahash", + "bytemuck", + "document-features", "egui", + "epaint", "log", - "raw-window-handle 0.5.2", - "smithay-clipboard", + "thiserror", + "type-map", + "web-time", + "wgpu", + "winit", +] + +[[package]] +name = "egui-winit" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fac4e066af341bf92559f60dbdf2020b2a03c963415349af5f3f8d79ff7a4926" +dependencies = [ + "accesskit_winit", + "ahash", + "arboard", + "egui", + "log", + "raw-window-handle 0.6.2", + "smithay-clipboard", "web-time", "webbrowser", "winit", @@ -1433,48 +1551,41 @@ dependencies = [ [[package]] name = "egui_glow" -version = "0.25.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb2ef815e80d117339c7d6b813f7678d23522d699ccd3243e267ef06166009b9" +checksum = "4e2bdc8b38cfa17cc712c4ae079e30c71c00cd4c2763c9e16dc7860a02769103" dependencies = [ + "ahash", "bytemuck", "egui", "glow", "log", - "memoffset 0.7.1", + "memoffset 0.9.1", "wasm-bindgen", "web-sys", + "winit", ] [[package]] name = "either" -version = "1.8.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "emath" -version = "0.25.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee58355767587db7ba3738930d93cad3052cd834c2b48b9ef6ef26fe4823b7e" +checksum = "0a6a21708405ea88f63d8309650b4d77431f4bc28fb9d8e6f77d3963b51249e6" dependencies = [ "bytemuck", ] -[[package]] -name = "encoding_rs" -version = "0.8.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "enumflags2" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041f5090df68b32bcd905365fd51769c8b9d553fe87fde0b683534f10c01bd2" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" dependencies = [ "enumflags2_derive", "serde", @@ -1482,33 +1593,20 @@ dependencies = [ [[package]] name = "enumflags2_derive" -version = "0.7.7" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", -] - -[[package]] -name = "env_logger" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "syn 2.0.75", ] [[package]] name = "epaint" -version = "0.25.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e638cb066bff0903bbb6143116cfd134a42279c7d68f19c0352a94f15a402de7" +checksum = "3f0dcc0a0771e7500e94cd1cb797bd13c9f23b9409bdc3c824e2cbc562b7fa01" dependencies = [ "ab_glyph", "ahash", @@ -1528,9 +1626,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1538,13 +1636,9 @@ dependencies = [ [[package]] name = "error-code" -version = "2.3.1" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" -dependencies = [ - "libc", - "str-buf", -] +checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" [[package]] name = "event-listener" @@ -1565,9 +1659,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.3" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", @@ -1576,19 +1670,19 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 4.0.3", + "event-listener 5.3.1", "pin-project-lite", ] [[package]] name = "eyre" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -1605,39 +1699,39 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "fdeflate" -version = "0.3.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" dependencies = [ "simd-adler32", ] [[package]] name = "filetime" -version = "0.2.21" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.2.16", - "windows-sys 0.48.0", + "libredox 0.1.3", + "windows-sys 0.59.0", ] [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -1686,7 +1780,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] @@ -1703,9 +1797,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1775,11 +1869,14 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ + "fastrand 2.1.0", "futures-core", + "futures-io", + "parking", "pin-project-lite", ] @@ -1791,7 +1888,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] @@ -1834,16 +1931,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "gethostname" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "gethostname" version = "0.4.3" @@ -1851,14 +1938,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ "libc", - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1869,9 +1956,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gl_generator" @@ -1892,9 +1979,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "glow" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "886c2a30b160c4c6fec8f987430c26b526b7988ca71f664e6a699ddf6f9601e4" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" dependencies = [ "js-sys", "slotmap", @@ -1904,20 +1991,20 @@ dependencies = [ [[package]] name = "glutin" -version = "0.31.2" +version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "005459a22af86adc706522d78d360101118e2638ec21df3852fcc626e0dbb212" +checksum = "18fcd4ae4e86d991ad1300b8f57166e5be0c95ef1f63f3f5b827f8a164548746" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg_aliases", "cgl", - "core-foundation 0.9.3", + "core-foundation 0.9.4", "dispatch", "glutin_egl_sys", "glutin_glx_sys", "glutin_wgl_sys", "icrate", - "libloading 0.8.1", + "libloading 0.8.5", "objc2 0.4.1", "once_cell", "raw-window-handle 0.5.2", @@ -1968,84 +2055,103 @@ dependencies = [ ] [[package]] -name = "h2" -version = "0.3.19" +name = "gpu-alloc" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.9", - "indexmap 1.9.3", - "slab", - "tokio", - "tokio-util", - "tracing", + "bitflags 2.6.0", + "gpu-alloc-types", ] [[package]] -name = "h2" -version = "0.4.1" +name = "gpu-alloc-types" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991910e35c615d8cab86b5ab04be67e6ad24d2bf5f4f11fdbbed26da999bbeab" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 1.0.0", - "indexmap 2.1.0", - "slab", - "tokio", - "tokio-util", - "tracing", + "bitflags 2.6.0", ] [[package]] -name = "half" -version = "1.8.2" +name = "gpu-allocator" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" +checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" +dependencies = [ + "log", + "presser", + "thiserror", + "winapi", + "windows 0.52.0", +] [[package]] -name = "hashbrown" -version = "0.12.3" +name = "gpu-descriptor" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" +dependencies = [ + "bitflags 2.6.0", + "gpu-descriptor-types", + "hashbrown", +] [[package]] -name = "hashbrown" -version = "0.14.3" +name = "gpu-descriptor-types" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.6.0", +] [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "half" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ - "libc", + "cfg-if 1.0.0", + "crunchy", ] [[package]] -name = "hermit-abi" -version = "0.2.6" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.6.0", + "com", "libc", + "libloading 0.8.5", + "thiserror", + "widestring", + "winapi", ] [[package]] name = "hermit-abi" -version = "0.3.1" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hex" @@ -2054,30 +2160,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "home" -version = "0.5.5" +name = "hexf-parse" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] -name = "http" -version = "0.2.9" +name = "home" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "bytes", - "fnv", - "itoa", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -2086,114 +2187,76 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http 0.2.9", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.0.0", + "http", ] [[package]] name = "http-body-util" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.0.0", - "http-body 1.0.0", + "http", + "http-body", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "humantime" -version = "2.1.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.26" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "h2 0.3.19", - "http 0.2.9", - "http-body 0.4.5", + "http", + "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.9", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] -[[package]] -name = "hyper" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5aa53871fc917b1a9ed87b683a5d86db645e23acb32c2e0785a353e522fb75" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.1", - "http 1.0.0", - "http-body 1.0.0", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "tokio", -] - [[package]] name = "hyper-util" -version = "0.1.2" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdea9aac0dbe5a9240d68cfd9501e2db94222c6dc06843e06640b9e07f0fdc67" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.0.0", - "http-body 1.0.0", - "hyper 1.1.0", + "http", + "http-body", + "hyper", "pin-project-lite", - "socket2 0.5.5", + "socket2 0.5.7", "tokio", + "tower", + "tower-service", "tracing", ] @@ -2208,11 +2271,17 @@ dependencies = [ "objc2 0.4.1", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2220,14 +2289,24 @@ dependencies = [ [[package]] name = "image" -version = "0.24.6" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" dependencies = [ "bytemuck", "byteorder", "color_quant", - "num-rational", + "num-traits", +] + +[[package]] +name = "image" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" +dependencies = [ + "bytemuck", + "byteorder-lite", "num-traits", "png", ] @@ -2240,30 +2319,20 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indexmap" -version = "1.9.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "indexmap" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown", "serde", ] [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if 1.0.0", ] @@ -2274,25 +2343,25 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.7.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ - "hermit-abi 0.3.1", - "rustix 0.38.30", + "hermit-abi 0.4.0", + "libc", "windows-sys 0.52.0", ] @@ -2305,11 +2374,20 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "itoap" @@ -2341,22 +2419,33 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading 0.8.5", + "pkg-config", +] + [[package]] name = "khronos_api" version = "3.1.0" @@ -2365,9 +2454,9 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -2377,9 +2466,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" @@ -2393,12 +2482,34 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if 1.0.0", - "windows-sys 0.48.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.3", ] [[package]] @@ -2409,15 +2520,21 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -2425,12 +2542,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "macro_rules_attribute" @@ -2459,15 +2573,15 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.0" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" [[package]] name = "matrixmultiply" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090126dc04f95dc0d1c1c91f61bdd474b3930ca064c1edc8a849da2c6cbe1e77" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" dependencies = [ "autocfg", "rawpointer", @@ -2475,9 +2589,9 @@ dependencies = [ [[package]] name = "mediatype" -version = "0.19.17" +version = "0.19.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a018c36a54f4e12c30464bbc59311f85d3f6f4d6c1b4fa4ea9db2b174ddefc" +checksum = "8878cd8d1b3c8c8ae4b2ba0a36652b7cf192f618a599a7fbdfa25cffd4ea72dd" [[package]] name = "memalloc" @@ -2487,28 +2601,19 @@ checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1" [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memmap2" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92" +checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.7.1" @@ -2520,9 +2625,9 @@ dependencies = [ [[package]] name = "memoffset" -version = "0.8.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -2535,13 +2640,28 @@ checksum = "e198a0ee42bdbe9ef2c09d0b9426f3b2b47d90d93a4a9b0395c4cea605e92dc0" dependencies = [ "bitflags 1.3.2", "block", - "cocoa 0.20.2", + "cocoa", "core-graphics 0.19.2", "foreign-types 0.3.2", "log", "objc", ] +[[package]] +name = "metal" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5637e166ea14be6063a3f8ba5ccb9a4159df7d8f6d61c02fc3d480b1f90dcfcb" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + [[package]] name = "mime" version = "0.3.17" @@ -2556,18 +2676,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - -[[package]] -name = "miniz_oxide" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", "simd-adler32", @@ -2575,22 +2686,24 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.10" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "mozjpeg" -version = "0.9.4" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c50976021d48f0824d019f68988c91be3b5cd3ef7f0581e2ff8d51251ad1fa2" +checksum = "8c1e1f1b1de2ee6ef673e8c76666b93794120fa6ec1cb4f535c129ea6f32731d" dependencies = [ "arrayvec", + "bytemuck", "libc", "mozjpeg-sys", "rgb", @@ -2598,9 +2711,9 @@ dependencies = [ [[package]] name = "mozjpeg-sys" -version = "1.0.6" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cf4accfb13e07996c3765b434809d07d5136911a071808b3f424dd2d63cf53f" +checksum = "27e31c0171e0b1158c0dfb7386dbdf999f4a9afaa83fd68de39c7929f4d5c16f" dependencies = [ "cc", "dunce", @@ -2608,6 +2721,27 @@ dependencies = [ "nasm-rs", ] +[[package]] +name = "naga" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e536ae46fcab0876853bd4a632ede5df4b1c2527a58f6c5a4150fe86be858231" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.6.0", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + [[package]] name = "nanorand" version = "0.7.0" @@ -2619,22 +2753,27 @@ dependencies = [ [[package]] name = "nasm-rs" -version = "0.2.5" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe4d98d0065f4b1daf164b3eafb11974c94662e5e2396cf03f32d0bb5c17da51" +checksum = "12fcfa1bd49e0342ec1d07ed2be83b59963e7acbeb9310e1bb2c07b69dadd959" +dependencies = [ + "jobserver", +] [[package]] name = "ndarray" -version = "0.15.6" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +checksum = "882ed72dce9365842bf196bdeedf5055305f11fc8c03dee7bb0194a6cad34841" dependencies = [ "matrixmultiply", "num-complex", "num-integer", "num-traits", + "portable-atomic", + "portable-atomic-util", "rawpointer", - "rayon 1.7.0", + "rayon 1.10.0", ] [[package]] @@ -2643,13 +2782,13 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "jni-sys", "log", "ndk-sys", "num_enum", "raw-window-handle 0.5.2", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.2", "thiserror", ] @@ -2719,27 +2858,15 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" dependencies = [ "bytes", "libc", "log", ] -[[package]] -name = "nix" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" -dependencies = [ - "bitflags 1.3.2", - "cfg-if 1.0.0", - "libc", - "memoffset 0.6.5", -] - [[package]] name = "nix" version = "0.26.4" @@ -2761,15 +2888,15 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nokhwa" version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4ae290027ab0d22e1405d304603e41edfaee597a81ce09cf751785b44c32a9" +source = "git+https://github.com/l1npengtul/nokhwa?rev=74a98ace10368320cfcc2186118ae10d5308ca59#74a98ace10368320cfcc2186118ae10d5308ca59" dependencies = [ "flume", - "image", + "image 0.24.9", "nokhwa-bindings-linux", "nokhwa-bindings-macos", "nokhwa-bindings-windows", "nokhwa-core", + "parking_lot", "paste", "thiserror", ] @@ -2777,8 +2904,7 @@ dependencies = [ [[package]] name = "nokhwa-bindings-linux" version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "448db09af68e12168b6311423409f679d2da6e75fb158b2d75de2f5d6dc460ca" +source = "git+https://github.com/l1npengtul/nokhwa?rev=74a98ace10368320cfcc2186118ae10d5308ca59#74a98ace10368320cfcc2186118ae10d5308ca59" dependencies = [ "nokhwa-core", "v4l", @@ -2788,11 +2914,11 @@ dependencies = [ [[package]] name = "nokhwa-bindings-macos" version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739d58859fd2b958f01c25de9a0fbb686be7271e5ef3624150e2be85a627b38a" +source = "git+https://github.com/l1npengtul/nokhwa?rev=74a98ace10368320cfcc2186118ae10d5308ca59#74a98ace10368320cfcc2186118ae10d5308ca59" dependencies = [ "block", "cocoa-foundation", + "core-foundation 0.9.4", "core-media-sys", "core-video-sys", "flume", @@ -2804,8 +2930,7 @@ dependencies = [ [[package]] name = "nokhwa-bindings-windows" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b9bae36d0ce413568cefb94c43748e80f9ae97aa0a9e2d8e18f0275a909746" +source = "git+https://github.com/l1npengtul/nokhwa?rev=74a98ace10368320cfcc2186118ae10d5308ca59#74a98ace10368320cfcc2186118ae10d5308ca59" dependencies = [ "nokhwa-core", "once_cell", @@ -2814,24 +2939,13 @@ dependencies = [ [[package]] name = "nokhwa-core" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0326878495bc2e48b8ff0b5c6dba3e7becefce1a252b09fb092b0883d2c342e" -dependencies = [ - "bytes", - "image", - "mozjpeg", - "thiserror", -] - -[[package]] -name = "nom" -version = "5.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b" -dependencies = [ - "memchr", - "version_check", +version = "0.1.2" +source = "git+https://github.com/l1npengtul/nokhwa?rev=74a98ace10368320cfcc2186118ae10d5308ca59#74a98ace10368320cfcc2186118ae10d5308ca59" +dependencies = [ + "bytes", + "image 0.24.9", + "mozjpeg", + "thiserror", ] [[package]] @@ -2856,9 +2970,9 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] @@ -2871,63 +2985,41 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", - "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi 0.2.6", - "libc", -] - [[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", ] [[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", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] @@ -2940,17 +3032,6 @@ dependencies = [ "objc_exception", ] -[[package]] -name = "objc-foundation" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" -dependencies = [ - "block", - "objc", - "objc_id", -] - [[package]] name = "objc-sys" version = "0.2.0-beta.2" @@ -2959,15 +3040,15 @@ checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" [[package]] name = "objc-sys" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" [[package]] name = "objc2" -version = "0.3.0-beta.3" +version = "0.3.0-beta.3.patch-leaks.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" dependencies = [ "block2 0.2.0-alpha.6", "objc-sys 0.2.0-beta.2", @@ -2980,10 +3061,60 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" dependencies = [ - "objc-sys 0.3.2", + "objc-sys 0.3.5", "objc2-encode 3.0.0", ] +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys 0.3.5", + "objc2-encode 4.0.3", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + [[package]] name = "objc2-encode" version = "2.0.0-pre.2" @@ -3000,28 +3131,62 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" [[package]] -name = "objc_exception" -version = "0.1.2" +name = "objc2-encode" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "cc", + "bitflags 2.6.0", + "block2 0.5.1", + "libc", + "objc2 0.5.2", ] [[package]] -name = "objc_id" -version = "0.1.1" +name = "objc2-metal" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "objc", + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.6.0", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", ] [[package]] name = "object" -version = "0.30.3" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -3034,17 +3199,17 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" -version = "11.1.3" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "orbclient" -version = "0.3.45" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221d488cd70617f1bd599ed8ceb659df2147d9393717954d82a0f5e8032a6ab1" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "redox_syscall 0.3.5", + "libredox 0.0.2", ] [[package]] @@ -3065,9 +3230,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owned_ttf_parser" -version = "0.19.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" +checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" dependencies = [ "ttf-parser", ] @@ -3080,15 +3245,15 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -3096,22 +3261,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.2.16", + "redox_syscall 0.5.3", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.52.6", ] [[package]] name = "paste" -version = "1.0.12" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "peeking_take_while" @@ -3121,35 +3286,35 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -3159,26 +3324,26 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.0.1", + "fastrand 2.1.0", "futures-io", ] [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plotters" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" dependencies = [ "num-traits", "plotters-backend", @@ -3189,30 +3354,30 @@ dependencies = [ [[package]] name = "plotters-backend" -version = "0.3.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" +checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" [[package]] name = "plotters-svg" -version = "0.3.3" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" dependencies = [ "plotters-backend", ] [[package]] name = "png" -version = "0.17.8" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -3233,16 +3398,32 @@ dependencies = [ [[package]] name = "polling" -version = "3.3.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if 1.0.0", "concurrent-queue", + "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.30", + "rustix 0.38.34", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "portable-atomic" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" + +[[package]] +name = "portable-atomic-util" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcdd8420072e66d54a407b3316991fe946ce3ab1083a7f575b2463866624704d" +dependencies = [ + "portable-atomic", ] [[package]] @@ -3253,9 +3434,28 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "presser" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.75", +] [[package]] name = "proc-macro-crate" @@ -3264,7 +3464,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit 0.19.10", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", ] [[package]] @@ -3293,13 +3502,19 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] +[[package]] +name = "profiling" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" + [[package]] name = "quick-error" version = "1.2.3" @@ -3308,18 +3523,18 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-xml" -version = "0.30.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +checksum = "6f24d770aeca0eacb81ac29dfbc55ebcc09312fdd1f8bbecdc7e4a84e000e3b4" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -3362,9 +3577,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "raw-window-handle" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rawpointer" @@ -3383,9 +3598,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -3393,39 +3608,58 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "num_cpus", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "regex" -version = "1.8.3" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -3434,25 +3668,31 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ "base64", "bytes", - "encoding_rs", "futures-core", "futures-util", - "h2 0.3.19", - "http 0.2.9", - "http-body 0.4.5", - "hyper 0.14.26", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", "ipnet", "js-sys", "log", @@ -3463,7 +3703,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "system-configuration", + "sync_wrapper 1.0.1", "tokio", "tower-service", "url", @@ -3475,18 +3715,18 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.36" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +checksum = "0f86ae463694029097b846d8f99fd5536740602ae00022c0c50c5600720b2f71" dependencies = [ "bytemuck", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -3496,9 +3736,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.37.19" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", @@ -3510,28 +3750,28 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.12", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "sailfish" @@ -3557,7 +3797,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.48", + "syn 2.0.75", "toml", ] @@ -3580,6 +3820,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scc" +version = "2.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeb7ac86243095b70a7920639507b71d51a63390d1ba26c4f60a552fbb914a37" +dependencies = [ + "sdd", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -3588,37 +3837,43 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b2eaf3a5b264a521b988b2e73042e742df700c4f962cde845d1541adb46550" +checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" dependencies = [ "ab_glyph", "log", "memmap2", - "smithay-client-toolkit", + "smithay-client-toolkit 0.18.1", "tiny-skia", ] +[[package]] +name = "sdd" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0495e4577c672de8254beb68d01a9b62d0e8a13c099edecdbedccce3223cd29f" + [[package]] name = "serde" -version = "1.0.195" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2" dependencies = [ "serde_derive", ] [[package]] name = "serde-ndim" -version = "1.1.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5883c695f4433e428c19938eddf3a8e9d4e040f0cd0c5c11f6ded90f190774c0" +checksum = "b293f019de94be3bd341a95643c9b60540f07e65ea71d10eb9f42d3cc50263ca" dependencies = [ "ndarray", "serde", @@ -3626,32 +3881,34 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.208" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.11" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ + "itoa", "serde", ] @@ -3666,20 +3923,20 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" dependencies = [ "serde", ] @@ -3698,34 +3955,34 @@ dependencies = [ [[package]] name = "serial_test" -version = "3.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ad9342b3aaca7cb43c45c097dd008d4907070394bd0751a0aa8817e5a018d" +checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d" dependencies = [ - "dashmap", "futures", - "lazy_static", "log", + "once_cell", "parking_lot", + "scc", "serial_test_derive", ] [[package]] name = "serial_test_derive" -version = "3.0.0" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" +checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if 1.0.0", "cpufeatures", @@ -3734,108 +3991,133 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "shlex" -version = "0.1.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "simd-adler32" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "slotmap" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "version_check", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay-client-toolkit" -version = "0.18.0" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.6.0", + "calloop 0.12.4", + "calloop-wayland-source 0.2.0", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.34", + "thiserror", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols 0.31.2", + "wayland-protocols-wlr 0.2.0", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60e3d9941fa3bacf7c2bf4b065304faa14164151254cd16ce1b1bc8fc381600f" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.4.1", - "calloop", - "calloop-wayland-source", + "bitflags 2.6.0", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", "memmap2", - "rustix 0.38.30", + "rustix 0.38.34", "thiserror", "wayland-backend", "wayland-client", "wayland-csd-frame", "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", + "wayland-protocols 0.32.3", + "wayland-protocols-wlr 0.3.3", "wayland-scanner", "xkeysym", ] [[package]] name = "smithay-clipboard" -version = "0.7.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb62b280ce5a5cba847669933a0948d00904cf83845c944eae96a4738cea1a6" +checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" dependencies = [ "libc", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "wayland-backend", ] [[package]] name = "smol_str" -version = "0.2.0" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" dependencies = [ "serde", ] [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -3843,12 +4125,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3861,16 +4143,19 @@ dependencies = [ ] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "spirv" +version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" +dependencies = [ + "bitflags 2.6.0", +] [[package]] -name = "str-buf" -version = "1.0.6" +name = "static_assertions" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "strict-num" @@ -3880,9 +4165,9 @@ checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" [[package]] name = "strsim" -version = "0.8.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" @@ -3897,9 +4182,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" dependencies = [ "proc-macro2", "quote", @@ -3910,18 +4195,23 @@ dependencies = [ name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" [[package]] name = "synstructure" -version = "0.12.6" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "unicode-xid", + "syn 2.0.75", ] [[package]] @@ -3931,7 +4221,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.3", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -3941,66 +4231,57 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" dependencies = [ - "core-foundation-sys 0.8.4", + "core-foundation-sys 0.8.7", "libc", ] [[package]] name = "tempfile" -version = "3.5.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if 1.0.0", - "fastrand 1.9.0", - "redox_syscall 0.3.5", - "rustix 0.37.19", - "windows-sys 0.45.0", + "fastrand 2.1.0", + "once_cell", + "rustix 0.38.34", + "windows-sys 0.59.0", ] [[package]] name = "termcolor" -version = "1.2.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if 1.0.0", "once_cell", @@ -4039,9 +4320,9 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a067b809476893fce6a254cf285850ff69c847e6cfbade6a20b655b6c7e80d" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", "arrayvec", @@ -4053,9 +4334,9 @@ dependencies = [ [[package]] name = "tiny-skia-path" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de35e8a90052baaaf61f171680ac2f8e925a1e43ea9d2e3a00514772250e541" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" dependencies = [ "arrayref", "bytemuck", @@ -4074,9 +4355,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -4089,89 +4370,85 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.39.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", "pin-project-lite", - "socket2 0.5.5", + "socket2 0.5.7", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", -] - -[[package]] -name = "tokio-util" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", - "tracing", + "syn 2.0.75", ] [[package]] name = "toml" -version = "0.8.8" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.22.20", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.19.10" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 1.9.3", + "indexmap", "toml_datetime", - "winnow 0.4.6", + "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.21.0" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" dependencies = [ - "indexmap 2.1.0", + "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.5.34", + "winnow 0.6.18", ] [[package]] @@ -4192,15 +4469,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" @@ -4222,7 +4499,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] @@ -4297,64 +4574,74 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" -version = "0.19.0" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" + +[[package]] +name = "type-map" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44dcf002ae3b32cd25400d6df128c5babec3927cd1eb7ce813cfff20eb6c3746" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +dependencies = [ + "rustc-hash", +] [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "uds_windows" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ + "memoffset 0.9.1", "tempfile", "winapi", ] [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" @@ -4364,9 +4651,9 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -4375,9 +4662,9 @@ dependencies = [ [[package]] name = "v4l" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd9946a2fda19c7a729dc72e28b9fd9c653e9b7de954ffe3aecaf51977f88762" +checksum = "d8fbfea44a46799d62c55323f3c55d06df722fbe577851d848d328a1041c3403" dependencies = [ "bitflags 1.3.2", "libc", @@ -4386,9 +4673,9 @@ dependencies = [ [[package]] name = "v4l2-sys-mit" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c932c06df4af1dfb229f604214f2a87993784596ff33ffdadcba1b5519254e" +checksum = "6779878362b9bacadc7893eac76abe69612e8837ef746573c4a5239daf11990b" dependencies = [ "bindgen", ] @@ -4399,29 +4686,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -4429,11 +4710,10 @@ dependencies = [ [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -4445,34 +4725,35 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if 1.0.0", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.34" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -4482,9 +4763,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4492,32 +4773,32 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wayland-backend" -version = "0.3.2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4" +checksum = "f90e11ce2ca99c97b940ee83edbae9da2d56a08f9ea8158550fd77fa31722993" dependencies = [ "cc", "downcast-rs", - "nix 0.26.4", + "rustix 0.38.34", "scoped-tls", "smallvec", "wayland-sys", @@ -4525,12 +4806,12 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.1" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3" +checksum = "7e321577a0a165911bdcfb39cf029302479d7527b517ee58ab0f6ad09edf0943" dependencies = [ - "bitflags 2.4.1", - "nix 0.26.4", + "bitflags 2.6.0", + "rustix 0.38.34", "wayland-backend", "wayland-scanner", ] @@ -4541,29 +4822,41 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cursor-icon", "wayland-backend", ] [[package]] name = "wayland-cursor" -version = "0.31.0" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44aa20ae986659d6c77d64d808a046996a932aa763913864dc40c359ef7ad5b" +checksum = "6ef9489a8df197ebf3a8ce8a7a7f0a2320035c3743f3c1bd0bdbccf07ce64f95" dependencies = [ - "nix 0.26.4", + "rustix 0.38.34", "wayland-client", "xcursor", ] [[package]] name = "wayland-protocols" -version = "0.31.0" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c" +checksum = "62989625a776e827cc0f15d41444a3cea5205b963c3a25be48ae1b52d6b4daaa" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -4575,10 +4868,10 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.31.2", "wayland-scanner", ] @@ -4588,18 +4881,31 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd993de54a40a40fbe5601d9f1fbcaef0aebcc5fda447d7dc8f6dcbaae4f8953" +dependencies = [ + "bitflags 2.6.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.32.3", "wayland-scanner", ] [[package]] name = "wayland-scanner" -version = "0.31.0" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c" +checksum = "d7b56f89937f1cf2ee1f1259cf2936a17a1f45d8f0aa1019fae6d470d304cfa6" dependencies = [ "proc-macro2", "quick-xml", @@ -4608,9 +4914,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.1" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af" +checksum = "43676fe2daf68754ecf1d72026e4e6c15483198b5d24e888b74d3f22f887a148" dependencies = [ "dlib", "log", @@ -4620,9 +4926,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -4640,30 +4946,144 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.10" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd222aa310eb7532e3fd427a5d7db7e44bc0b0cf1c1e21139c345325511a85b6" +checksum = "425ba64c1e13b1c6e8c5d2541c8fac10022ca584f33da781db01b5756aef1f4e" dependencies = [ - "core-foundation 0.9.3", + "block2 0.5.1", + "core-foundation 0.9.4", "home", "jni", "log", "ndk-context", - "objc", - "raw-window-handle 0.5.2", + "objc2 0.5.2", + "objc2-foundation", "url", "web-sys", ] [[package]] -name = "which" -version = "3.1.1" +name = "wgpu" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e37c7b9921b75dfd26dd973fdcbce36f13dfa6e2dc82aece584e0ed48c355c" +dependencies = [ + "arrayvec", + "cfg-if 1.0.0", + "cfg_aliases", + "document-features", + "js-sys", + "log", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d50819ab545b867d8a454d1d756b90cd5f15da1f2943334ca314af10583c9d39" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.6.0", + "cfg_aliases", + "codespan-reporting", + "document-features", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" +checksum = "172e490a87295564f3fcc0f165798d87386f6231b04d4548bca458cbbfd63222" dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bitflags 2.6.0", + "cfg_aliases", + "core-graphics-types", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", "libc", + "libloading 0.8.5", + "log", + "metal 0.28.0", + "naga", + "ndk-sys", + "objc", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1353d9a46bff7f955a680577f34c69122628cc2076e1d6f3a9be6ef00ae793ef" +dependencies = [ + "bitflags 2.6.0", + "js-sys", + "web-sys", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.34", ] +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + [[package]] name = "winapi" version = "0.3.9" @@ -4682,20 +5102,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-wsapoll" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" -dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -4727,7 +5138,26 @@ checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ "windows-implement", "windows-interface", - "windows-targets 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -4767,7 +5197,7 @@ version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.48.5", ] [[package]] @@ -4776,7 +5206,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "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]] @@ -4796,32 +5235,33 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -4832,15 +5272,15 @@ checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4850,15 +5290,15 @@ checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4868,15 +5308,21 @@ checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4886,15 +5332,15 @@ checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4904,15 +5350,15 @@ checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4922,15 +5368,15 @@ checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4940,31 +5386,31 @@ checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winit" -version = "0.29.9" +version = "0.29.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2376dab13e09c01ad8b679f0dbc7038af4ec43d9a91344338e37bd686481550" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.4.1", + "bitflags 2.6.0", "bytemuck", - "calloop", + "calloop 0.12.4", "cfg_aliases", - "core-foundation 0.9.3", - "core-graphics 0.23.1", + "core-foundation 0.9.4", + "core-graphics 0.23.2", "cursor-icon", "icrate", "js-sys", @@ -4978,50 +5424,50 @@ dependencies = [ "orbclient", "percent-encoding", "raw-window-handle 0.5.2", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.2", "redox_syscall 0.3.5", - "rustix 0.38.30", + "rustix 0.38.34", "sctk-adwaita", - "smithay-client-toolkit", + "smithay-client-toolkit 0.18.1", "smol_str", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.31.2", "wayland-protocols-plasma", "web-sys", "web-time", "windows-sys 0.48.0", "x11-dl", - "x11rb 0.13.0", + "x11rb", "xkbcommon-dl", ] [[package]] name = "winnow" -version = "0.4.6" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] name = "winnow" -version = "0.5.34" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" +checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if 1.0.0", "windows-sys 0.48.0", @@ -5040,73 +5486,48 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" -dependencies = [ - "gethostname 0.2.3", - "nix 0.24.3", - "winapi", - "winapi-wsapoll", - "x11rb-protocol 0.10.0", -] - -[[package]] -name = "x11rb" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" +checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ "as-raw-xcb-connection", - "gethostname 0.4.3", + "gethostname", "libc", - "libloading 0.8.1", + "libloading 0.8.5", "once_cell", - "rustix 0.38.30", - "x11rb-protocol 0.13.0", -] - -[[package]] -name = "x11rb-protocol" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" -dependencies = [ - "nix 0.24.3", + "rustix 0.38.34", + "x11rb-protocol", ] [[package]] name = "x11rb-protocol" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" +checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" [[package]] name = "xcursor" -version = "0.3.4" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom 7.1.3", -] +checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" [[package]] name = "xdg-home" -version = "1.0.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ - "nix 0.26.4", - "winapi", + "libc", + "windows-sys 0.59.0", ] [[package]] name = "xkbcommon-dl" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6924668544c48c0133152e7eec86d644a056ca3d09275eb8d5cdb9855f9d8699" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "dlib", "log", "once_cell", @@ -5115,27 +5536,27 @@ dependencies = [ [[package]] name = "xkeysym" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "054a8e68b76250b253f671d1268cb7f1ae089ec35e195b2efb2a4e9a836d0621" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.13" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8f380ae16a37b30e6a2cf67040608071384b1450c189e61bea3ff57cde922d" +checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" [[package]] name = "zbus" -version = "3.14.1" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" dependencies = [ "async-broadcast", "async-executor", "async-fs", "async-io 1.13.0", - "async-lock 2.7.0", + "async-lock 2.8.0", "async-process", "async-recursion", "async-task", @@ -5149,7 +5570,7 @@ dependencies = [ "futures-sink", "futures-util", "hex", - "nix 0.26.4", + "nix", "once_cell", "ordered-stream", "rand", @@ -5168,11 +5589,11 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.14.1" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "regex", @@ -5182,9 +5603,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" dependencies = [ "serde", "static_assertions", @@ -5193,29 +5614,30 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.75", ] [[package]] name = "zvariant" -version = "3.15.0" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" dependencies = [ "byteorder", "enumflags2", @@ -5227,11 +5649,11 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "3.15.0" +version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", diff --git a/Cargo.toml b/Cargo.toml index 2652fe4..f5e8e13 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,58 +10,58 @@ repository = "https://github.com/RReverser/ascom-alpaca-rs" license = "MIT OR Apache-2.0" [dependencies] -async-fn-stream = "0.2.0" -async-trait = "0.1.77" -axum = { version = "0.7.4", optional = true } -bytemuck = { version = "1.14.0", features = ["derive", "extern_crate_std"], optional = true } -bytes = { version = "1.5.0", optional = true } -custom_debug = "0.5.1" -default-net = "0.21.0" -eyre = "0.6.11" +async-fn-stream = "0.2.2" +async-trait = "0.1.81" +axum = { version = "0.7.5", optional = true } +bytemuck = { version = "1.17.0", features = ["derive", "extern_crate_std"], optional = true } +bytes = { version = "1.7.1", optional = true } +custom_debug = "0.6.1" +default-net = "0.22.0" +eyre = "0.6.12" futures = "0.3.30" -http = "1.0.0" -indexmap = { version = "2.1.0", features = ["serde"] } +http = "1.1.0" +indexmap = { version = "2.4.0", features = ["serde"] } macro_rules_attribute = "0.2.0" -mediatype = { version = "0.19.17", optional = true } +mediatype = { version = "0.19.18", optional = true } mime = { version = "0.3.17", optional = true } -ndarray = { version = "0.15.6", optional = true } +ndarray = { version = "0.16.1", optional = true } net-literals = "0.2.0" -num_enum = "0.7.2" +num_enum = "0.7.3" once_cell = { version = "1.19.0", optional = true } rand = { version = "0.8.5", optional = true } -reqwest = { version = "0.11.23", optional = true, default-features = false, features = ["json"] } +reqwest = { version = "0.12.5", optional = true, default-features = false, features = ["json"] } sailfish = { version = "0.8.3", optional = true } -serde = { version = "1.0.195", features = ["derive", "rc"] } -serde-ndim = { version = "1.1.0", optional = true, features = ["ndarray"] } -serde_json = { version = "1.0.111" } +serde = { version = "1.0.208", features = ["derive", "rc"] } +serde-ndim = { version = "2.0.1", optional = true, features = ["ndarray"] } +serde_json = { version = "1.0.125" } serde_plain = "1.0.2" -serde_repr = "0.1.18" -socket2 = "0.5.5" -thiserror = "1.0.56" -time = { version = "0.3.31", features = ["formatting", "parsing", "macros"] } -tokio = { version = "1.35.1", features = ["net", "rt"] } +serde_repr = "0.1.19" +socket2 = "0.5.7" +thiserror = "1.0.63" +time = { version = "0.3.36", features = ["formatting", "parsing", "macros"] } +tokio = { version = "1.39.3", features = ["net", "rt", "io-util"] } tracing = "0.1.40" tracing-futures = { version = "0.2.5", features = ["futures-03"] } [target.'cfg(windows)'.dependencies] -windows-sys = { version = "0.52.0", features = ["Win32_Networking_WinSock", "Win32_Foundation", "Win32_System_IO"] } +windows-sys = { version = "0.59.0", features = ["Win32_Networking_WinSock", "Win32_Foundation", "Win32_System_IO"] } [dev-dependencies] ascom-alpaca = { path = ".", features = ["test"] } bayer = "0.1.5" criterion = { version = "0.5.1", features = ["async_tokio"] } -ctor = "0.2.6" -eframe = "0.25.0" +ctor = "0.2.8" +eframe = "0.28.1" # apparently Cargo doesn't allow `test` to enable `ndarray/rayon` when `ndarray` is an optional dependency # hence the duplicate dep with rayon feature -ndarray = { version = "0.15.6", features = ["rayon"] } +ndarray = { version = "0.16.1", features = ["rayon"] } nokhwa = { version = "0.10.4", features = ["input-native", "output-threaded"] } -parking_lot = { version = "0.12.1", features = ["arc_lock", "send_guard"] } -serial_test = "3.0.0" +parking_lot = { version = "0.12.3", features = ["arc_lock", "send_guard"] } +serial_test = "3.1.1" time = { version = "0.3.36", features = ["formatting"] } tracing-subscriber = "0.3.18" tracing-error = "0.2.0" -color-eyre = "0.6.2" +color-eyre = "0.6.3" tracing-forest = { version = "0.1.6", features = ["ansi"] } [[bench]] @@ -91,3 +91,7 @@ nightly = [] [package.metadata.docs.rs] all-features = true + +[patch.crates-io] +# https://github.com/l1npengtul/nokhwa/issues/177 +nokhwa = { git = "https://github.com/l1npengtul/nokhwa", rev = "74a98ace10368320cfcc2186118ae10d5308ca59" } diff --git a/examples/camera-client.rs b/examples/camera-client.rs index 2a3f955..3bab341 100644 --- a/examples/camera-client.rs +++ b/examples/camera-client.rs @@ -483,11 +483,11 @@ async fn main() -> Result<(), Box> { "ascom-alpaca-rs camera demo", native_options, Box::new(|cc| { - Box::new(StateCtx { + Ok(Box::new(StateCtx { state: State::Init, ctx: cc.egui_ctx.clone(), discovery_client: Default::default(), - }) + })) }), )?; Ok(()) diff --git a/src/api/autogen/ASCOM.DriverAccess.xml b/src/api/autogen/ASCOM.DriverAccess.xml index 47afd4c..917de67 100644 --- a/src/api/autogen/ASCOM.DriverAccess.xml +++ b/src/api/autogen/ASCOM.DriverAccess.xml @@ -23,9 +23,10 @@ - Releases the unmanaged late bound COM object + This method is a "clean-up" method that is primarily of use to drivers that are written in languages such as C# and VB.NET where resource clean-up is initially managed by the language's + runtime garbage collection mechanic. Driver authors should take care to ensure that a client or runtime calling Dispose() does not adversely affect other connected clients. + Applications should not call this method. - An error occurred that is not described by one of the more specific ASCOM exceptions. @@ -33,6 +34,11 @@ True to dispose of managed resources, false to dispose of unmanaged resources + + + Returns if the device has a Platform 7 or later interface that supports Connect / Disconnect and DeviceState + + Returns the member factory created for this device for use by the device class @@ -49,6 +55,47 @@ It also handles interface version 1 drivers that don't have InterfaceVersion properties + + + Connect to the device asynchronously + + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. +

This is a mandatory method and must not throw a .

+
+ + + Disconnect from the device asynchronously + + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. +

This is a mandatory method and must not throw a .

+
+ + + Returns True while the device is undertaking an asynchronous connect or disconnect operation. + + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. +

This is a mandatory property and must not throw a .

+
+ + + Returns the device's operational state in a single call. + + If the device is not connected + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. + +

This is a mandatory property and must not throw a .

+ Devices + Devices must return all operational values that are definitively known but can omit entries where values are unknown. + Devices must not throw exceptions / return errors when values are not known. + An empty list must be returned if no values are known. + Client Applications + + Applications must expect that, from time to time, some operational state values may not be present in the device response and must be prepared to handle “missing” values. + + Further Information + See for further information on implementation support within the ASCOM Platform. +
+
Set True to connect to the device hardware. Set False to disconnect from the device hardware. @@ -173,8 +220,12 @@ If the method is not implemented If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - -

Can throw a not implemented exception

+

May throw a NotImplementedException.

+ The CommandXXX methods are a historic mechanic that provides clients with direct and unimpeded access to change device hardware configuration. While highly enabling for clients, this mechanic is inherently risky + because clients can fundamentally change hardware operation without the driver being aware that a change is taking / has taken place. + The newer Action / SupportedActions mechanic provides discrete, named, functions that can deliver any functionality required.They do need driver authors to make provision for them within the + driver, but this approach is much lower risk than using the CommandXXX methods because it enables the driver to resolve conflicts between standard device interface commands and extended commands + provided as Actions.The driver is always aware of what is happening and can adapt more effectively to client needs.
@@ -193,8 +244,12 @@ If the method is not implemented If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - -

Can throw a not implemented exception

+

May throw a NotImplementedException.

+ The CommandXXX methods are a historic mechanic that provides clients with direct and unimpeded access to change device hardware configuration. While highly enabling for clients, this mechanic is inherently risky + because clients can fundamentally change hardware operation without the driver being aware that a change is taking / has taken place. + The newer Action / SupportedActions mechanic provides discrete, named, functions that can deliver any functionality required.They do need driver authors to make provision for them within the + driver, but this approach is much lower risk than using the CommandXXX methods because it enables the driver to resolve conflicts between standard device interface commands and extended commands + provided as Actions.The driver is always aware of what is happening and can adapt more effectively to client needs.
@@ -213,8 +268,12 @@ If the method is not implemented If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - -

Can throw a not implemented exception

+

May throw a NotImplementedException.

+ The CommandXXX methods are a historic mechanic that provides clients with direct and unimpeded access to change device hardware configuration. While highly enabling for clients, this mechanic is inherently risky + because clients can fundamentally change hardware operation without the driver being aware that a change is taking / has taken place. + The newer Action / SupportedActions mechanic provides discrete, named, functions that can deliver any functionality required.They do need driver authors to make provision for them within the + driver, but this approach is much lower risk than using the CommandXXX methods because it enables the driver to resolve conflicts between standard device interface commands and extended commands + provided as Actions.The driver is always aware of what is happening and can adapt more effectively to client needs.
@@ -240,10 +299,19 @@ The DriverID of the user selected camera. Null if the dialogue is cancelled. + + + Camera device state + + + See for further information on using the class returned by this property. + + Aborts the current exposure, if any, and returns the camera to Idle state. + If CanAbortExposure is false. Thrown if abort is not currently possible (e.g. during download). If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. @@ -480,14 +548,16 @@ - Returns a safearray of int of size * containing the pixel values from the last exposure. + Returns an array of int of size * containing the pixel values from the last exposure. The image array. If no image data is available. - If the device is not connected. - An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + If the device is not connected + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. - The application must inspect the Safearray parameters to determine the dimensions. + This is a synchronous call and clients should be prepared for it to take a long time to complete when large images are being transferred. + Drivers written in C++ must return the image as a SafeArray. + Developers of Alpaca camera devices are strongly advised to implement the ImageBytes mechanic, which is specified in the Alpaca API Reference, to ensure fast image transfer to the client.> Note: if or is changed after a call to StartExposure it will have no effect on the size of this array. This is the preferred method for programs (not scripts) to download images since it requires much less memory. @@ -508,24 +578,26 @@ values are held in memory in column major order despite being stored in row major order from an infrastructure perspective. We consider the application view to have primacy and thus consider the returned array to be column major in structure, regardless of the form in which it is stored in memory. - Furthermore, for the avoidence of doubt, the pixel at coordinate 0,0 is the top left image pixel. + Furthermore, for the avoidance of doubt, the pixel at coordinate 0,0 is the top left image pixel. - Returns a safearray of Variant of size * containing the pixel values from the last exposure. + Returns an array of COM-Variant of size * containing the pixel values from the last exposure. The image array variant. If no image data is available. - If the device is not connected. - An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + If the device is not connected + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. - The application must inspect the Safearray parameters to - determine the dimensions. Note: if or is changed after a call to + This property is used only in Windows ASCOM/COM drivers. Alpaca drivers and stand-alone Alpaca cameras must raise a . + This is a synchronous call and clients should be prepared for it to take a long time to complete when large images are being transferred. + Drivers written in C++ must return the image as a SafeArray. + Note: if or is changed after a call to StartExposure it will have no effect on the size of this array. This property should only be used from scripts due to the extremely high memory utilization on large image arrays (26 bytes per pixel). Pixels values should be in Short, int, - or Double format. + or Double format. For colour or multispectral cameras, will produce an array of * * NumPlanes. If the application cannot handle multispectral images, it should use just the first plane. @@ -680,7 +752,7 @@ If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This method returns only after the move has completed. + This method must be implemented asynchronously using as the completion property. The (symbolic) values for GuideDirections are: @@ -697,7 +769,7 @@ - Sets the camera cooler setpoint in degrees Celsius, and returns the current setpoint. + Sets the camera cooler set-point in degrees Celsius, and returns the current set-point. The set CCD temperature. Must throw an InvalidValueException if an attempt is made to set a value is outside the camera's valid temperature setpoint range. @@ -705,6 +777,7 @@ If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + This method should be short-lived because it is only expected to ‘set’ the new set point and must not block until the set point has been reached. The driver should throw an if an attempt is made to set outside the valid range for the camera. As an assistance to driver authors, to protect equipment and prevent harm to individuals, Conform will report an issue if it is possible to set below -280C or above +100C. @@ -723,6 +796,7 @@ If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + Must be implemented asynchronously using to determine if the exposure has been successfully completed and the image data is ready for access via . A dark frame or bias exposure may be shorter than the V2 value and for a bias frame can be zero. Check the value of Light and allow exposures down to 0 seconds if Light is False. If the hardware will not @@ -760,6 +834,7 @@ If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + Must be implemented asynchronously using to determine if the exposure has been successfully completed and the image data is ready for access via . If an exposure is in progress, the readout process is initiated. Ignored if readout is already in process. @@ -1051,7 +1126,6 @@ Sensor name, Interface Version 2 and later
The name of sensor used within the camera - Must throw an exception if not supported. If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. @@ -1885,18 +1959,29 @@ CoverCalibrator ProgID for default or null for None ProgID for chosen CoverCalibrator or null for none
+ + + CoverCalibrator device state + + See for further information on using the class returned by this property. + + + Returns the state of the device cover, if present, otherwise returns "NotPresent" If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - /// + This is a mandatory property that must return a value, it must not throw a . + Whenever the cover is moving both must be True and CoverState must be . The state must only be returned if the device is unaware of the cover's state e.g. if the hardware does not report the open / closed state and the cover has just been powered on. Clients do not need to take special action if this state is returned, they must carry on as usual, issuing or commands as required. If the cover hardware cannot report its state, the device could mimic this by recording the last configured state and returning this. Driver authors or device manufacturers may also wish to offer users the capability of powering up in a known state e.g. Open or Closed and driving the hardware to this state when Connected is set . + This property is intended to be available under all but the most disastrous driver conditions.If something has gone wrong, the CoverState must be + rather than throwing an exception. @@ -1946,11 +2031,14 @@ An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. This is a mandatory property that must return a value, it must not throw a . + Whenever the calibrator is changing both must be True and CalibratorState must be . The state must only be returned if the device is unaware of the calibrator's state e.g. if the hardware does not report the device's state and the calibrator has just been powered on. Clients do not need to take special action if this state is returned, they must carry on as usual, issuing and commands as required. If the calibrator hardware cannot report its state, the device could mimic this by recording the last configured state and returning this. Driver authors or device manufacturers may also wish to offer users the capability of powering up in a known state and driving the hardware to this state when Connected is set . + This property is intended to be available under all but the most disastrous driver conditions.If something has gone wrong, the CoverState must be + rather than throwing an exception. @@ -2011,6 +2099,535 @@ If an error condition arises while turning off the calibrator, must be set to rather than . + + + Flag showing whether a calibrator brightness state change is in progress. + + If the device is not connected + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. + + True while the calibrator brightness is not stable following a or command. + + +

This is a mandatory property and must not throw a .

+ + This property must throw an exception ff an issue arises while changing calibrator brightness. The exception must continue to be thrown until a new or + command is received. +
+
+ + + Flag showing whether the cover is moving. + + If the device is not connected + An error occurred that is not described by one of the more specific ASCOM exceptions. Include sufficient detail in the message text to enable the issue to be accurately diagnosed by someone other than yourself. + + True while the cover is in motion following an or command. + + +

This is a mandatory property and must not throw a .

+
+
+ + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new CameraDeviceState instance + + + + + Create a new CameraDeviceState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + The device's CameraState + + + + + The device's CCDTemperature + + + + + The device's CoolerPower + + + + + The device's HeatSinkTemperature + + + + + The device's ImageReady property + + + + + The device's IsPulseGuiding property + + + + + The device's PercentCompleted property + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new CoverCalibratorState instance + + + + + Create a new CoverCalibratorState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + The device's Brightness + + + + + The device's CalibratorState + + + + + The device's CoverState + + + + + The device's CalibratorChanging state + + + + + The device's CoverMoving state + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new DomeState instance + + + + + Create a new DomeState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Dome altitude + + + + + Dome is at home + + + + + Dome is parked + + + + + Dome azimuth + + + + + Dome shutter state + + + + + Dome is slewing + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new FilterWheelState instance + + + + + Create a new FilterWheelState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + FilterWheel position + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new FocuserState instance + + + + + Create a new FocuserState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Focuser IsMoving state + + + + + Focuser position + + + + + Focuser temperature + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new ObservingConditionsState instance + + + + + Create a new ObservingConditionsState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Telescope altitude + + + + + Telescope is at home + + + + + Telescope is parked + + + + + Telescope azimuth + + + + + Telescope declination + + + + + Telescope is pulse guiding + + + + + Telescope right ascension + + + + + Telescope pointing state + + + + + Telescope sidereal time + + + + + Telescope is slewing + + + + + Telescope is tracking + + + + + Telescope UTC date and time + + + + + Telescope UTC date and time + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new RotatorState instance + + + + + Create a new RotatorState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Rotator is moving state + + + + + Rotator position + + + + + Rotator mechanical position + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new FocuserState instance + + + + + Create a new FocuserState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Focuser IsMoving state + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new TelescopeState instance + + + + + Create a new TelescopeState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Telescope altitude + + + + + Telescope is at home + + + + + Telescope is parked + + + + + Telescope azimuth + + + + + Telescope declination + + + + + Telescope is pulse guiding + + + + + Telescope right ascension + + + + + Telescope pointing state + + + + + Telescope sidereal time + + + + + Telescope is slewing + + + + + Telescope is tracking + + + + + Telescope UTC date and time + + + + + The time at which the state was recorded + + + + + Class that presents the device's operation state as a set of nullable properties + + + + + Create a new VideoState instance + + + + + Create a new VideoState instance from the device's DeviceState response. + + The device's DeviceState response. + Debug TraceLogger instance. The type of this parameter is Object - see remarks. + This class supports .NET Framework 3.5, 4.x and .NET Standard 2.0. In order to avoid use of dynamic and inclusion of projects or packages that define the TraceLogger + component, the TL parameter is typed as an object and a reflection method is used to call the LogMessage member. + + + + Focuser IsMoving state + + + + + The time at which the state was recorded + + Provides universal access to ASCOM Dome drivers @@ -2077,6 +2694,14 @@ Prog ID of the default dome to select. Null if no default is to be set. The Prog ID of the Dome chosen, or Null if no dome is chose, or the dialog is canceled. + + + Dome device state + + + See for further information on using the class returned by this property. + + Immediately stops any and all movement. If the device is not connected. @@ -2413,6 +3038,14 @@ FilterWheel Prog ID for default or null for None Prog ID for chosen FilterWheel or null for none + + + FilterWheel device state + + + See for further information on using the class returned by this property. + + Focus offset of each filter in the wheel @@ -2443,25 +3076,27 @@ - - Sets or returns the current filter wheel position - - Must throw an InvalidValueException if an invalid position is set - If the device is not connected. - An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - - Write a position number between 0 and N-1, where N is the number of filter slots (see - ). Starts filter wheel rotation immediately when written. Reading - the property gives current slot number (if wheel stationary) or -1 if wheel is - moving. - Returning a position of -1 is mandatory while the filter wheel is in motion; valid slot numbers must not be reported back while - the filter wheel is rotating past filter positions. - Note - Some filter wheels are built into the camera (one driver, two - interfaces). Some cameras may not actually rotate the wheel until the - exposure is triggered. In this case, the written value is available - immediately as the read value, and -1 is never produced. - + + Sets or returns the current filter wheel position + + Must throw an InvalidValueException if an invalid position is set + If the device is not connected. + An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + + This is an asynchronous operation: Writing to Position must return as soon as the filter change operation has been successfully started. Reading the Position property must return -1 while the change + is in progress. After the requested position has been successfully reached and motion stops, reading Position must return the requested new filter number. + Write a position number between 0 and N-1, where N is the number of filter slots (see + ). Starts filter wheel rotation immediately when written. Reading + the property gives current slot number (if wheel stationary) or -1 if wheel is + moving. + Returning a position of -1 is mandatory while the filter wheel is in motion; valid slot numbers must not be reported back while + the filter wheel is rotating past filter positions. + Note + Some filter wheels are built into the camera (one driver, two + interfaces). Some cameras may not actually rotate the wheel until the + exposure is triggered. In this case, the written value is available + immediately as the read value, and -1 is never produced. + @@ -2481,6 +3116,14 @@ Focuser Prog ID for default or null for None Prog ID for chosen focuser or null for none + + + Focuser device state + + + See for further information on using the class returned by this property. + + True if the focuser is capable of absolute position; that is, being commanded to a specific step location. @@ -2496,7 +3139,8 @@ If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - Some focusers may not support this function, in which case an exception will be raised. + This method must be short-lived; it is defined as synchronous in this specification. + Some focusers may not support this function, in which case an exception will be raised. Recommendation: Host software should call this method upon initialization and, if it fails, disable the Halt button in the user interface. @@ -2556,9 +3200,12 @@ If the device is not connected. An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + This is asynchronous method and must return as soon as the focus change operation has been successfully started, with the property = True. + After the requested position is successfully reached and motion stops, the property becomes False. + If the property is True, then this is an absolute positioning focuser. The Move command tells the focuser to move to an exact step position, and the Position parameter - of the Move method is an integer between 0 and . + of the Move method is an integer between 0 and . If the property is False, then this is a relative positioning focuser. The Move command tells the focuser to move in a relative direction, and the Position parameter of the Move method (in this case, step distance) is an integer between minus and plus . @@ -2634,7 +3281,7 @@ Raises an exception if ambient temperature is not available. Commonly available on focusers with a built-in temperature compensation mode. Clarification - October 2019 Historically no units were specified for this property. Henceforth, if applications need to process the supplied temperature, they should proceed on the basis that the - units are degrees Celsius for consistency with . Conversion to other temperature units can be achieved through the utility method. + units are degrees Celsius for consistency with . Conversion to other temperature units can be achieved through the utility method. @@ -2712,8 +3359,8 @@ for recording astronomical data or determining refraction corrections. It is NOT intended as a general purpose environmental sensor system. - The Action method and - SupportedActions property + The Action method and + SupportedActions property can be used to add driver-specific sensors. @@ -2730,6 +3377,14 @@ ObservingConditions Prog ID for default or null for None Prog ID for chosen ObservingConditions or null for none + + + ObservingConditions device state + + + See for further information on using the class returned by this property. + + Gets and sets the time period over which observations will be averaged @@ -2974,7 +3629,7 @@ An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request.

Must NOT throw a MethodNotImplementedException when the specified sensor is implemented but must throw a MethodNotImplementedException when the specified sensor is not implemented.

- PropertyName must be the name of one of the sensor properties specified in the interface. If the caller supplies some other value, throw an InvalidValueException. + PropertyName must be the name of one of the sensor properties specified in the interface. If the caller supplies some other value, throw an InvalidValueException. Return a negative value to indicate that no valid value has ever been received from the hardware. If an empty string is supplied as the PropertyName, the driver must return the time since the most recent update of any sensor. A MethodNotImplementedException must not be thrown in this circumstance.
@@ -2992,7 +3647,7 @@

Must NOT throw a MethodNotImplementedException when the specified sensor is implemented but must throw a MethodNotImplementedException when the specified sensor is not implemented.

- PropertyName must be the name of one of the sensor properties specified in the interface. If the caller supplies some other value, throw an InvalidValueException. + PropertyName must be the name of one of the sensor properties specified in the interface. If the caller supplies some other value, throw an InvalidValueException. If the sensor is implemented, this must return a valid string, even if the driver is not connected, so that applications can use this to determine what sensors are available. If the sensor is not implemented, this must throw a MethodNotImplementedException.
@@ -3006,6 +3661,8 @@ An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request.

Optional method, can throw a MethodNotImplementedException

+ This must be a short-lived synchronous call that triggers a refresh. It must not wait for long running processes to complete. + It is the client's responsibility to poll , to determine whether / when the data has been refreshed.
@@ -3026,6 +3683,14 @@ Rotator ProgID for default or null for None ProgID for chosen Rotator or null for none + + + Rotator device state + + + See for further information on using the class returned by this property. + + Indicates whether the Rotator supports the method. @@ -3072,6 +3737,9 @@ An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request.

Must be implemented.

+ This is an asynchronous method that returns as soon as the rotation operation has been successfully started, with the + property True (unless already at the requested position). After the requested angle is successfully reached and motion stops, + the property must become False. Calling Move causes the property to change to the sum of the current angular position and the value of the parameter (modulo 360 degrees), then starts rotation to . NOTE @@ -3088,7 +3756,9 @@ An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request.

Must be implemented.

-

SPECIFICATION REVISION - IRotatorV3 - Platform 6.5

+ This is an asynchronous method that returns as soon as the rotation operation has been successfully started, with the + property True (unless already at the requested position). After the requested angle is successfully reached and motion stops, + the property must become False. Calling causes the property to change to the value of the parameter, then starts rotation to . @@ -3206,7 +3876,9 @@ An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request.

Must be implemented.

-

Introduced in IRotatorV3.

+ This is an asynchronous method that returns as soon as the rotation operation has been successfully started, with the + property True (unless already at the requested position). After the requested angle is successfully reached and motion stops, + the property must become False. Moves the rotator to the requested mechanical angle, independent of any sync offset that may have been set. This method is to address requirements that need a physical rotation angle such as taking sky flats. Client applications should use the method in preference to this method when imaging. @@ -3230,6 +3902,14 @@ SafetyMonitor Prog ID for default or null for None Prog ID for chosen SafetyMonitor or null for none + + + SafetyMonitor device state + + + See for further information on using the class returned by this property. + + Indicates whether the monitored state is safe for use. @@ -3470,6 +4150,77 @@ This method was first introduced in Version 2. + + + Set a boolean switch's state asynchronously + + When CanAsync(id) is false. + Switch number. + New boolean state. + +

This is an optional method and can throw a when is .

+ + This is an asynchronous method that must return as soon as the state change operation has been successfully started, with + for the given switch Id = False. After the state change has completed becomes True. + + + must return if the set state is true and if the set state is false. + + + Devices are numbered from 0 to - 1 + +
+
+ + + Set a switch's value asynchronously + + Switch number. + New double value. +

This is an optional method and can throw a when is .

+ When CanAsync(id) is false. + +

This is an optional method and can throw a when is .

+ This is an asynchronous method that must return as soon as the state change operation has been successfully started, with + for the given switch Id = False. After the state change has completed becomes True. + If the value is more than or less than the method must throw an . + A set value that is intermediate between the values specified by must result in the device being set to an achievable value close to the requested set value. + Devices are numbered from 0 to - 1. + This is a Version 2 method. +
+
+ + + Flag indicating whether this switch can operate asynchronously. + + Switch number. + True if the switch can operate asynchronously. + When CanAsync(id) is false. + +

This is a mandatory method and must not throw a .

+
+
+ + + Completion variable for asynchronous switch state change operations. + + Switch number. + When an in-progress operation is cancelled by the method. + False while an asynchronous operation is underway and true when it has completed. + +

This is a mandatory method and must not throw a .

+
+
+ + + Cancels an in-progress asynchronous state change operation. + + Switch number. + +

This is an optional method and can throw a .

+ This method must be implemented if it is possible for the device to cancel an asynchronous state change operation, otherwise it must throw a . +
+
Implements a telescope class to access any registered ASCOM telescope @@ -3491,6 +4242,14 @@ Optional DriverID of the previously selected telescope that is to be the pre-selected telescope in the list. The DriverID of the user selected telescope. Null if the dialogue is cancelled. + + + State response from the device + + + See for further information on using the class returned by this property. + + Stops a slew in progress. @@ -3506,6 +4265,11 @@ Raises an error if is true. + + + True if the device supports asynchronous operations event notifications. + + The alignment mode of the mount. @@ -3548,11 +4312,14 @@ - - True if the telescope is stopped in the Home position. Set only following a FindHome() operation, and reset with any slew operation. This property must be False if the telescope does not support homing. - - If the device is not connected - An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + + True if the telescope is stopped in the Home position. Set only following a FindHome() operation, and reset with any slew operation. This property must be False if the telescope does not support homing. + + If the device is not connected + An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + + This is the correct property to use to determine successful completion of the (asynchronous) operation. + @@ -3683,7 +4450,7 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This will always return False for non-German-equatorial mounts that do not have to be flipped. + This will always return False for mounts that do not have to be flipped. May raise an error if the telescope is not connected. This is only available for telescope InterfaceVersions 2 and later. @@ -3715,9 +4482,9 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - If this is true, then only the synchronous equatorial slewing methods are guaranteed to be supported. - See the property for the asynchronous slewing capability flag. - May raise an error if the telescope is not connected. + If this is true, the property must also return true because all drivers must implement asynchronous slewing in this interface version. + May raise an error if the telescope is not connected. + See for important COM and Alpaca implementation requirements. @@ -3727,9 +4494,9 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - If this is true, then only the synchronous local horizontal slewing methods are guaranteed to be supported. - See the property for the asynchronous slewing capability flag. + If this is true, the property must also return true because all drivers must implement asynchronous slewing in this interface version. May raise an error if the telescope is not connected. + See for important COM and Alpaca implementation requirements. @@ -3739,9 +4506,9 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This indicates the asynchronous local horizontal slewing methods are supported. - If this is True, then will also be true. + If this is true, the property must also return true because all drivers must implement synchronous slewing in this interface version to ensure backward compatibility with older clients.. May raise an error if the telescope is not connected. + See for important COM and Alpaca implementation requirements. @@ -3751,9 +4518,9 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This indicates the asynchronous equatorial slewing methods are supported. - If this is True, then will also be true. + If this is true, the property must also return true because all drivers must implement synchronous slewing in this interface version to ensure backward compatibility with older clients.. May raise an error if the telescope is not connected. + See for important COM and Alpaca implementation requirements. @@ -3899,8 +4666,8 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - Returns only after the home position has been found. - At this point the property will be True. + This is an asynchronous method: Use the property to monitor the operation's progress. + When the mount has successfully reached its home position, becomes False and becomes True. Raises an error if there is a problem. Raises an error if AtPark is true. This is only available for telescope InterfaceVersions 2 and later. @@ -4032,6 +4799,8 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + This is an asynchronous method: Use the property to monitor the operation's progress. + When the mount has successfully reached its home position, becomes False and becomes True. Raises an error if there is a problem communicating with the telescope or if parking fails. Parking should put the telescope into a state where its pointing accuracy will not be lost if it is power-cycled (without moving it). @@ -4053,7 +4822,9 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This method returns immediately if the hardware is capable of back-to-back moves e.g. dual-axis moves. For hardware not having dual-axis capability, the method returns only after the move has completed. + This method is asynchronous and should return quickly using IsPulseGuiding as the completion property. + If the hardware is not capable of simultaneous asynchronous north-south and east-west moves, the guide movements must be effected sequentially and must remain + True until both moves have completed. NOTES: @@ -4139,6 +4910,7 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + This is an asynchronous method and should be set True while the operation is in progress. For historical reasons, this property's name does not reflect its true meaning. The name will not be changed (so as to preserve compatibility), but the meaning has since become clear. All conventional mounts have two pointing states for a given equatorial (sky) position. Mechanical limitations often make it impossible for the mount to position the optics at given HA/Dec in one of the two pointing @@ -4287,19 +5059,20 @@ If the telescope is parked If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + Target azimuth (degrees, North-referenced, positive East/clockwise). + Target altitude (degrees, positive up) - This Method must be implemented if returns True. - Raises an error if the slew fails. - The slew may fail if the target coordinates are beyond limits imposed within the driver component. - Such limits include mechanical constraints imposed by the mount or attached instruments, - building or dome enclosure restrictions, etc. +

Deprecated for client applications.

+ This method must not be used by applications, use the asynchronous method instead. + If the mount is capable of slewing, drivers must implement this method to ensure backward compatibility with older clients. - The and properties are not changed by this method. - Raises an error if is True, or if is True. - This is only available for telescope InterfaceVersions 2 and later. + This Method must be implemented if returns True. Raises an error if the slew fails. The slew may fail if the target coordinates are beyond limits imposed within the driver component. + Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. +
+ The and properties are not changed by this method. + Raises an error if is True, or if is True. This is only available for telescope InterfaceVersions 2 and later. + See for important COM and Alpaca implementation requirements.
- Target azimuth (degrees, North-referenced, positive East/clockwise). - Target altitude (degrees, positive up)
@@ -4310,6 +5083,8 @@ If the telescope is parked If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + Azimuth to which to move + Altitude to which to move to This method should only be implemented if the properties , , , and can be read while the scope is slewing. @@ -4323,9 +5098,9 @@ Raises an error if is True, or if is True. This is only available for telescope InterfaceVersions 2 and later. + For drivers, must also be implemented and must return True when this method is implemented. + See for important COM and Alpaca implementation requirements. - Azimuth to which to move - Altitude to which to move to @@ -4336,16 +5111,23 @@ If an invalid RightAscension or Declination is specified If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + The destination right ascension (hours). Copied to . + The destination declination (degrees, positive North). Copied to . - This Method must be implemented if returns True. Raises an error if the slew fails. +

Deprecated for client applications.

+ This method must not be used by applications, use the asynchronous method instead. + If the mount is capable of slewing, drivers must implement this method to ensure backward compatibility with older clients. + + + This Method must be implemented if returns True. Raises an error if the slew fails. The slew may fail if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. The target coordinates are copied to - and whether or not the slew succeeds. + and whether or not the slew succeeds. + Raises an error if is True, or if is False. + See for important COM and Alpaca implementation requirements.
- The destination right ascension (hours). Copied to . - The destination declination (degrees, positive North). Copied to . @@ -4356,19 +5138,21 @@ If an invalid RightAscension or Declination is specified If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. + The destination right ascension (hours). Copied to . + The destination declination (degrees, positive North). Copied to . - This method must be implemented if returns True. Raises an error if starting the slew failed. - Returns immediately after starting the slew. The client may monitor the progress of the slew by reading + This method must be implemented if returns True.Raises an error if starting the slew failed. + Returns immediately after starting the slew. The client may monitor the progress of the slew by reading the , , and properties during the slew. When the slew completes, becomes False. The slew may fail to start if the target coordinates are beyond limits imposed within the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. + The target coordinates are copied to and whether or not the slew succeeds. Raises an error if is True, or if is False. + See for important COM and Alpaca implementation requirements. - The destination right ascension (hours). Copied to . - The destination declination (degrees, positive North). Copied to . @@ -4379,11 +5163,18 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This Method must be implemented if returns True. Raises an error if the slew fails. - The slew may fail if the target coordinates are beyond limits imposed within the driver component. - Such limits include mechanical constraints imposed by the mount or attached - instruments, building or dome enclosure restrictions, etc. - Raises an error if is True, or if is False. +

Deprecated for client applications.

+ + This method must not be used by applications, use the asynchronous method instead. + If the mount is capable of slewing, drivers must implement this method to ensure backward compatibility with older clients. + + This Method must be implemented if returns True. + + Raises an error if the slew fails. The slew may fail if the target coordinates are beyond limits imposed within the driver component. + Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. + + Raises an error if is True, or if is False. + See for important COM and Alpaca implementation requirements.
@@ -4396,15 +5187,14 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This Method must be implemented if returns True. - Raises an error if starting the slew failed. - Returns immediately after starting the slew. The client may - monitor the progress of the slew by reading the RightAscension, Declination, - and Slewing properties during the slew. When the slew completes, becomes False. - The slew may fail to start if the target coordinates are beyond limits imposed within - the driver component. Such limits include mechanical constraints imposed by the mount - or attached instruments, building or dome enclosure restrictions, etc. - Raises an error if is True, or if is False. + + This Method must be implemented if returns True. + Raises an error if starting the slew failed. Returns immediately after starting the slew. The client may monitor the progress of the slew by reading the RightAscension, Declination, + and Slewing properties during the slew. When the slew completes, becomes False. The slew may fail to start if the target coordinates are beyond limits imposed within + the driver component. Such limits include mechanical constraints imposed by the mount or attached instruments, building or dome enclosure restrictions, etc. + Raises an error if is True, or if is False. + + See for important COM and Alpaca implementation requirements. @@ -4423,6 +5213,7 @@ PulseGuide, , and . It reflects only motion caused by one of the Slew commands, flipping caused by changing the property, or . + For drivers, must also be implemented and must return True when this method is implemented. @@ -4576,10 +5367,14 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - The state of after unparking is undetermined. - Valid only after . - Applications must check and change Tracking as needed after unparking. - Raises an error if unparking fails. Calling this with = False does nothing (harmless) + + This is an asynchronous method and must be set True while the mount is parking and False when the operation is complete. + will be set True when the mount has parked successfully. + + + The state of after unparking is undetermined. Valid only after . Applications must check and change Tracking as needed after unparking. + Raises an error if unparking fails. Calling this with = False does nothing (harmless) + @@ -4647,13 +5442,13 @@ - A collection of rates at which the telescope may be moved about the specified axis by the method. + A collection of rates at which the telescope may be moved about the specified axis by the method. This is only used if the telescope interface version is 2 or 3 - See the description of the method for more information. - This method must return an empty collection if is not supported. + See the description of the method for more information. + This method must return an empty collection if is not supported. The values used in members must be non-negative; forward and backward motion is achieved by the application - applying an appropriate sign to the returned values in the command. + applying an appropriate sign to the returned values in the command. @@ -4746,7 +5541,7 @@ - Provides universal access to Video drivers + Defines the IVideo Interface. - NOW DEPRECATED, ONLY RETAINED FOR BACKWARD COMPATIBILITY @@ -4762,6 +5557,14 @@ Video Prog ID for default or null for None Prog ID for chosen Video or null for none + + + VideoState device state + + + See for further information on using the class returned by this property. + + The name of the video capture device when such a device is used. @@ -4779,7 +5582,7 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This value is for information purposes only. The exposure cannot be set directly in seconds, use property to change the exposure. + This value is for information purposes only. The exposure cannot be set directly in seconds, use property to change the exposure. @@ -4789,7 +5592,7 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - This value is for information purposes only. The exposure cannot be set directly in seconds, use property to change the exposure. + This value is for information purposes only. The exposure cannot be set directly in seconds, use property to change the exposure. @@ -4801,7 +5604,7 @@ Analogue cameras run in one of the two fixed frame rates - 25fps for PAL video and 29.97fps for NTSC video. Digital cameras usually can run at a variable frame rate. This value is for information purposes only and cannot be set. The FrameRate has the same value during the entire operation of the device. - Changing the property may change the actual variable frame rate but cannot change the return value of this property. + Changing the property may change the actual variable frame rate but cannot change the return value of this property. @@ -4820,16 +5623,16 @@ - Index into the array for the selected camera integration rate. + Index into the array for the selected camera integration rate. Must throw an exception if not valid. Must throw an exception if the camera supports only one integration rate (exposure) that cannot be changed. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - can be used to adjust the integration rate (exposure) of the camera, if supported. A 0-based array of strings - , - which correspond to different discrete integration rate settings supported by the camera will be returned. must be set to an integer in this range. - The driver must default to a valid value when integration rate is supported by the camera. + can be used to adjust the integration rate (exposure) of the camera, if supported. A 0-based array of strings - , + which correspond to different discrete integration rate settings supported by the camera will be returned. must be set to an integer in this range. + The driver must default to a valid value when integration rate is supported by the camera. @@ -4863,7 +5666,7 @@ The most common usage of this property is to select approximate colour balance parameters to be applied to the Bayer matrix of one-shot colour sensors. Application authors should assume that an appropriate IR cut-off filter is in place for colour sensors. - It is recommended that this function be called only after a connection is established with + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. @@ -4875,7 +5678,7 @@ If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - returns a value indicating whether the sensor is monochrome, or what Bayer matrix it encodes. + returns a value indicating whether the sensor is monochrome, or what Bayer matrix it encodes. The following values are defined: @@ -5129,7 +5932,7 @@
- It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model.
@@ -5206,7 +6009,7 @@ The size of the video frame buffer. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. -

Must be implemented

When retrieving video frames using the property +

Must be implemented

When retrieving video frames using the property the driver may use a buffer to queue the frames waiting to be read by the client. This property returns the size of the buffer in frames or if no buffering is supported then the value of less than 2 should be returned. The size of the buffer can be controlled by the end user from the driver setup dialogue.
@@ -5253,55 +6056,55 @@ - Maximum value of . + Maximum value of . Short integer representing the maximum gain value supported by the camera. The maximum gain value that this camera supports Must throw an exception if GainMax is not supported. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - When specifying the gain setting with an integer value, is used in conjunction with to + When specifying the gain setting with an integer value, is used in conjunction with to specify the range of valid settings. - shall be greater than . If either is available, then both must be available. - Please see for more information. - It is recommended that this function be called only after a connection is established with the camera hardware, to ensure + shall be greater than . If either is available, then both must be available. + Please see for more information. + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. - Minimum value of . + Minimum value of . The minimum gain value that this camera supports Must throw an exception if GainMin is not supported. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - When specifying the gain setting with an integer value, is used in conjunction with to + When specifying the gain setting with an integer value, is used in conjunction with to specify the range of valid settings. - shall be greater than . If either is available, then both must be available. - Please see for more information. - It is recommended that this function be called only after a connection is established with the camera hardware, to ensure + shall be greater than . If either is available, then both must be available. + Please see for more information. + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. - Index into the array for the selected camera gain. + Index into the array for the selected camera gain. - Short integer index for the current camera gain in the string array. + Short integer index for the current camera gain in the string array. Index into the Gains array for the selected camera gain Must throw an exception if not valid. Must throw an exception if gain is not supported. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - can be used to adjust the gain setting of the camera, if supported. There are two typical usage scenarios: + can be used to adjust the gain setting of the camera, if supported. There are two typical usage scenarios:
    -
  • Discrete gain video cameras will return a 0-based array of strings - , which correspond to different discrete gain settings supported by the camera. must be set to an integer in this range. and must thrown an exception if +
  • Discrete gain video cameras will return a 0-based array of strings - , which correspond to different discrete gain settings supported by the camera. must be set to an integer in this range. and must thrown an exception if this mode is used.
  • -
  • Adjustable gain video cameras - and return integers, which specify the valid range for .
  • +
  • Adjustable gain video cameras - and return integers, which specify the valid range for .
- The driver must default to a valid value. + The driver must default to a valid value.
@@ -5312,66 +6115,66 @@ Must throw an exception if Gains is not supported If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - provides a 0-based array of available gain settings. + provides a 0-based array of available gain settings. Typically the application software will display the available gain settings in a drop list. The application will then supply - the selected index to the driver via the property. - The setting may alternatively be specified using integer values; if this mode is used then is invalid - and must throw an exception. Please see and for more information. - It is recommended that this function be called only after a connection is established with the camera hardware, + the selected index to the driver via the property. + The setting may alternatively be specified using integer values; if this mode is used then is invalid + and must throw an exception. Please see and for more information. + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. - Maximum value of . + Maximum value of . Short integer representing the maximum gamma value supported by the camera. The maximum gain value that this camera supports Must throw an exception if GammaMax is not supported If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - When specifying the gamma setting with an integer value, is used in conjunction with to + When specifying the gamma setting with an integer value, is used in conjunction with to specify the range of valid settings. - shall be greater than . If either is available, then both must be available. - Please see for more information. - It is recommended that this function be called only after a connection is established with the camera hardware, to ensure + shall be greater than . If either is available, then both must be available. + Please see for more information. + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. - Minimum value of . + Minimum value of . The minimum gamma value that this camera supports Must throw an exception if GammaMin is not supported. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - When specifying the gamma setting with an integer value, is used in conjunction with to + When specifying the gamma setting with an integer value, is used in conjunction with to specify the range of valid settings. - shall be greater than . If either is available, then both must be available. - Please see for more information. - It is recommended that this function be called only after a connection is established with the camera hardware, to ensure + shall be greater than . If either is available, then both must be available. + Please see for more information. + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. - Index into the array for the selected camera gamma. + Index into the array for the selected camera gamma. - Short integer index for the current camera gamma in the string array. + Short integer index for the current camera gamma in the string array. Index into the Gammas array for the selected camera gamma Must throw an exception if not valid. Must throw an exception if gamma is not supported. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - can be used to adjust the gamma setting of the camera, if supported. There are two typical usage scenarios: + can be used to adjust the gamma setting of the camera, if supported. There are two typical usage scenarios:
    -
  • Discrete gamma video cameras will return a 0-based array of strings - , which correspond to different discrete gamma settings supported by the camera. must be set to an integer in this range. and must thrown an exception if +
  • Discrete gamma video cameras will return a 0-based array of strings - , which correspond to different discrete gamma settings supported by the camera. must be set to an integer in this range. and must thrown an exception if this mode is used.
  • -
  • Adjustable gain video cameras - and return integers, which specify the valid range for .
  • +
  • Adjustable gain video cameras - and return integers, which specify the valid range for .
- The driver must default to a valid value. + The driver must default to a valid value.
@@ -5382,18 +6185,18 @@ Must throw an exception if Gammas is not supported If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. - provides a 0-based array of available gamma settings. This list can contain the widely used values of OFF, LO and HI that correspond to gammas of 1.00, 0.45 and 0.35 as well as other extended values. + provides a 0-based array of available gamma settings. This list can contain the widely used values of OFF, LO and HI that correspond to gammas of 1.00, 0.45 and 0.35 as well as other extended values. Typically the application software will display the available gamma settings in a drop list. The application will then supply - the selected index to the driver via the property. - The setting may alternatively be specified using integer values; if this mode is used then is invalid - and must throw an exception. Please see and for more information. - It is recommended that this function be called only after a connection is established with the camera hardware, + the selected index to the driver via the property. + The setting may alternatively be specified using integer values; if this mode is used then is invalid + and must throw an exception. Please see and for more information. + It is recommended that this function be called only after a connection is established with the camera hardware, to ensure that the driver is aware of the capabilities of the specific camera model. - Returns True if the driver supports custom device properties configuration via the method. + Returns True if the driver supports custom device properties configuration via the method. If the device is not connected An error occurred that is not described by one of the more specific ASCOM exceptions. The device did not successfully complete the request. @@ -5410,9 +6213,9 @@ The dialogue could also provide buttons for cameras that can be controlled via 'on screen display' menus and a set of navigation buttons such as Up, Down, Left, Right and Enter. This dialogue is not intended to be used in unattended mode but can give greater control over video cameras that provide special features. The dialogue may also allow - changing standard interface settings such as Gamma and Gain. If a client software - displays any interface settings then it should take care to keep in sync the values changed by this method and those changed directly via the interface. - To support automated and unattended control over the specialized device settings or functions available on this dialogue the driver should also allow their control via . + changing standard interface settings such as Gamma and Gain. If a client software + displays any interface settings then it should take care to keep in sync the values changed by this method and those changed directly via the interface. + To support automated and unattended control over the specialized device settings or functions available on this dialogue the driver should also allow their control via . This dialogue is meant to be used by the applications to allow the user to adjust specialized device settings when those applications don't specifically use the specialized settings in their functionality. Examples for specialized settings that could be supported are white balance and sharpness. diff --git a/src/api/autogen/AlpacaDeviceAPI_v1.yaml b/src/api/autogen/AlpacaDeviceAPI_v1.yaml index 08dfb62..0939e2f 100644 --- a/src/api/autogen/AlpacaDeviceAPI_v1.yaml +++ b/src/api/autogen/AlpacaDeviceAPI_v1.yaml @@ -1,4 +1,24 @@ -openapi: 3.0.2 +openapi: 3.1.0 + +## This file is licensed under the MIT license, SPDX identifier: MIT + +## Copyright (c) <2023> + +## Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +## associated documentation files (the "Software"), to deal in the Software without restriction, +## including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +## and/or sell copies of the Software, and to permit persons to whom the Software is furnished to +## do so, subject to the following conditions: + +## The above copyright notice and this permission notice (including the next paragraph) shall be +## included in all copies or substantial portions of the Software. + +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +## BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +## IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +## WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + servers: - description: Within the "Try it out" URLs, the device URL root is the trailing slash in "/ASCOMInitiative/". url: https://virtserver.swaggerhub.com/ASCOMInitiative/api/v1 @@ -14,31 +34,31 @@ info: The ASCOM Interface behavioural requirements for Alpaca drivers are the same as for COM based drivers and are documented in the API Interface Definitions e.g. - the Telescope.SlewToCoordinates method. + the Telescope.SlewToCoordinates method. This document focuses on how to use the ASCOM Interface standards in their RESTful Alpaca form. - + ## Alpaca URLs, Case Sensitivity, Parameters and Returned values **Alpaca Device API URLs** are of the form **http(s)://host:port/path** where path comprises **"/api/v1/"** followed by one of the method names below. e.g. for an Alpaca interface running on port 7843 of a device with IP address 192.168.1.89: - + * A telescope "Interface Version" method URL would be **http://192.168.1.89:7843/api/v1/telescope/0/interfaceversion** - + * A first focuser "Position" method URL would be **http://192.168.1.89:7843/api/v1/focuser/0/position** - + * A second focuser "StepSize" method URL would be **http://192.168.1.89:7843/api/v1/focuser/1/stepsize** * A rotator "Halt" method URL would be **http://192.168.1.89:7843/api/v1/rotator/0/halt** - - - + + + URLs are case sensitive and all elements must be in lower case. This means that both the device type and command name must always be in lower case. Parameter names are not case sensitive, so clients and drivers should be prepared for parameter names to be supplied and returned with any casing. Parameter values can be in mixed case as required. - - + + For GET operations, parameters should be placed in the URL query string and for PUT operations they should be placed in the body of the message. - Responses, as described below, are returned in JSON format and always include a common set of values including the client's transaction number, + Responses, as described below, are returned in JSON format and always include a common set of values including the client's transaction number, the server's transaction number together with any error message and error number. If the transaction completes successfully, the ErrorMessage field will be an empty string and the ErrorNumber field will be zero. @@ -47,13 +67,13 @@ info: ## HTTP Status Codes and ASCOM Error codes The returned HTTP status code gives a high level view of whether the device understood the request and whether it attempted to process it. - - + + Under most circumstances the returned status will be `200`, indicating that the request was correctly formatted and that it was passed to the device's handler to execute. A `200` status does not necessarily mean that the operation completed as expected, without error, and you must always check the ErrorMessage and ErrorNumber fields to confirm whether the returned result is valid. The `200` status simply means that the transaction was successfully managed by the device's transaction management layer. - - + + An HTTP status code of `400` indicates that the device could not interpret the request e.g. an invalid device number or misspelt device type was supplied. Check the body of the response for a text error message. @@ -62,8 +82,8 @@ info: ## SetupDialog and Alpaca Device Configuration The SetupDialog method has been omitted from the Alpaca Device API because it presents a user interface rather than returning data. Alpaca device configuration is covered in the "ASCOM Alpaca Management API" specification, which can be selected through the drop-down box at the head of this page. - - + + paths: '/{device_type}/{device_number}/action': @@ -71,20 +91,22 @@ paths: summary: Invokes the named device-specific action. description: >- Actions and SupportedActions are a standardised means for drivers to extend functionality beyond the built-in capabilities of the ASCOM device interfaces. - + + The key advantage of using Actions is that drivers can expose any device specific functionality required. The downside is that, in order to use these unique features, every application author would need to create bespoke code to present or exploit them. - + + The Action parameter and return strings are deceptively simple, but can support transmission of arbitrarily complex data structures, for example through JSON encoding. - - + + This capability will be of primary value to: - - bespoke software and hardware configurations where a single entity controls both the consuming application software and the hardware / driver environment. - - a group of application and device authors to quickly formulate and try out new interface capabilities without requiring an immediate change to the ASCOM device interface, which will take a lot longer than just agreeing a name, input parameters and a standard response for an Action command. - - + * bespoke software and hardware configurations where a single entity controls both the consuming application software and the hardware / driver environment + * a group of application and device authors to quickly formulate and try out new interface capabilities without requiring an immediate change to the ASCOM device interface, which will take a lot longer than just agreeing a name, input parameters and a standard response for an Action command + + The list of Action commands supported by a driver can be discovered through the SupportedActions property. - - + + This method should return an error message and NotImplementedException error number (0x400) if the driver just implements the standard ASCOM device methods and has no bespoke, unique, functionality. parameters: - $ref: '#/components/parameters/device_type' @@ -291,7 +313,7 @@ paths: summary: The ASCOM Device interface version number that this device supports. description: >- This method returns the version of the ASCOM device interface contract to which this device complies. Only one interface version is current at a moment in time and all - new devices should be built to the latest interface version. Applications can choose which device interface versions they support and it is in their interest to support + new devices should be built to the latest interface version. Applications can choose which device interface versions they support and it is in their interest to support previous versions as well as the current version to ensure thay can use the largest number of devices. parameters: - $ref: '#/components/parameters/device_type' @@ -471,7 +493,7 @@ paths: get: summary: Returns the camera operational state. description: >- - Returns the current camera operational state. + Returns the current camera operational state as an integer. parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -719,7 +741,7 @@ paths: - Camera Specific Methods responses: '200': - $ref: '#/components/responses/DoubleResponse' + $ref: '#/components/responses/PercentDoubleResponse' '400': $ref: '#/components/responses/400' '500': @@ -925,7 +947,7 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/gainmin': get: - summary: Minimum Gain value of that this camera supports + summary: Minimum Gain value of that this camera supports description: Returns the Minimum value of Gain. parameters: - $ref: '#/components/parameters/device_number' @@ -942,7 +964,7 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/gains': get: - summary: List of Gain names supported by the camera + summary: List of Gain names supported by the camera description: Returns the Gains supported by the camera. parameters: - $ref: '#/components/parameters/device_number' @@ -998,83 +1020,91 @@ paths: get: summary: Returns an array of integers containing the exposure pixel values description: > - Returns an array of 32bit integers containing the pixel values from the last exposure. This call can return either a 2 dimension (monochrome images) or 3 dimension (colour or multi-plane images) array of size NumX \* NumY or NumX \* NumY \* NumPlanes. Where applicable, the size of NumPlanes has to be determined by inspection of the returned Array. + Returns an array of 32bit integers containing the pixel values from the last exposure. This call can return either a 2 dimension (monochrome images) or 3 dimension (colour or multi-plane images) array + of size `NumX * NumY` or `NumX * NumY * NumPlanes`. Where applicable, the size of `NumPlanes` has to be determined by inspection of the returned array. - Since 32bit integers are always returned by this call, the returned JSON Type value (0 = Unknown, 1 = short(16bit), 2 = int(32bit), 3 = Double) is always 2. The number of planes is given in the returned Rank value. + Since 32bit integers are always returned by this call, the returned JSON `Type` value is always 2 (integer). - When de-serialising to an object it is essential to know the array Rank beforehand so that the correct data class can be used. This can be achieved through a regular expression or by direct parsing of the returned JSON string to extract the Type and Rank values before de-serialising. + When de-serialising to an object it is essential to know the array `Rank` beforehand so that the correct data class can be used. This can be achieved through a regular expression or by direct parsing + of the returned JSON string to extract the `Type` and `Rank` values before de-serialising. - This regular expression accomplishes the extraction into two named groups Type and Rank, which can then be used to select the correct de-serialisation data class: + This regular expression accomplishes the extraction into two named groups `Type` and `Rank`, which can then be used to select the correct de-serialisation data class: - __`^*"Type":(?\d*),"Rank":(?\d*)`__ + `^*"Type":(?\d*),"Rank":(?\d*)` - When the SensorType is Monochrome, RGGB, CMYG, CMYG2 or LRGB, the serialised JSON array should have 2 dimensions. For example, the returned array should appear as below if NumX = 7, NumY = 5 - and Pxy represents the pixel value at the zero based position x across and y down the image with the origin in the top left corner of the image. + When the `SensorType` is Monochrome, RGGB, CMYG, CMYG2 or LRGB, the serialised JSON array should have 2 dimensions. For example, the returned array should appear as below if `NumX = 7`, `NumY = 5` + and `Pxy` represents the pixel value at the zero based position `x` across and `y` down the image with the origin in the top left corner of the image. Please note that this is "column-major" order (column changes most rapidly) - from the image's row and column perspective, while, from the array's perspective, serialisation is actually effected in "row-major" order (rightmost index changes most rapidly). + from the image's row and column perspective, while, from the array's perspective, serialisation is actually effected in "row-major" order (rightmost index changes most rapidly). This unintuitive outcome arises because the ASCOM Camera Interface specification defines the image column dimension as the rightmost array dimension. - ```text - [ + ``` + [ [P00,P01,P02,P03,P04], [P10,P11,P12,P13,P14], - + [P20,P21,P22,P23,P24], - + [P30,P31,P32,P33,P34], - + [P40,P41,P42,P43,P44], - + [P50,P51,P52,P53,P54], + + [P60,P61,P62,P63,P64], - [P60,P61,P62,P63,P64] - + … ] ``` - When the SensorType is Color, the serialised JSON array will have 3 dimensions. For example, the returned array should appear as below if NumX = 7, NumY = 5 - and Rxy, Gxy and Bxy represent the red, green and blue pixel values at the zero based position x across and y down the image with the origin in the top left corner of the image. Please see note above regarding element ordering. + When the `SensorType` is Color, the serialised JSON array will have 3 dimensions. For example, the returned array should appear as below if `NumX = 7`, `NumY = 5` + and `Rxy`, `Gxy` and `Bxy` represent the red, green and blue pixel values at the zero based position x across and y down the image with the origin in the top left corner of the image. Please see note above regarding element ordering. - ```text - [ + ``` + [ [[R00,G00,B00],[R01,G01,B01],[R02,G02,B02],[R03,G03,B03],[R04,G04,B04]], + [[R10,G10,B10],[R11,G11,B11],[R12,G12,B12],[R13,G13,B13],[R14,G14,B14]], + [[R20,G20,B20],[R21,G21,B21],[R22,G22,B22],[R23,G23,B23],[R24,G24,B24]], + [[R30,G30,B30],[R31,G31,B31],[R32,G32,B32],[R33,G33,B33],[R34,G34,B34]], + [[R40,G40,B40],[R41,G41,B41],[R42,G42,B42],[R43,G43,B43],[R44,G44,B44]], + [[R50,G50,B50],[R51,G51,B51],[R52,G52,B52],[R53,G53,B53],[R54,G54,B54]], + [[R60,G60,B60],[R61,G61,B61],[R62,G62,B62],[R63,G63,B63],[R64,G64,B64]], + … ] ``` + ## Performance - # Performance - - - Returning an image from an Alpaca device as a JSON array is very inefficient and can result in delays of 30 or more seconds while client and device process and send the huge JSON string over the network. - A new, much faster mechanic called ImageBytes - [Alpaca ImageBytes Concepts and Implementation](https://www.ascom-standards.org/Developer/AlpacaImageBytes.pdf) has been developed that sends data as a binary byte stream and can offer a 10 to 20 fold reduction in transfer time. + Returning an image from an Alpaca device as a JSON array is very inefficient and can result in delays of 30 or more seconds while client and device process and send the huge JSON string over the network. + A new, much faster mechanic called ImageBytes - [Alpaca ImageBytes Concepts and Implementation](https://www.ascom-standards.org/Developer/AlpacaImageBytes.pdf) has been developed that sends data as a binary byte stream and can offer a 10 to 20 fold reduction in transfer time. It is strongly recommended that Alpaca Cameras implement the ImageBytes mechanic as well as the JSON mechanic. parameters: - $ref: '#/components/parameters/device_number' @@ -1091,107 +1121,98 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/imagearrayvariant': get: - summary: Returns an array of int containing the exposure pixel values + summary: Returns an array of numbers containing the exposure pixel values description: > Returns an array containing the pixel values from the last exposure. - This call can return either a 2 dimension (monochrome images) or 3 - dimension (colour or multi-plane images) array of size NumX \* NumY or - NumX \* NumY \* NumPlanes. Where applicable, the size of NumPlanes has - to be determined by inspection of the returned Array. - - + This call can return either a 2 dimension (monochrome images) or a 3 + dimension (colour or multi-plane images) array of size `NumX * NumY` or + `NumX * NumY * NumPlanes`. Where applicable, the size of `NumPlanes` has + to be determined by inspection of the returned array. + + This call can return values as short(16bit) integers, int(32bit) integers or double floating point values. The nature of the returned - values is given in the Type parameter: 0 = Unknown, 1 = short(16bit), 2 - = int(32bit), 3 = Double. The number of planes is given in the returned - Rank value. - - - When deserialising to an object it helps enormously to know the Type and - Rank beforehand so that the correct data class can be used. This can be - achieved through a regular expression or by direct parsing of the - returned JSON string to extract the Type and Rank values before - deserialising. + values is given in the `Type` parameter. + + + When de-serialising to an object it is essential to know the array `Rank` beforehand so that the correct data class can be used. This can be achieved through a regular expression or by direct parsing + of the returned JSON string to extract the `Type` and `Rank` values before de-serialising. - This regular expression accomplishes the extraction into two named groups Type and Rank, which can then be used to select the correct de-serialisation data class: + This regular expression accomplishes the extraction into two named groups `Type` and `Rank`, which can then be used to select the correct de-serialisation data class: - __`^*"Type":(?\d*),"Rank":(?\d*)`__ + `^*"Type":(?\d*),"Rank":(?\d*)` - When the SensorType is Monochrome, RGGB, CMYG, CMYG2 or LRGB, the serialised JSON array should have 2 dimensions. For example, the returned array should appear as below if NumX = 7, NumY = 5 - and Pxy represents the pixel value at the zero based position x across and y down the image with the origin in the top left corner of the image. + When the `SensorType` is Monochrome, RGGB, CMYG, CMYG2 or LRGB, the serialised JSON array should have 2 dimensions. For example, the returned array should appear as below if `NumX = 7`, `NumY = 5` + and `Pxy` represents the pixel value at the zero based position `x` across and `y` down the image with the origin in the top left corner of the image. Please note that this is "column-major" order (column changes most rapidly) - from the image's row and column perspective, while, from the array's perspective, serialisation is actually effected in "row-major" order (rightmost index changes most rapidly). + from the image's row and column perspective, while, from the array's perspective, serialisation is actually effected in "row-major" order (rightmost index changes most rapidly). This unintuitive outcome arises because the ASCOM Camera Interface specification defines the image column dimension as the rightmost array dimension. - [ - - - [P00,P01,P02,P03,P04], - - - [P10,P11,P12,P13,P14], - - - [P20,P21,P22,P23,P24], - - - [P30,P31,P32,P33,P34], - - - [P40,P41,P42,P43,P44], - - - [P50,P51,P52,P53,P54], - + ``` - [P60,P61,P62,P63,P64] + [ + [P00,P01,P02,P03,P04], + [P10,P11,P12,P13,P14], + + [P20,P21,P22,P23,P24], + + [P30,P31,P32,P33,P34], + + [P40,P41,P42,P43,P44], + + [P50,P51,P52,P53,P54], + + [P60,P61,P62,P63,P64], + … ] + ``` - When the SensorType is Color, the serialised JSON array should have 3 dimensions. For example, the returned array should appear as below if NumX = 7, NumY = 5 - and Rxy, Gxy and Bxy represent the red, green and blue pixel values at the zero based position x across and y down the image with the origin in the top left corner of the image. Please see note above regarding element ordering. + When the `SensorType` is Color, the serialised JSON array will have 3 dimensions. For example, the returned array should appear as below if `NumX = 7`, `NumY = 5` + and `Rxy`, `Gxy` and `Bxy` represent the red, green and blue pixel values at the zero based position x across and y down the image with the origin in the top left corner of the image. Please see note above regarding element ordering. - [ + ``` - [[R00,G00,B00],[R01,G01,B01],[R02,G02,B02],[R03,G03,B03],[R04,G04,B04]], - + [ + [[R00,G00,B00],[R01,G01,B01],[R02,G02,B02],[R03,G03,B03],[R04,G04,B04]], - [[R10,G10,B10],[R11,G11,B11],[R12,G12,B12],[R13,G13,B13],[R14,G14,B14]], + [[R10,G10,B10],[R11,G11,B11],[R12,G12,B12],[R13,G13,B13],[R14,G14,B14]], - [[R20,G20,B20],[R21,G21,B21],[R22,G22,B22],[R23,G23,B23],[R24,G24,B24]], + [[R20,G20,B20],[R21,G21,B21],[R22,G22,B22],[R23,G23,B23],[R24,G24,B24]], - [[R30,G30,B30],[R31,G31,B31],[R32,G32,B32],[R33,G33,B33],[R34,G34,B34]], + [[R30,G30,B30],[R31,G31,B31],[R32,G32,B32],[R33,G33,B33],[R34,G34,B34]], - [[R40,G40,B40],[R41,G41,B41],[R42,G42,B42],[R43,G43,B43],[R44,G44,B44]], + [[R40,G40,B40],[R41,G41,B41],[R42,G42,B42],[R43,G43,B43],[R44,G44,B44]], - [[R50,G50,B50],[R51,G51,B51],[R52,G52,B52],[R53,G53,B53],[R54,G54,B54]], + [[R50,G50,B50],[R51,G51,B51],[R52,G52,B52],[R53,G53,B53],[R54,G54,B54]], - [[R60,G60,B60],[R61,G61,B61],[R62,G62,B62],[R63,G63,B63],[R64,G64,B64]], + [[R60,G60,B60],[R61,G61,B61],[R62,G62,B62],[R63,G63,B63],[R64,G64,B64]], + … ] + ``` - __`Performance`__ - + ## Performance - Returning an image from an Alpaca device as a JSON array is very inefficient and can result in delays of 30 or more seconds while client and device process and send the huge JSON string over the network. - A new, much faster mechanic called ImageBytes - [Alpaca ImageBytes Concepts and Implementation](https://www.ascom-standards.org/Developer/AlpacaImageBytes.pdf) has been developed that sends data as a binary byte stream and can offer a 10 to 20 fold reduction in transfer time. + Returning an image from an Alpaca device as a JSON array is very inefficient and can result in delays of 30 or more seconds while client and device process and send the huge JSON string over the network. + A new, much faster mechanic called ImageBytes - [Alpaca ImageBytes Concepts and Implementation](https://www.ascom-standards.org/Developer/AlpacaImageBytes.pdf) has been developed that sends data as a binary byte stream and can offer a 10 to 20 fold reduction in transfer time. It is strongly recommended that Alpaca Cameras implement the ImageBytes mechanic as well as the JSON mechanic. parameters: - $ref: '#/components/parameters/device_number' @@ -1201,7 +1222,7 @@ paths: - Camera Specific Methods responses: '200': - $ref: '#/components/responses/ImageArrayResponse' + $ref: '#/components/responses/ImageArrayVariantResponse' '400': $ref: '#/components/responses/400' '500': @@ -1301,7 +1322,7 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/maxbinx': get: - summary: Maximum binning for the camera X axis + summary: Maximum binning for the camera X axis description: Returns the maximum allowed binning for the X camera axis parameters: - $ref: '#/components/parameters/device_number' @@ -1318,7 +1339,7 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/maxbiny': get: - summary: Maximum binning for the camera Y axis + summary: Maximum binning for the camera Y axis description: Returns the maximum allowed binning for the Y camera axis parameters: - $ref: '#/components/parameters/device_number' @@ -1495,7 +1516,7 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/offsetmin': get: - summary: Minimum offset value of that this camera supports + summary: Minimum offset value of that this camera supports description: Returns the Minimum value of offset. parameters: - $ref: '#/components/parameters/device_number' @@ -1512,7 +1533,7 @@ paths: $ref: '#/components/responses/500' '/camera/{device_number}/offsets': get: - summary: List of offset names supported by the camera + summary: List of offset names supported by the camera description: Returns the offsets supported by the camera. parameters: - $ref: '#/components/parameters/device_number' @@ -1543,7 +1564,7 @@ paths: - Camera Specific Methods responses: '200': - $ref: '#/components/responses/IntResponse' + $ref: '#/components/responses/PercentIntResponse' '400': $ref: '#/components/responses/400' '500': @@ -1911,7 +1932,21 @@ paths: '500': $ref: '#/components/responses/500' requestBody: - $ref: '#/components/requestBodies/putPulseGuide' + content: + application/x-www-form-urlencoded: + schema: + allOf: + - $ref: '#/components/schemas/AlpacaRequest' + - properties: + Direction: + $ref: '#/components/schemas/GuideDirection' + Duration: + description: Duration of movement in milli-seconds + type: integer + format: int32 + required: + - Direction + - Duration '/camera/{device_number}/startexposure': put: summary: Starts an exposure @@ -1969,7 +2004,7 @@ paths: '/covercalibrator/{device_number}/brightness': get: summary: Returns the current calibrator brightness - description: Returns the current calibrator brightness in the range 0 (completely off) to MaxBrightness (fully on) + description: Returns the current calibrator brightness in the range 0 (completely off) to MaxBrightness (fully on) parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -2005,7 +2040,7 @@ paths: $ref: '#/components/responses/500' '/covercalibrator/{device_number}/coverstate': get: - summary: Returns the state of the device cover" + summary: Returns the state of the device cover" description: >- Returns the state of the device cover, if present, otherwise returns "NotPresent". The cover state mode is specified as an integer value from the @@ -2026,7 +2061,7 @@ paths: '/covercalibrator/{device_number}/maxbrightness': get: summary: Returns the calibrator's maximum Brightness value. - description: The Brightness value that makes the calibrator deliver its maximum illumination. + description: The Brightness value that makes the calibrator deliver its maximum illumination. parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -2088,7 +2123,7 @@ paths: - Brightness '/covercalibrator/{device_number}/closecover': put: - summary: Initiates cover closing + summary: Initiates cover closing description: 'Initiates cover closing if a cover is present.' parameters: - $ref: '#/components/parameters/device_number' @@ -2369,7 +2404,7 @@ paths: - Dome Specific Methods responses: '200': - $ref: '#/components/responses/DomeShutterStatusResponse' + $ref: '#/components/responses/ShutterStateResponse' '400': $ref: '#/components/responses/400' '500': @@ -2984,7 +3019,7 @@ paths: - ObservingConditions Specific Methods responses: '200': - $ref: '#/components/responses/DoubleResponse' + $ref: '#/components/responses/PercentDoubleResponse' '400': $ref: '#/components/responses/400' '500': @@ -3767,7 +3802,7 @@ paths: Id: description: The device number (0 to MaxSwitch - 1) type: integer - format: uint32 + format: int32 State: description: The required control state (True or False) type: boolean @@ -3799,7 +3834,7 @@ paths: Id: description: The device number (0 to MaxSwitch - 1) type: integer - format: uint32 + format: int32 Name: description: The name of the device type: string @@ -3831,7 +3866,7 @@ paths: Id: description: The device number (0 to MaxSwitch - 1) type: integer - format: uint32 + format: int32 Value: description: 'The value to be set, between MinSwitchValue and MaxSwitchValue' type: number @@ -3866,8 +3901,6 @@ paths: summary: Returns the current mount alignment mode description: >- Returns the alignment mode of the mount (Alt/Az, Polar, German Polar). - The alignment mode is specified as an integer value from the - AlignmentModes Enum. parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -4324,7 +4357,7 @@ paths: '/telescope/{device_number}/declinationrate': get: summary: Returns the telescope's declination tracking rate. - description: 'The declination tracking rate (arcseconds per second, default = 0.0)' + description: 'The declination tracking rate (arcseconds per SI second, default = 0.0). Please note that rightascensionrate units are arcseconds per sidereal second.' parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -4340,7 +4373,7 @@ paths: $ref: '#/components/responses/500' put: summary: Sets the telescope's declination tracking rate. - description: Sets the declination tracking rate (arcseconds per second) + description: 'Sets the declination tracking rate (arcseconds per SI second). Please note that rightascensionrate units are arcseconds per sidereal second.' parameters: - $ref: '#/components/parameters/device_number' tags: @@ -4360,7 +4393,7 @@ paths: - $ref: '#/components/schemas/AlpacaRequest' - properties: DeclinationRate: - description: Declination tracking rate (arcseconds per second) + description: Declination tracking rate (arcseconds per SI second). Please note that rightascensionrate units are arcseconds per sidereal second. type: number format: double required: @@ -4428,7 +4461,7 @@ paths: - Telescope Specific Methods responses: '200': - $ref: '#/components/responses/EquatorialSystemResponse' + $ref: '#/components/responses/EquatorialCoordinateTypeResponse' '400': $ref: '#/components/responses/400' '500': @@ -4582,7 +4615,7 @@ paths: - Telescope Specific Methods responses: '200': - $ref: '#/components/responses/DoubleResponse' + $ref: '#/components/responses/RightAscensionResponse' '400': $ref: '#/components/responses/400' '500': @@ -4590,7 +4623,7 @@ paths: '/telescope/{device_number}/rightascensionrate': get: summary: Returns the telescope's right ascension tracking rate. - description: 'The right ascension tracking rate (arcseconds per second, default = 0.0)' + description: 'The right ascension tracking rate (arcseconds per sidereal second, default = 0.0). Please note that the declinationrate units are arcseconds per SI second.' parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -4606,7 +4639,7 @@ paths: $ref: '#/components/responses/500' put: summary: Sets the telescope's right ascension tracking rate. - description: Sets the right ascension tracking rate (arcseconds per second) + description: 'Sets the right ascension tracking rate (arcseconds per sidereal second). Please note that the declinationrate units are arcseconds per SI second.' parameters: - $ref: '#/components/parameters/device_number' tags: @@ -4626,7 +4659,7 @@ paths: - $ref: '#/components/schemas/AlpacaRequest' - properties: RightAscensionRate: - description: Right ascension tracking rate (arcseconds per second) + description: Right ascension tracking rate (arcseconds per sideral second). Please note that the declinationrate units are arcseconds per SI second. type: number format: double required: @@ -4634,7 +4667,8 @@ paths: '/telescope/{device_number}/sideofpier': get: summary: Returns the mount's pointing state. - description: Indicates the pointing state of the mount. + description: >- + Indicates the pointing state of the mount. parameters: - $ref: '#/components/parameters/device_number' - $ref: '#/components/parameters/ClientIDQuery' @@ -4643,7 +4677,7 @@ paths: - Telescope Specific Methods responses: '200': - $ref: '#/components/responses/SideOfPierResponse' + $ref: '#/components/responses/PierSideResponse' '400': $ref: '#/components/responses/400' '500': @@ -4670,7 +4704,7 @@ paths: - $ref: '#/components/schemas/AlpacaRequest' - properties: SideOfPier: - $ref: '#/components/schemas/SideOfPier' + $ref: '#/components/schemas/PierSide' required: - SideOfPier '/telescope/{device_number}/siderealtime': @@ -4910,7 +4944,7 @@ paths: - Telescope Specific Methods responses: '200': - $ref: '#/components/responses/DoubleResponse' + $ref: '#/components/responses/DeclinationResponse' '400': $ref: '#/components/responses/400' '500': @@ -5212,7 +5246,7 @@ paths: - Telescope Specific Methods responses: '200': - $ref: '#/components/responses/SideOfPierResponse' + $ref: '#/components/responses/PierSideResponse' '400': $ref: '#/components/responses/400' '500': @@ -5257,10 +5291,11 @@ paths: - $ref: '#/components/schemas/AlpacaRequest' - properties: Axis: - $ref: '#/components/schemas/Axis' + $ref: '#/components/schemas/TelescopeAxis' Rate: - description: The rate of motion (deg/sec) about the specified axis. + description: The rate of motion (deg/sec) about the specified axis type: number + default: 0 required: - Axis - Rate @@ -5301,7 +5336,22 @@ paths: '500': $ref: '#/components/responses/500' requestBody: - $ref: '#/components/requestBodies/putPulseGuide' + content: + application/x-www-form-urlencoded: + schema: + allOf: + - $ref: '#/components/schemas/AlpacaRequest' + - properties: + Direction: + $ref: '#/components/schemas/GuideDirection' + Duration: + description: The duration of the guide-rate motion (milliseconds) + type: integer + format: int32 + default: 5 + required: + - Direction + - Duration '/telescope/{device_number}/setpark': put: summary: Sets the telescope's park position @@ -5524,8 +5574,18 @@ components: required: true schema: type: string - default: telescope - pattern: '^[a-z]*$' + enum: + - camera + - covercalibrator + - dome + - filterwheel + - focuser + - observingconditions + - rotator + - safetymonitor + - switch + - telescope + device_number: name: device_number description: Zero based device number as set on the server (0 to 4294967295) @@ -5535,50 +5595,48 @@ components: type: integer format: uint32 default: 0 + minimum: 0 + maximum: 4294967295 ClientIDQuery: name: ClientID - description: Client's unique ID. (0 to 4294967295). The client should choose a value at start-up, e.g. a random value between 0 and 65535, and send this value on every transaction to help associate entries in device logs with this particular client. + description: Client's unique ID. (1 to 4294967295). The client should choose a value at start-up, e.g. a random value between 1 and 65535, and send this on every transaction to associate entries in device logs with this particular client. Zero is a reserved value that clients should not use. in: query required: false schema: type: integer format: uint32 default: 1 + minimum: 1 + maximum: 4294967295 ClientTransactionIDQuery: name: ClientTransactionID - description: Client's transaction ID. (0 to 4294967295). The client should start this count at 1 and increment by one on each successive transaction. This will aid associating entries in device logs with corresponding entries in client side logs. + description: Client's transaction ID. (1 to 4294967295). The client should start this count at 1 and increment by one on each successive transaction. This will aid associating entries in device logs with corresponding entries in client side logs. Zero is a reserved value that clients should not use. in: query required: false schema: type: integer format: uint32 default: 1234 + minimum: 1 + maximum: 4294967295 RightAscensionQuery: name: RightAscension - description: Right Ascension coordinate (0.0 to 23.99999999 hours) in: query required: true schema: - type: number - default: 3.0 - minimum: 0.0 - maximum: 23.9999999999 + $ref: '#/components/schemas/RightAscension' DeclinationQuery: name: Declination - description: Declination coordinate (-90.0 to +90.0 degrees) in: query required: true schema: - type: number - default: 0.0 - minimum: -90.0 - maximum: 90.0 + $ref: '#/components/schemas/Declination' AxisQuery: name: Axis in: query required: true schema: - $ref: '#/components/schemas/Axis' + $ref: '#/components/schemas/TelescopeAxis' SwitchNumberQuery: name: Id description: The device number (0 to MaxSwitch - 1) @@ -5586,8 +5644,10 @@ components: required: true schema: type: integer - format: uint32 + format: int32 default: 0 + minimum: 0 + maximum: 2147483647 requestBodies: put_devicetype_Devicenumber_commandblind: content: @@ -5650,45 +5710,12 @@ components: - $ref: '#/components/schemas/AlpacaRequest' - properties: RightAscension: - description: Right Ascension coordinate (hours) - type: number + $ref: '#/components/schemas/RightAscension' Declination: - description: Declination coordinate (degrees) - type: number + $ref: '#/components/schemas/Declination' required: - RightAscension - Declination - putPulseGuide: - content: - application/x-www-form-urlencoded: - schema: - allOf: - - $ref: '#/components/schemas/AlpacaRequest' - - properties: - Direction: - description: >- - The direction in which the guide-rate motion is to be made. - type: integer - format: int32 - default: 0 - enum: - - 0 - - 1 - - 2 - - 3 - x-enum-varnames: - - North - - South - - East - - West - Duration: - description: The duration of the guide-rate motion (milliseconds) - type: integer - format: int32 - default: 5 - required: - - Direction - - Duration responses: MethodResponse: description: Transaction complete or exception. @@ -5696,6 +5723,20 @@ components: application/json: schema: $ref: '#/components/schemas/AlpacaResponse' + '400': + description: 'The device did not understand which operation was being requested or insufficient information was given to complete the operation. Check the error message for detailed information.' + content: + text/plain: + schema: + type: string + description: Error message describing why the command cannot be processed + '500': + description: 'Server internal error. Check the error message for detailed information.' + content: + text/plain: + schema: + type: string + description: Error message describing why the command cannot be processed ImageArrayResponse: description: Transaction complete or exception. content: @@ -5707,34 +5748,97 @@ components: Type: type: integer format: int32 - enum: - - 0 - - 1 - - 2 - - 3 - x-enum-varnames: - - Unknown - - Short - - Integer - - Double - x-enum-descriptions: - - - - int16 - - int32 - - Double precision real number - Rank: + const: 2 + description: Must always be 2 representing a 32bit integer. + - oneOf: + - title: SinglePlane + description: Single-plane image array + properties: + Rank: + type: integer + format: int32 + const: 2 + Value: + type: array + items: + type: array + items: + type: integer + format: int32 + description: Integer values + - title: MultiPlane + description: Multi-plane image array + properties: + Rank: + type: integer + format: int32 + const: 3 + Value: + type: array + items: + type: array + items: + type: array + items: + type: integer + format: int32 + description: Integer values + ImageArrayVariantResponse: + description: Transaction complete or exception. + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/AlpacaResponse' + - properties: + Type: + description: Data type of image array pixel values. type: integer format: int32 - description: The array's rank, will be 2 (single plane image (monochrome)) or 3 (multi-plane image). - minimum: 2 - maximum: 3 - Value: - type: array - items: + oneOf: + - title: Unknown + description: Unknown data type. + const: 0 + - title: Short + description: 16-bit integer data type. + const: 1 + - title: Integer + description: 32-bit integer data type. + const: 2 + - title: Double + description: Double precision floating point data type. + const: 3 + - oneOf: + - title: SinglePlane + description: Single-plane image array + properties: + Rank: + type: integer + format: int32 + const: 2 + Value: type: array items: - type: number - description: Returned integer or double value + type: array + items: + type: number + description: Integer or double pixel values + - title: MultiPlane + description: Multi-plane image array + properties: + Rank: + type: integer + format: int32 + const: 3 + Value: + type: array + items: + type: array + items: + type: array + items: + type: number + description: Integer or double pixel values BoolResponse: description: Transaction complete or exception. content: @@ -5770,7 +5874,7 @@ components: type: integer format: int32 description: Returned integer value - CameraStateResponse: + IntArrayResponse: description: Transaction complete or exception. content: application/json: @@ -5779,24 +5883,12 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned camera state - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - x-enum-varnames: - - Idle - - Waiting - - Exposing - - Reading - - Download - - Error - SensorTypeResponse: + type: array + items: + type: integer + format: int32 + description: Array of integer values. + StringResponse: description: Transaction complete or exception. content: application/json: @@ -5805,31 +5897,9 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned sensor type - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - x-enum-varnames: - - Monochrome - - Color - - RGGB - - CMYG - - CMYG2 - - LRGB - x-enum-descriptions: - - Camera produces monochrome array with no Bayer encoding - - Camera produces color image directly, not requiring Bayer decoding - - Camera produces RGGB encoded Bayer array images - - Camera produces CMYG encoded Bayer array images - - Camera produces CMYG2 encoded Bayer array images - - Camera produces Kodak TRUESENSE LRGB encoded Bayer array images - DomeShutterStatusResponse: + type: string + description: String response from the device. + StringArrayResponse: description: Transaction complete or exception. content: application/json: @@ -5838,22 +5908,11 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned dome shutter status - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - x-enum-varnames: - - Open - - Closed - - Opening - - Closing - - Error - SideOfPierResponse: + type: array + items: + type: string + description: Array of string values. + AxisRatesResponse: description: Transaction complete or exception. content: application/json: @@ -5862,8 +5921,13 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - $ref: '#/components/schemas/SideOfPier' - CalibratorStatusResponse: + description: Array of AxisRate objects + type: array + minItems: 0 + uniqueItems: true + items: + $ref: '#/components/schemas/AxisRate' + DriveRateResponse: description: Transaction complete or exception. content: application/json: @@ -5872,31 +5936,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned side of pier - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - x-enum-varnames: - - NotPresent - - 'Off' - - NotReady - - Ready - - Unknown - - Error - x-enum-descriptions: - - This device does not have a calibration capability. - - The calibrator is off. - - The calibrator is stabilising or is not yet in the commanded state. - - The calibrator is ready for use. - - The calibrator state is unknown. - - The calibrator encountered an error when changing state. - CoverStatusResponse: + $ref: '#/components/schemas/DriveRate' + DriveRatesResponse: description: Transaction complete or exception. content: application/json: @@ -5905,31 +5946,13 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned side of pier - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - - 5 - x-enum-varnames: - - NotPresent - - Closed - - Moving - - Open - - Unknown - - Error - x-enum-descriptions: - - This device does not have a cover that can be closed independently. - - The cover is closed. - - The cover is moving to a new position. - - The cover is open. - - The state of the cover is unknown. - - The device encountered an error when changing state. - AlignmentModeResponse: + description: Array of DriveRate values + type: array + minItems: 1 + uniqueItems: true + items: + $ref: '#/components/schemas/DriveRate' + RightAscensionResponse: description: Transaction complete or exception. content: application/json: @@ -5938,22 +5961,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned side of pier - enum: - - 0 - - 1 - - 2 - x-enum-varnames: - - AltAz - - Polar - - GermanPolar - x-enum-descriptions: - - Altitude-Azimuth alignment. - - Polar (equatorial) mount other than German equatorial. - - German equatorial mount. - EquatorialSystemResponse: + $ref: '#/components/schemas/RightAscension' + DeclinationResponse: description: Transaction complete or exception. content: application/json: @@ -5962,28 +5971,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: integer - format: int32 - description: Returned side of pier - enum: - - 0 - - 1 - - 2 - - 3 - - 4 - x-enum-varnames: - - Other - - Topocentric - - J2000 - - J2050 - - B1950 - x-enum-descriptions: - - Custom or unknown equinox and/or reference frame. - - Topocentric coordinates. Coordinates of the object at the current date having allowed for annual aberration, precession and nutation. This is the most common coordinate type for amateur telescopes. - - J2000 equator/equinox. Coordinates of the object at mid-day on 1st January 2000, ICRS reference frame. - - J2050 equator/equinox, ICRS reference frame. - - B1950 equinox, FK4 reference frame. - IntArrayResponse: + $ref: '#/components/schemas/Declination' + PierSideResponse: description: Transaction complete or exception. content: application/json: @@ -5992,12 +5981,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: array - items: - type: integer - format: int32 - description: Array of integer values. - StringResponse: + $ref: '#/components/schemas/PierSide' + TelescopeUTCDateResponse: description: Transaction complete or exception. content: application/json: @@ -6006,9 +5991,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: string - description: String response from the device. - TelescopeUTCDateResponse: + $ref: '#/components/schemas/TelescopeUTCDate' + LastExposureStartTimeResponse: description: Transaction complete or exception. content: application/json: @@ -6017,8 +6001,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - $ref: '#/components/schemas/TelescopeUTCDate' - LastExposureStartTimeResponse: + $ref: '#/components/schemas/LastExposureStartTime' + CameraStateResponse: description: Transaction complete or exception. content: application/json: @@ -6027,8 +6011,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - $ref: '#/components/schemas/LastExposureStartTime' - StringArrayResponse: + $ref: '#/components/schemas/CameraState' + SensorTypeResponse: description: Transaction complete or exception. content: application/json: @@ -6037,11 +6021,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - type: array - items: - type: string - description: Array of string values. - AxisRatesResponse: + $ref: '#/components/schemas/SensorType' + ShutterStateResponse: description: Transaction complete or exception. content: application/json: @@ -6050,13 +6031,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - description: Array of AxisRate objects - type: array - minItems: 0 - uniqueItems: true - items: - $ref: '#/components/schemas/AxisRate' - DriveRateResponse: + $ref: '#/components/schemas/ShutterState' + CalibratorStatusResponse: description: Transaction complete or exception. content: application/json: @@ -6065,8 +6041,8 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - $ref: '#/components/schemas/DriveRate' - DriveRatesResponse: + $ref: '#/components/schemas/CalibratorStatus' + CoverStatusResponse: description: Transaction complete or exception. content: application/json: @@ -6075,26 +6051,55 @@ components: - $ref: '#/components/schemas/AlpacaResponse' - properties: Value: - description: Array of DriveRate values - type: array - minItems: 1 - uniqueItems: true - items: - $ref: '#/components/schemas/DriveRate' - '400': - description: 'Method or parameter value error, check error message' + $ref: '#/components/schemas/CoverStatus' + AlignmentModeResponse: + description: Transaction complete or exception. content: - text/plain: + application/json: schema: - type: string - description: Error message describing why the command cannot be processed - '500': - description: 'Server internal error, check error message' + allOf: + - $ref: '#/components/schemas/AlpacaResponse' + - properties: + Value: + $ref: '#/components/schemas/AlignmentMode' + EquatorialCoordinateTypeResponse: + description: Transaction complete or exception. content: - text/plain: + application/json: schema: - type: string - description: Error message describing why the command cannot be processed + allOf: + - $ref: '#/components/schemas/AlpacaResponse' + - properties: + Value: + $ref: '#/components/schemas/EquatorialCoordinateType' + PercentIntResponse: + description: Transaction complete or exception. + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/AlpacaResponse' + - properties: + Value: + type: integer + format: int32 + minimum: 0 + maximum: 100 + description: Returned percentage value between 0 and 100. + PercentDoubleResponse: + description: Transaction complete or exception. + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/AlpacaResponse' + - properties: + Value: + type: number + format: double + minimum: 0 + maximum: 100 + description: Returned percentage value between 0 and 100. schemas: AxisRate: description: Axis rate object @@ -6119,92 +6124,278 @@ components: type: object properties: ClientID: - description: Client's unique ID. (0 to 4294967295). The client should choose a value at start-up, e.g. a random value between 0 and 65535, and send this value on every transaction to help associate entries in device logs with this particular client. + description: Client's unique ID. (1 to 4294967295). The client should choose a value at start-up, e.g. a random value between 1 and 65535, and send this on every transaction to associate entries in device logs with this particular client. Zero is a reserved value that clients should not use. type: integer format: uint32 + minimum: 1 + maximum: 4294967295 ClientTransactionID: - description: Client's transaction ID. (0 to 4294967295). The client should start this count at 1 and increment by one on each successive transaction. This will aid associating entries in device logs with corresponding entries in client side logs. + description: Client's transaction ID. (1 to 4294967295). The client should start this count at 1 and increment by one on each successive transaction. This will aid associating entries in device logs with corresponding entries in client side logs. Zero is a reserved value that clients should not use. type: integer format: uint32 + minimum: 1 + maximum: 4294967295 AlpacaResponse: type: object properties: ClientTransactionID: type: integer format: uint32 - description: Client's transaction ID (0 to 4294967295), as supplied by the client in the command request. + minimum: 0 + maximum: 4294967295 + description: Client's transaction ID (1 to 4294967295), as supplied by the client in the command request, or zero indicating that a valid value was not supplied. ServerTransactionID: type: integer format: uint32 - description: Server's transaction ID (0 to 4294967295), should be unique for each client transaction so that log messages on the client can be associated with logs on the device. + minimum: 1 + maximum: 4294967295 + description: Server's transaction ID (1 to 4294967295), must be unique for each client transaction so that log messages on the client can be associated with logs on the device. The server should start this count at 1 and increment by one on each successive transaction. ErrorNumber: type: integer format: int32 - description: >- - Zero for a successful transaction, or a non-zero integer (-2147483648 to 2147483647) if the device encountered an issue. Devices must use ASCOM reserved error numbers whenever appropriate so that clients can take informed actions. E.g. returning 0x401 (1025) to indicate that an invalid value was received (see Alpaca API definition and developer documentation for further information). + description: Zero for a successful transaction, or a non-zero integer (0x400 to 0xFFF) if the device encountered an issue. + oneOf: + - title: Success + description: Successful transaction. + const: 0 + - title: Error + description: > + Error encountered. + + Devices must use ASCOM reserved error numbers whenever appropriate so that clients can take informed actions. E.g. returning 0x401 (1025) to indicate that an invalid value was received (see Alpaca API definition and developer documentation for further information). + minimum: 0x400 + maximum: 0xFFF ErrorMessage: type: string description: Empty string for a successful transaction, or a message describing the issue that was encountered. If an error message is returned, a non zero error number must also be returned. DriveRate: - description: >- - DriveRate enum corresponding to one of the standard drive rates. + description: Integer value corresponding to one of the standard drive rates. type: integer format: int32 - enum: - - 0 - - 1 - - 2 - - 3 - x-enum-varnames: - - Sidereal - - Lunar - - Solar - - King - x-enum-descriptions: - - 15.041 arcseconds per second - - 14.685 arcseconds per second - - 15.0 arcseconds per second - - 15.0369 arcseconds per second - SideOfPier: + oneOf: + - title: Sidereal + description: Sidereal tracking rate (15.041 arcseconds per second). + const: 0 + - title: Lunar + description: Lunar tracking rate (14.685 arcseconds per second). + const: 1 + - title: Solar + description: Solar tracking rate (15.0 arcseconds per second). + const: 2 + - title: King + description: King tracking rate (15.0369 arcseconds per second). + const: 3 + TelescopeAxis: + description: The axis about which rate information is desired. type: integer format: int32 - description: Returned side of pier - enum: - - 0 - - 1 - - -1 - x-enum-varnames: - - East - - West - - Unknown - x-enum-descriptions: - - Normal pointing state - Mount on the East side of pier (looking West). - - Through the pole pointing state - Mount on the West side of pier (looking East). - - Unknown or indeterminate. - Axis: - description: The axis of mount rotation. + oneOf: + - title: Primary + const: 0 + - title: Secondary + const: 1 + - title: Tertiary + const: 2 + RightAscension: + type: number + description: Right Ascension coordinate (0.0 to 23.99999999 hours) + default: 3.0 + minimum: 0.0 + maximum: 23.9999999999 + Declination: + description: Declination coordinate (-90.0 to +90.0 degrees) + type: number + default: 0.0 + minimum: -90.0 + maximum: 90.0 + PierSide: type: integer format: int32 - default: 0 - enum: - - 0 - - 1 - - 2 - x-enum-varnames: - - Primary - - Secondary - - Tertiary + description: Returned side of pier + oneOf: + - title: East + description: Normal pointing state - Mount on the East side of pier (looking West). + const: 0 + - title: West + description: Through the pole pointing state - Mount on the West side of pier (looking East). + const: 1 + - title: Unknown + description: Unknown or indeterminate. + const: -1 TelescopeUTCDate: type: string - format: date + # The described date format is the same as the standard OpenAPI format. + # https://swagger.io/docs/specification/data-models/data-types/ + format: date-time + pattern: '^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?Z$' description: >- The UTC date/time of the telescope's internal clock in ISO 8601 format including fractional seconds. The general format (in Microsoft custom date format style) is yyyy-MM-ddTHH:mm:ss.fffffffZ, e.g. 2016-03-04T17:45:31.1234567Z or 2016-11-14T07:03:08.1234567Z. Please note the compulsary trailing Z indicating the 'Zulu', UTC time zone. - date-format: '[year]-[month]-[day]T[hour]:[minute]:[second][optional [.[subsecond]]]Z' LastExposureStartTime: type: string - format: date + # Custom format for FITS standard date-time. + # Not defined in standard OpenAPI, but used by downstream tooling processing this YAML. + format: date-time-fits + pattern: '^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?$' description: >- The UTC date/time of exposure start in the FITS-standard CCYY-MM-DDThh:mm:ss[.sss...] format. - date-format: '[year]-[month]-[day]T[hour]:[minute]:[second][optional [.[subsecond]]]' + CameraState: + description: Camera state + type: integer + format: int32 + oneOf: + - title: Idle + description: At idle state, available to start exposure. + const: 0 + - title: Waiting + description: Exposure started but waiting (for shutter, trigger, filter wheel, etc.). + const: 1 + - title: Exposing + description: Exposure currently in progress. + const: 2 + - title: Reading + description: Sensor array is being read out (digitized). + const: 3 + - title: Download + description: Downloading data to host. + const: 4 + - title: Error + description: Camera error condition serious enough to prevent further operations. + const: 5 + GuideDirection: + description: The direction in which the guide-rate motion is to be made. + type: integer + format: int32 + oneOf: + - title: North + const: 0 + - title: South + const: 1 + - title: East + const: 2 + - title: West + const: 3 + SensorType: + description: The type of sensor in the camera. + type: integer + format: int32 + oneOf: + - title: Monochrome + description: Single-plane monochrome sensor. + const: 0 + - title: Color + description: Multiple-plane color sensor. + const: 1 + - title: RGGB + description: Single-plane Bayer matrix RGGB sensor. + const: 2 + - title: CMYG + description: Single-plane Bayer matrix CMYG sensor. + const: 3 + - title: CMYG2 + description: Single-plane Bayer matrix CMYG2 sensor. + const: 4 + - title: LRGB + description: Single-plane Bayer matrix LRGB sensor. + const: 5 + ShutterState: + description: Indicates the current state of the shutter or roof. + type: integer + format: int32 + oneOf: + - title: Open + description: The shutter or roof is open. + const: 0 + - title: Closed + description: The shutter or roof is closed. + const: 1 + - title: Opening + description: The shutter or roof is opening. + const: 2 + - title: Closing + description: The shutter or roof is closing. + const: 3 + - title: Error + description: The shutter or roof has encountered a problem. + const: 4 + CalibratorStatus: + description: Describes the state of a calibration device. + type: integer + format: int32 + oneOf: + - title: NotPresent + description: This device does not have a calibration capability. + const: 0 + - title: Off + description: The calibrator is off. + const: 1 + - title: NotReady + description: The calibrator is stabilising or is not yet in the commanded state. + const: 2 + - title: Ready + description: The calibrator is ready for use. + const: 3 + - title: Unknown + description: The calibrator state is unknown. + const: 4 + - title: Error + description: The calibrator encountered an error when changing state. + const: 5 + CoverStatus: + description: Describes the state of a telescope cover. + type: integer + format: int32 + oneOf: + - title: NotPresent + description: This device does not have a cover that can be closed independently. + const: 0 + - title: Closed + description: The cover is closed. + const: 1 + - title: Moving + description: The cover is moving to a new position. + const: 2 + - title: Open + description: The cover is open. + const: 3 + - title: Unknown + description: The state of the cover is unknown. + const: 4 + - title: Error + description: The device encountered an error when changing state. + const: 5 + AlignmentMode: + description: The alignment mode (geometry) of the mount. + type: integer + format: int32 + oneOf: + - title: AltAz + description: Altitude-Azimuth type mount. + const: 0 + - title: Polar + description: Polar (equatorial) mount other than German equatorial. + const: 1 + - title: GermanPolar + description: German equatorial type mount. + const: 2 + EquatorialCoordinateType: + description: The equatorial coordinate system used by the mount. + type: integer + format: int32 + oneOf: + - title: Other + description: Custom or unknown equinox and/or reference frame. + const: 0 + - title: Topocentric + description: Topocentric coordinates. + const: 1 + - title: J2000 + description: J2000 equator/equinox. + const: 2 + - title: J2050 + description: J2050 equator/equinox. + const: 3 + - title: B1950 + description: B1950 equinox, FK4 reference frame. + const: 4 diff --git a/src/api/autogen/index.ts b/src/api/autogen/index.ts index a5c1eae..0c676ed 100644 --- a/src/api/autogen/index.ts +++ b/src/api/autogen/index.ts @@ -6,18 +6,21 @@ import { toPascalCase as toTypeName, toPascalCase } from 'js-convert-case'; -import { OpenAPIV3 } from 'openapi-types'; +import { OpenAPIV3_1, OpenAPIV3 } from 'openapi-types'; import * as assert from 'assert/strict'; import { getCanonicalNames } from './xml-names.js'; import { rustKeywords } from './rust-keywords.js'; import { isDeepStrictEqual } from 'util'; import { fileURLToPath } from 'url'; +type ReferenceObject = OpenAPIV3.ReferenceObject; +type SchemaObject = OpenAPIV3_1.SchemaObject; + process.chdir(fileURLToPath(new URL('./', import.meta.url))); let api = (await openapi.parse( './AlpacaDeviceAPI_v1.yaml' -)) as OpenAPIV3.Document; +)) as OpenAPIV3_1.Document; let _refs = await openapi.resolve(api); let canonicalNames = await getCanonicalNames('{device_type}'); @@ -59,19 +62,19 @@ function toPropName(name: string) { return name; } -function isRef(maybeRef: any): maybeRef is OpenAPIV3.ReferenceObject { +function isRef(maybeRef: any): maybeRef is ReferenceObject { return maybeRef != null && '$ref' in maybeRef; } -function getRef(ref: OpenAPIV3.ReferenceObject): unknown { +function getRef(ref: ReferenceObject): unknown { return _refs.get(ref.$ref); } -function resolveMaybeRef(maybeRef: T | OpenAPIV3.ReferenceObject): T { +function resolveMaybeRef(maybeRef: T | ReferenceObject): T { return isRef(maybeRef) ? (getRef(maybeRef) as T) : maybeRef; } -function nameAndTarget(ref: T | OpenAPIV3.ReferenceObject) { +function nameAndTarget(ref: T | ReferenceObject) { if (isRef(ref)) { return { name: toTypeName(ref.$ref.match(/([^/]+)$/)![1]), @@ -101,12 +104,12 @@ let types = new Map< type: RegisteredType; } >(); -let typeBySchema = new WeakMap(); +let typeBySchema = new WeakMap(); function registerType( devicePath: string, - schema: OpenAPIV3.SchemaObject, - createType: (schema: OpenAPIV3.SchemaObject) => T | RustType + schema: SchemaObject, + createType: (schema: SchemaObject) => T | RustType ): RustType { let rustyType = getOrSet(typeBySchema, schema, schema => { let type = createType(schema); @@ -204,7 +207,7 @@ interface EnumType extends RegisteredTypeBase { interface DateType extends RegisteredTypeBase { kind: 'Date'; - format: string; + trailingZ: boolean; } interface DeviceMethod { @@ -226,12 +229,8 @@ interface Device { let devices: Map = new Map(); function withContext(context: string, fn: () => T) { - try { - return fn(); - } catch (e) { - (e as Error).message = `in ${context}:\n${(e as Error).message}`; - throw e; - } + Object.defineProperty(fn, 'name', { value: context }); + return fn(); } function handleIntFormat(format: string | undefined): RustType { @@ -259,7 +258,7 @@ function handleObjectProps( { properties = err('Missing properties'), required = [] - }: Pick + }: Pick ) { let objProperties: ObjectType['properties'] = new Map(); for (let [propName, propSchema] of Object.entries(properties)) { @@ -281,49 +280,37 @@ function handleObjectProps( function handleType( devicePath: string, name: string, - schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject = err( + schema: SchemaObject | ReferenceObject = err( 'Missing schema' ) ): RustType { return withContext(name, () => { ({ name = name, target: schema } = nameAndTarget(schema)); - if (schema.enum) { - return registerType(devicePath, schema, schema => { - assert.equal(schema.type, 'integer'); - let enumType: EnumType = { - kind: 'Enum', - name, - doc: getDoc(schema), - baseType: handleIntFormat(schema.format), - variants: new Map() - }; - let { - 'x-enum-varnames': names = err('Missing x-enum-varnames'), - 'x-enum-descriptions': descriptions = [] - } = schema as any; - assert.ok(Array.isArray(names)); - assert.ok(Array.isArray(descriptions)); - for (let [i, value] of schema.enum!.entries()) { - let name = names[i]; - assertString(name); - let doc = descriptions[i]; - if (doc === null) { - doc = undefined; - } - if (doc !== undefined) { - assertString(doc); - } - set(enumType.variants, name, { - name, - doc, - value - }); - } - return enumType; - }); - } switch (schema.type) { case 'integer': + if (schema.oneOf) { + return registerType(devicePath, schema, schema => { + let enumType: EnumType = { + kind: 'Enum', + name, + doc: getDoc(schema), + baseType: handleIntFormat(schema.format), + variants: new Map() + }; + assert.ok(Array.isArray(schema.oneOf)); + for (let entry of schema.oneOf) { + assert.ok(!isRef(entry)); + assert.ok(Number.isSafeInteger(entry.const)); + let name = entry.title ?? err('Missing title'); + set(enumType.variants, name, { + name, + doc: entry.description, + value: entry.const + }); + } + return enumType; + }); + } return handleIntFormat(schema.format); case 'array': return rusty( @@ -332,12 +319,12 @@ function handleType( case 'number': return rusty('f64'); case 'string': - if (schema.format === 'date') { + if (schema.format === 'date-time' || schema.format === 'date-time-fits') { let formatter = registerType(devicePath, schema, schema => ({ name, doc: getDoc(schema), kind: 'Date', - format: (schema as any)['date-format'] + trailingZ: schema.format === 'date-time', })); return rusty('std::time::SystemTime', `${formatter}`); } @@ -360,7 +347,7 @@ function handleType( function handleOptType( devicePath: string, name: string, - schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined, + schema: SchemaObject | ReferenceObject | undefined, required: boolean ): RustType { let type = handleType(devicePath, name, schema); @@ -373,9 +360,9 @@ function handleContent( baseKind: 'Request' | 'Response', contentType: string, body: - | OpenAPIV3.RequestBodyObject - | OpenAPIV3.ResponseObject - | OpenAPIV3.ReferenceObject = err('Missing content') + | OpenAPIV3_1.RequestBodyObject + | OpenAPIV3_1.ResponseObject + | ReferenceObject = err('Missing content') ): RustType { let name = `${prefixName}${baseKind}`; return withContext(name, () => { @@ -397,6 +384,10 @@ function handleContent( name = name.slice(0, -baseKind.length); } return registerType(devicePath, schema, schema => { + if (name === 'ImageArray') { + return rusty('ImageArray'); + } + doc = getDoc(schema) ?? doc; let { allOf: [base, extension, ...otherItemsInAllOf] = err('Missing allOf'), @@ -453,8 +444,8 @@ function handleResponse( devicePath: string, prefixName: string, { - responses: { 200: success, 400: error400, 500: error500, ...otherResponses } - }: OpenAPIV3.OperationObject + responses: { 200: success, 400: error400, 500: error500, ...otherResponses } = err('Missing responses') + }: OpenAPIV3_1.OperationObject ) { assertEmpty(otherResponses, 'Unexpected response status codes'); return handleContent( @@ -467,7 +458,7 @@ function handleResponse( } for (let [path, methods = err('Missing methods')] of Object.entries( - api.paths + api.paths ?? err('Missing paths') )) { // ImageArrayVariant is a semi-deprecated endpoint. Its handling is somewhat // complicated, so just skip it until someone requests to implement it. @@ -671,9 +662,16 @@ use macro_rules_attribute::apply; use num_enum::{IntoPrimitive, TryFromPrimitive}; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; +use time::format_description::well_known::Iso8601; pub use server_info::*; +#[cfg(feature = "camera")] +mod image_array; + +#[cfg(feature = "camera")] +pub use image_array::*; + ${stringifyIter(types, ({ features, type }) => { let cfgs = Array.from(features, feature => `feature = "${feature}"`).join( ', ' @@ -692,21 +690,6 @@ ${stringifyIter(types, ({ features, type }) => { cfg = `#[cfg(${cfgs})]`; } - if (type.name === 'ImageArray') { - // Override with a better implementation. - return ` - ${cfg} - mod image_array; - - ${cfg} - pub use image_array::*; - `; - } - - if (type.name === 'ImageArrayType') { - return ''; - } - switch (type.kind) { case 'Request': return ''; @@ -756,6 +739,8 @@ ${stringifyIter(types, ({ features, type }) => { `; } case 'Date': { + let format = `Iso8601::DATE_TIME${type.trailingZ ? '_OFFSET' : ''}`; + return ` ${stringifyDoc(type.doc)} ${cfg} @@ -781,14 +766,10 @@ ${stringifyIter(types, ({ features, type }) => { ${cfg} impl ${type.name} { - const FORMAT: &'static [time::format_description::FormatItem<'static>] = time::macros::format_description!("${ - type.format - }"); - fn serialize(value: &time::OffsetDateTime, serializer: S) -> Result { value .to_offset(time::UtcOffset::UTC) - .format(Self::FORMAT) + .format(&${format}) .map_err(serde::ser::Error::custom)? .serialize(serializer) } @@ -804,9 +785,7 @@ ${stringifyIter(types, ({ features, type }) => { } fn visit_str(self, value: &str) -> Result { - match time::PrimitiveDateTime::parse(value, ${ - type.name - }::FORMAT) { + match time::PrimitiveDateTime::parse(value, &${format}) { Ok(time) => Ok(time.assume_utc()), Err(err) => Err(serde::de::Error::custom(err)), } diff --git a/src/api/autogen/package.json b/src/api/autogen/package.json index 21e69c5..080ce3f 100644 --- a/src/api/autogen/package.json +++ b/src/api/autogen/package.json @@ -4,7 +4,7 @@ "private": true, "type": "module", "scripts": { - "generate": "node --no-warnings=ExperimentalWarning --loader=ts-node/esm index.ts" + "generate": "node --enable-source-maps --no-warnings=ExperimentalWarning --loader=ts-node/esm index.ts" }, "keywords": [], "author": "Ingvar Stepanyan (https://rreverser.com/)", @@ -14,9 +14,9 @@ "@types/node": "^18.8.2", "@types/xml2js": "^0.4.11", "js-convert-case": "^4.2.0", - "openapi-types": "^12.0.2", + "openapi-types": "12.1.3", "ts-node": "^10.9.1", - "typescript": "^4.8.4", + "typescript": "5.5.4", "xml2js": "^0.4.23" } } diff --git a/src/api/autogen/pnpm-lock.yaml b/src/api/autogen/pnpm-lock.yaml index 9f04447..3581f5a 100644 --- a/src/api/autogen/pnpm-lock.yaml +++ b/src/api/autogen/pnpm-lock.yaml @@ -1,384 +1,261 @@ -lockfileVersion: '6.0' - -dependencies: - '@readme/openapi-parser': - specifier: ^2.2.0 - version: 2.2.0(openapi-types@12.0.2) - '@types/node': - specifier: ^18.8.2 - version: 18.8.2 - '@types/xml2js': - specifier: ^0.4.11 - version: 0.4.11 - js-convert-case: - specifier: ^4.2.0 - version: 4.2.0 - openapi-types: - specifier: ^12.0.2 - version: 12.0.2 - ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.8.2)(typescript@4.8.4) - typescript: - specifier: ^4.8.4 - version: 4.8.4 - xml2js: - specifier: ^0.4.23 - version: 0.4.23 +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@readme/openapi-parser': + specifier: ^2.2.0 + version: 2.2.0(openapi-types@12.1.3) + '@types/node': + specifier: ^18.8.2 + version: 18.8.2 + '@types/xml2js': + specifier: ^0.4.11 + version: 0.4.11 + js-convert-case: + specifier: ^4.2.0 + version: 4.2.0 + openapi-types: + specifier: 12.1.3 + version: 12.1.3 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@18.8.2)(typescript@5.5.4) + typescript: + specifier: 5.5.4 + version: 5.5.4 + xml2js: + specifier: ^0.4.23 + version: 0.4.23 packages: - /@apidevtools/openapi-schemas@2.1.0: + '@apidevtools/openapi-schemas@2.1.0': resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} engines: {node: '>=10'} - dev: false - /@apidevtools/swagger-methods@3.0.2: + '@apidevtools/swagger-methods@3.0.2': resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} - dev: false - /@babel/code-frame@7.18.6: + '@babel/code-frame@7.18.6': resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.18.6 - dev: false - /@babel/helper-validator-identifier@7.19.1: + '@babel/helper-validator-identifier@7.19.1': resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - dev: false - /@babel/highlight@7.18.6: + '@babel/highlight@7.18.6': resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.19.1 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - /@babel/runtime@7.19.0: + '@babel/runtime@7.19.0': resolution: {integrity: sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.9 - dev: false - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: false - /@humanwhocodes/momoa@2.0.4: + '@humanwhocodes/momoa@2.0.4': resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} - dev: false - /@jridgewell/resolve-uri@3.1.1: + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: false - /@jridgewell/sourcemap-codec@1.4.15: + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: false - /@jridgewell/trace-mapping@0.3.9: + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - /@jsdevtools/ono@7.1.3: + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} - dev: false - /@readme/better-ajv-errors@1.5.0(ajv@8.11.0): + '@readme/better-ajv-errors@1.5.0': resolution: {integrity: sha512-dJLAlfN5ahAb6J5t+zCv0YeJsf4mrRHllwBb6pIYZa4yfFKs3lOSAN+i+ChebbpnqCkw7IrwzPz9vzk8p5mCEw==} engines: {node: '>=14'} peerDependencies: ajv: 4.11.8 - 8 - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.19.0 - '@humanwhocodes/momoa': 2.0.4 - ajv: 8.11.0 - chalk: 4.1.2 - json-to-ast: 2.1.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: false - /@readme/json-schema-ref-parser@1.1.0: + '@readme/json-schema-ref-parser@1.1.0': resolution: {integrity: sha512-T0DxTMSEfOQHAlpI68LqYCwSFfP3u0w7E6zXWf16YphmAgWSOhLKuvnMSLXAlh27uxwclRekIvQf8AAUoQSDiw==} - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.11 - call-me-maybe: 1.0.1 - js-yaml: 4.1.0 - dev: false - /@readme/openapi-parser@2.2.0(openapi-types@12.0.2): + '@readme/openapi-parser@2.2.0': resolution: {integrity: sha512-t5E+cCln50GSsOx0GuT+GLnkG6Ux7I6V1vWJ48jvW7Rxs6jMkJrVYMu5MIhJ3ihylrFspxJ6aSACzj7yVr6Dow==} engines: {node: '>=14'} peerDependencies: openapi-types: '>=7' - dependencies: - '@apidevtools/openapi-schemas': 2.1.0 - '@apidevtools/swagger-methods': 3.0.2 - '@jsdevtools/ono': 7.1.3 - '@readme/better-ajv-errors': 1.5.0(ajv@8.11.0) - '@readme/json-schema-ref-parser': 1.1.0 - ajv: 8.11.0 - ajv-draft-04: 1.0.0(ajv@8.11.0) - call-me-maybe: 1.0.1 - openapi-types: 12.0.2 - dev: false - /@tsconfig/node10@1.0.9: + '@tsconfig/node10@1.0.9': resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: false - /@tsconfig/node12@1.0.11: + '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false - /@tsconfig/node14@1.0.3: + '@tsconfig/node14@1.0.3': resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false - /@tsconfig/node16@1.0.4: + '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: false - /@types/json-schema@7.0.11: + '@types/json-schema@7.0.11': resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - dev: false - /@types/node@18.8.2: + '@types/node@18.8.2': resolution: {integrity: sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==} - dev: false - /@types/xml2js@0.4.11: + '@types/xml2js@0.4.11': resolution: {integrity: sha512-JdigeAKmCyoJUiQljjr7tQG3if9NkqGUgwEUqBvV0N7LM4HyQk7UXCnusRa1lnvXAEYJ8mw8GtZWioagNztOwA==} - dependencies: - '@types/node': 18.8.2 - dev: false - /acorn-walk@8.2.0: + acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - dev: false - /acorn@8.8.2: + acorn@8.8.2: resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true - dev: false - /ajv-draft-04@1.0.0(ajv@8.11.0): + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: ajv: ^8.5.0 peerDependenciesMeta: ajv: optional: true - dependencies: - ajv: 8.11.0 - dev: false - /ajv@8.11.0: + ajv@8.11.0: resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - /ansi-styles@3.2.1: + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - /ansi-styles@4.3.0: + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - /arg@4.1.3: + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: false - /argparse@2.0.1: + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: false - /call-me-maybe@1.0.1: + call-me-maybe@1.0.1: resolution: {integrity: sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==} - dev: false - /chalk@2.4.2: + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - /chalk@4.1.2: + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - /code-error-fragment@0.0.230: + code-error-fragment@0.0.230: resolution: {integrity: sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==} engines: {node: '>= 4'} - dev: false - /color-convert@1.9.3: + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - /color-convert@2.0.1: + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - /color-name@1.1.3: + color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false - /color-name@1.1.4: + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - /create-require@1.1.1: + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false - /diff@4.0.2: + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: false - /escape-string-regexp@1.0.5: + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: false - /fast-deep-equal@3.1.3: + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - /grapheme-splitter@1.0.4: + grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: false - /has-flag@3.0.0: + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: false - /has-flag@4.0.0: + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: false - /js-convert-case@4.2.0: + js-convert-case@4.2.0: resolution: {integrity: sha512-i4mHCxiBNj6ajjMnZnC70qAOMA8gb+YgYipy2VR7a+Q5EBgEQ2/SgSAUBdNEyObk++B4AIUiFWeDEX2ggOd8cQ==} - dev: false - /js-tokens@4.0.0: + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - /js-yaml@4.1.0: + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - dependencies: - argparse: 2.0.1 - dev: false - /json-schema-traverse@1.0.0: + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false - /json-to-ast@2.1.0: + json-to-ast@2.1.0: resolution: {integrity: sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==} engines: {node: '>= 4'} - dependencies: - code-error-fragment: 0.0.230 - grapheme-splitter: 1.0.4 - dev: false - /jsonpointer@5.0.1: + jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - dev: false - /leven@3.1.0: + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - dev: false - /make-error@1.3.6: + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: false - /openapi-types@12.0.2: - resolution: {integrity: sha512-GuTo7FyZjOIWVhIhQSWJVaws6A82sWIGyQogxxYBYKZ0NBdyP2CYSIgOwFfSB+UVoPExk/YzFpyYitHS8KVZtA==} - dev: false + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - /punycode@2.1.1: + punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - dev: false - /regenerator-runtime@0.13.9: + regenerator-runtime@0.13.9: resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} - dev: false - /require-from-string@2.0.2: + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - dev: false - /sax@1.2.4: + sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: false - /supports-color@5.5.0: + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - /supports-color@7.2.0: + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - /ts-node@10.9.1(@types/node@18.8.2)(typescript@4.8.4): + ts-node@10.9.1: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -391,6 +268,223 @@ packages: optional: true '@swc/wasm': optional: true + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + xml2js@0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + +snapshots: + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@babel/code-frame@7.18.6': + dependencies: + '@babel/highlight': 7.18.6 + + '@babel/helper-validator-identifier@7.19.1': {} + + '@babel/highlight@7.18.6': + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/runtime@7.19.0': + dependencies: + regenerator-runtime: 0.13.9 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@humanwhocodes/momoa@2.0.4': {} + + '@jridgewell/resolve-uri@3.1.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jsdevtools/ono@7.1.3': {} + + '@readme/better-ajv-errors@1.5.0(ajv@8.11.0)': + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/runtime': 7.19.0 + '@humanwhocodes/momoa': 2.0.4 + ajv: 8.11.0 + chalk: 4.1.2 + json-to-ast: 2.1.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@readme/json-schema-ref-parser@1.1.0': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.11 + call-me-maybe: 1.0.1 + js-yaml: 4.1.0 + + '@readme/openapi-parser@2.2.0(openapi-types@12.1.3)': + dependencies: + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + '@jsdevtools/ono': 7.1.3 + '@readme/better-ajv-errors': 1.5.0(ajv@8.11.0) + '@readme/json-schema-ref-parser': 1.1.0 + ajv: 8.11.0 + ajv-draft-04: 1.0.0(ajv@8.11.0) + call-me-maybe: 1.0.1 + openapi-types: 12.1.3 + + '@tsconfig/node10@1.0.9': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/json-schema@7.0.11': {} + + '@types/node@18.8.2': {} + + '@types/xml2js@0.4.11': + dependencies: + '@types/node': 18.8.2 + + acorn-walk@8.2.0: {} + + acorn@8.8.2: {} + + ajv-draft-04@1.0.0(ajv@8.11.0): + optionalDependencies: + ajv: 8.11.0 + + ajv@8.11.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + arg@4.1.3: {} + + argparse@2.0.1: {} + + call-me-maybe@1.0.1: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + code-error-fragment@0.0.230: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + create-require@1.1.1: {} + + diff@4.0.2: {} + + escape-string-regexp@1.0.5: {} + + fast-deep-equal@3.1.3: {} + + grapheme-splitter@1.0.4: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + js-convert-case@4.2.0: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + json-to-ast@2.1.0: + dependencies: + code-error-fragment: 0.0.230 + grapheme-splitter: 1.0.4 + + jsonpointer@5.0.1: {} + + leven@3.1.0: {} + + make-error@1.3.6: {} + + openapi-types@12.1.3: {} + + punycode@2.1.1: {} + + regenerator-runtime@0.13.9: {} + + require-from-string@2.0.2: {} + + sax@1.2.4: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + ts-node@10.9.1(@types/node@18.8.2)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -404,41 +498,23 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.8.4 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false - /typescript@4.8.4: - resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false + typescript@5.5.4: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.1.1 - dev: false - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false + v8-compile-cache-lib@3.0.1: {} - /xml2js@0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} + xml2js@0.4.23: dependencies: sax: 1.2.4 xmlbuilder: 11.0.1 - dev: false - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: false + xmlbuilder@11.0.1: {} - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: false + yn@3.1.1: {} diff --git a/src/api/autogen/tsconfig.json b/src/api/autogen/tsconfig.json index d3a6a0f..294f6d3 100644 --- a/src/api/autogen/tsconfig.json +++ b/src/api/autogen/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ESNext", - "module": "ESNext", + "module": "NodeNext", "moduleResolution": "nodenext", "forceConsistentCasingInFileNames": true, "esModuleInterop": true, diff --git a/src/api/mod.rs b/src/api/mod.rs index 76cd505..abc8b23 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -6,11 +6,13 @@ ASCOM Alpaca Device API v1 The Alpaca API uses RESTful techniques and TCP/IP to enable ASCOM applications and devices to communicate across modern network environments. ## Interface Behaviour -The ASCOM Interface behavioural requirements for Alpaca drivers are the same as for COM based drivers and are documented in the API Interface Definitions e.g. the Telescope.SlewToCoordinates method. This document focuses on how to use the ASCOM Interface standards in their RESTful Alpaca form. +The ASCOM Interface behavioural requirements for Alpaca drivers are the same as for COM based drivers and are documented in the API Interface Definitions e.g. the Telescope.SlewToCoordinates method. This document focuses on how to use the ASCOM Interface standards in their RESTful Alpaca form. ## Alpaca URLs, Case Sensitivity, Parameters and Returned values **Alpaca Device API URLs** are of the form **http(s)://host:port/path** where path comprises **"/api/v1/"** followed by one of the method names below. e.g. for an Alpaca interface running on port 7843 of a device with IP address 192.168.1.89: * A telescope "Interface Version" method URL would be **http://192.168.1.89:7843/api/v1/telescope/0/interfaceversion** + * A first focuser "Position" method URL would be **http://192.168.1.89:7843/api/v1/focuser/0/position** + * A second focuser "StepSize" method URL would be **http://192.168.1.89:7843/api/v1/focuser/1/stepsize** * A rotator "Halt" method URL would be **http://192.168.1.89:7843/api/v1/rotator/0/halt** @@ -19,7 +21,7 @@ URLs are case sensitive and all elements must be in lower case. This means that For GET operations, parameters should be placed in the URL query string and for PUT operations they should be placed in the body of the message. -Responses, as described below, are returned in JSON format and always include a common set of values including the client's transaction number, the server's transaction number together with any error message and error number. +Responses, as described below, are returned in JSON format and always include a common set of values including the client's transaction number, the server's transaction number together with any error message and error number. If the transaction completes successfully, the ErrorMessage field will be an empty string and the ErrorNumber field will be zero. ## HTTP Status Codes and ASCOM Error codes @@ -53,10 +55,17 @@ use macro_rules_attribute::apply; use num_enum::{IntoPrimitive, TryFromPrimitive}; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; +use time::format_description::well_known::Iso8601; pub use server_info::*; -/// Returned camera state +#[cfg(feature = "camera")] +mod image_array; + +#[cfg(feature = "camera")] +pub use image_array::*; + +/// Camera state #[cfg(feature = "camera")] #[derive( Debug, @@ -73,25 +82,25 @@ pub use server_info::*; #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay pub enum CameraState { + /// At idle state, available to start exposure. Idle = 0, + /// Exposure started but waiting (for shutter, trigger, filter wheel, etc.). Waiting = 1, + /// Exposure currently in progress. Exposing = 2, + /// Sensor array is being read out (digitized). Reading = 3, + /// Downloading data to host. Download = 4, + /// Camera error condition serious enough to prevent further operations. Error = 5, } -#[cfg(feature = "camera")] -mod image_array; - -#[cfg(feature = "camera")] -pub use image_array::*; - /// The UTC date/time of exposure start in the FITS-standard CCYY-MM-DDThh:mm:ss[.sss...] format. #[cfg(feature = "camera")] #[derive(Debug, Serialize, Deserialize)] @@ -118,17 +127,13 @@ impl From for std::time::SystemTime { #[cfg(feature = "camera")] impl LastExposureStartTime { - const FORMAT: &'static [time::format_description::FormatItem<'static>] = time::macros::format_description!( - "[year]-[month]-[day]T[hour]:[minute]:[second][optional [.[subsecond]]]" - ); - fn serialize( value: &time::OffsetDateTime, serializer: S, ) -> Result { value .to_offset(time::UtcOffset::UTC) - .format(Self::FORMAT) + .format(&Iso8601::DATE_TIME) .map_err(serde::ser::Error::custom)? .serialize(serializer) } @@ -146,7 +151,7 @@ impl LastExposureStartTime { } fn visit_str(self, value: &str) -> Result { - match time::PrimitiveDateTime::parse(value, LastExposureStartTime::FORMAT) { + match time::PrimitiveDateTime::parse(value, &Iso8601::DATE_TIME) { Ok(time) => Ok(time.assume_utc()), Err(err) => Err(serde::de::Error::custom(err)), } @@ -157,7 +162,7 @@ impl LastExposureStartTime { } } -/// Returned sensor type +/// The type of sensor in the camera. #[cfg(feature = "camera")] #[derive( Debug, @@ -174,22 +179,22 @@ impl LastExposureStartTime { #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay pub enum SensorType { - /// Camera produces monochrome array with no Bayer encoding + /// Single-plane monochrome sensor. Monochrome = 0, - /// Camera produces color image directly, not requiring Bayer decoding + /// Multiple-plane color sensor. Color = 1, - /// Camera produces RGGB encoded Bayer array images + /// Single-plane Bayer matrix RGGB sensor. RGGB = 2, - /// Camera produces CMYG encoded Bayer array images + /// Single-plane Bayer matrix CMYG sensor. CMYG = 3, - /// Camera produces CMYG2 encoded Bayer array images + /// Single-plane Bayer matrix CMYG2 sensor. CMYG2 = 4, - /// Camera produces Kodak TRUESENSE LRGB encoded Bayer array images + /// Single-plane Bayer matrix LRGB sensor. LRGB = 5, } @@ -209,7 +214,7 @@ pub enum SensorType { #[repr(i32)] #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay -pub enum PutPulseGuideDirection { +pub enum GuideDirection { North = 0, South = 1, @@ -219,7 +224,7 @@ pub enum PutPulseGuideDirection { West = 3, } -/// Returned side of pier +/// Describes the state of a calibration device. #[cfg(feature = "covercalibrator")] #[derive( Debug, @@ -255,7 +260,7 @@ pub enum CalibratorStatus { Error = 5, } -/// Returned side of pier +/// Describes the state of a telescope cover. #[cfg(feature = "covercalibrator")] #[derive( Debug, @@ -291,7 +296,7 @@ pub enum CoverStatus { Error = 5, } -/// Returned dome shutter status +/// Indicates the current state of the shutter or roof. #[cfg(feature = "dome")] #[derive( Debug, @@ -307,19 +312,24 @@ pub enum CoverStatus { #[repr(i32)] #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay -pub enum DomeShutterStatus { +pub enum ShutterState { + /// The shutter or roof is open. Open = 0, + /// The shutter or roof is closed. Closed = 1, + /// The shutter or roof is opening. Opening = 2, + /// The shutter or roof is closing. Closing = 3, + /// The shutter or roof has encountered a problem. Error = 4, } -/// Returned side of pier +/// The alignment mode (geometry) of the mount. #[cfg(feature = "telescope")] #[derive( Debug, @@ -336,17 +346,17 @@ pub enum DomeShutterStatus { #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay pub enum AlignmentMode { - /// Altitude-Azimuth alignment. + /// Altitude-Azimuth type mount. AltAz = 0, /// Polar (equatorial) mount other than German equatorial. Polar = 1, - /// German equatorial mount. + /// German equatorial type mount. GermanPolar = 2, } -/// Returned side of pier +/// The equatorial coordinate system used by the mount. #[cfg(feature = "telescope")] #[derive( Debug, @@ -362,17 +372,17 @@ pub enum AlignmentMode { #[repr(i32)] #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay -pub enum EquatorialSystem { +pub enum EquatorialCoordinateType { /// Custom or unknown equinox and/or reference frame. Other = 0, - /// Topocentric coordinates. Coordinates of the object at the current date having allowed for annual aberration, precession and nutation. This is the most common coordinate type for amateur telescopes. + /// Topocentric coordinates. Topocentric = 1, - /// J2000 equator/equinox. Coordinates of the object at mid-day on 1st January 2000, ICRS reference frame. + /// J2000 equator/equinox. J2000 = 2, - /// J2050 equator/equinox, ICRS reference frame. + /// J2050 equator/equinox. J2050 = 3, /// B1950 equinox, FK4 reference frame. @@ -395,7 +405,7 @@ pub enum EquatorialSystem { #[repr(i32)] #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay -pub enum SideOfPier { +pub enum PierSide { /// Normal pointing state - Mount on the East side of pier (looking West). East = 0, @@ -406,7 +416,7 @@ pub enum SideOfPier { Unknown = -1, } -/// DriveRate enum corresponding to one of the standard drive rates. +/// Integer value corresponding to one of the standard drive rates. #[cfg(feature = "telescope")] #[derive( Debug, @@ -423,16 +433,16 @@ pub enum SideOfPier { #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay pub enum DriveRate { - /// 15.041 arcseconds per second + /// Sidereal tracking rate (15.041 arcseconds per second). Sidereal = 0, - /// 14.685 arcseconds per second + /// Lunar tracking rate (14.685 arcseconds per second). Lunar = 1, - /// 15.0 arcseconds per second + /// Solar tracking rate (15.0 arcseconds per second). Solar = 2, - /// 15.0369 arcseconds per second + /// King tracking rate (15.0369 arcseconds per second). King = 3, } @@ -462,17 +472,13 @@ impl From for std::time::SystemTime { #[cfg(feature = "telescope")] impl TelescopeUtcdate { - const FORMAT: &'static [time::format_description::FormatItem<'static>] = time::macros::format_description!( - "[year]-[month]-[day]T[hour]:[minute]:[second][optional [.[subsecond]]]Z" - ); - fn serialize( value: &time::OffsetDateTime, serializer: S, ) -> Result { value .to_offset(time::UtcOffset::UTC) - .format(Self::FORMAT) + .format(&Iso8601::DATE_TIME_OFFSET) .map_err(serde::ser::Error::custom)? .serialize(serializer) } @@ -490,7 +496,7 @@ impl TelescopeUtcdate { } fn visit_str(self, value: &str) -> Result { - match time::PrimitiveDateTime::parse(value, TelescopeUtcdate::FORMAT) { + match time::PrimitiveDateTime::parse(value, &Iso8601::DATE_TIME_OFFSET) { Ok(time) => Ok(time.assume_utc()), Err(err) => Err(serde::de::Error::custom(err)), } @@ -501,7 +507,7 @@ impl TelescopeUtcdate { } } -/// The axis of mount rotation. +/// The axis about which rate information is desired. #[cfg(feature = "telescope")] #[derive( Debug, @@ -517,7 +523,7 @@ impl TelescopeUtcdate { #[repr(i32)] #[allow(clippy::default_numeric_fallback)] // false positive https://github.com/rust-lang/rust-clippy/issues/9656 #[allow(missing_docs)] // some enum variants might not have docs and that's okay -pub enum Axis { +pub enum TelescopeAxis { Primary = 0, Secondary = 1, @@ -554,12 +560,14 @@ pub trait Device: std::fmt::Debug + Send + Sync { }; /// Actions and SupportedActions are a standardised means for drivers to extend functionality beyond the built-in capabilities of the ASCOM device interfaces. + /// /// The key advantage of using Actions is that drivers can expose any device specific functionality required. The downside is that, in order to use these unique features, every application author would need to create bespoke code to present or exploit them. + /// /// The Action parameter and return strings are deceptively simple, but can support transmission of arbitrarily complex data structures, for example through JSON encoding. /// /// This capability will be of primary value to: - /// - bespoke software and hardware configurations where a single entity controls both the consuming application software and the hardware / driver environment. - /// - a group of application and device authors to quickly formulate and try out new interface capabilities without requiring an immediate change to the ASCOM device interface, which will take a lot longer than just agreeing a name, input parameters and a standard response for an Action command. + /// * bespoke software and hardware configurations where a single entity controls both the consuming application software and the hardware / driver environment + /// * a group of application and device authors to quickly formulate and try out new interface capabilities without requiring an immediate change to the ASCOM device interface, which will take a lot longer than just agreeing a name, input parameters and a standard response for an Action command /// /// /// The list of Action commands supported by a driver can be discovered through the SupportedActions property. @@ -646,7 +654,7 @@ pub trait Device: std::fmt::Debug + Send + Sync { Err(ASCOMError::NOT_IMPLEMENTED) } - /// This method returns the version of the ASCOM device interface contract to which this device complies. Only one interface version is current at a moment in time and all new devices should be built to the latest interface version. Applications can choose which device interface versions they support and it is in their interest to support previous versions as well as the current version to ensure thay can use the largest number of devices. + /// This method returns the version of the ASCOM device interface contract to which this device complies. Only one interface version is current at a moment in time and all new devices should be built to the latest interface version. Applications can choose which device interface versions they support and it is in their interest to support previous versions as well as the current version to ensure thay can use the largest number of devices. #[http("interfaceversion", method = Get, via = ValueResponse)] async fn interface_version(&self) -> ASCOMResult { Ok(3_i32) @@ -705,7 +713,7 @@ pub trait Camera: Device + Send + Sync { Err(ASCOMError::NOT_IMPLEMENTED) } - /// Returns the current camera operational state. + /// Returns the current camera operational state as an integer. #[http("camerastate", method = Get, via = ValueResponse)] async fn camera_state(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) @@ -881,63 +889,69 @@ pub trait Camera: Device + Send + Sync { Err(ASCOMError::NOT_IMPLEMENTED) } - /// Returns an array of 32bit integers containing the pixel values from the last exposure. This call can return either a 2 dimension (monochrome images) or 3 dimension (colour or multi-plane images) array of size NumX \* NumY or NumX \* NumY \* NumPlanes. Where applicable, the size of NumPlanes has to be determined by inspection of the returned Array. + /// Returns an array of 32bit integers containing the pixel values from the last exposure. This call can return either a 2 dimension (monochrome images) or 3 dimension (colour or multi-plane images) array of size `NumX * NumY` or `NumX * NumY * NumPlanes`. Where applicable, the size of `NumPlanes` has to be determined by inspection of the returned array. /// - /// Since 32bit integers are always returned by this call, the returned JSON Type value (0 = Unknown, 1 = short(16bit), 2 = int(32bit), 3 = Double) is always 2. The number of planes is given in the returned Rank value. + /// Since 32bit integers are always returned by this call, the returned JSON `Type` value is always 2 (integer). /// - /// When de-serialising to an object it is essential to know the array Rank beforehand so that the correct data class can be used. This can be achieved through a regular expression or by direct parsing of the returned JSON string to extract the Type and Rank values before de-serialising. + /// When de-serialising to an object it is essential to know the array `Rank` beforehand so that the correct data class can be used. This can be achieved through a regular expression or by direct parsing of the returned JSON string to extract the `Type` and `Rank` values before de-serialising. /// - /// This regular expression accomplishes the extraction into two named groups Type and Rank, which can then be used to select the correct de-serialisation data class: + /// This regular expression accomplishes the extraction into two named groups `Type` and `Rank`, which can then be used to select the correct de-serialisation data class: /// - /// __`^*"Type":(?\d*),"Rank":(?\d*)`__ + /// `^*"Type":(?\d*),"Rank":(?\d*)` /// - /// When the SensorType is Monochrome, RGGB, CMYG, CMYG2 or LRGB, the serialised JSON array should have 2 dimensions. For example, the returned array should appear as below if NumX = 7, NumY = 5 and Pxy represents the pixel value at the zero based position x across and y down the image with the origin in the top left corner of the image. + /// When the `SensorType` is Monochrome, RGGB, CMYG, CMYG2 or LRGB, the serialised JSON array should have 2 dimensions. For example, the returned array should appear as below if `NumX = 7`, `NumY = 5` and `Pxy` represents the pixel value at the zero based position `x` across and `y` down the image with the origin in the top left corner of the image. /// - /// Please note that this is "column-major" order (column changes most rapidly) from the image's row and column perspective, while, from the array's perspective, serialisation is actually effected in "row-major" order (rightmost index changes most rapidly). This unintuitive outcome arises because the ASCOM Camera Interface specification defines the image column dimension as the rightmost array dimension. - /// ```text - /// [ + /// Please note that this is "column-major" order (column changes most rapidly) from the image's row and column perspective, while, from the array's perspective, serialisation is actually effected in "row-major" order (rightmost index changes most rapidly). This unintuitive outcome arises because the ASCOM Camera Interface specification defines the image column dimension as the rightmost array dimension. /// + /// ``` + /// [ /// [P00,P01,P02,P03,P04], /// /// [P10,P11,P12,P13,P14], - /// + /// /// [P20,P21,P22,P23,P24], - /// + /// /// [P30,P31,P32,P33,P34], - /// + /// /// [P40,P41,P42,P43,P44], - /// + /// /// [P50,P51,P52,P53,P54], + /// + /// [P60,P61,P62,P63,P64], /// - /// [P60,P61,P62,P63,P64] - /// + /// … /// ] /// ``` /// - /// When the SensorType is Color, the serialised JSON array will have 3 dimensions. For example, the returned array should appear as below if NumX = 7, NumY = 5 and Rxy, Gxy and Bxy represent the red, green and blue pixel values at the zero based position x across and y down the image with the origin in the top left corner of the image. Please see note above regarding element ordering. - /// ```text - /// [ + /// When the `SensorType` is Color, the serialised JSON array will have 3 dimensions. For example, the returned array should appear as below if `NumX = 7`, `NumY = 5` and `Rxy`, `Gxy` and `Bxy` represent the red, green and blue pixel values at the zero based position x across and y down the image with the origin in the top left corner of the image. Please see note above regarding element ordering. /// + /// ``` + /// [ /// [[R00,G00,B00],[R01,G01,B01],[R02,G02,B02],[R03,G03,B03],[R04,G04,B04]], /// + /// /// [[R10,G10,B10],[R11,G11,B11],[R12,G12,B12],[R13,G13,B13],[R14,G14,B14]], /// + /// /// [[R20,G20,B20],[R21,G21,B21],[R22,G22,B22],[R23,G23,B23],[R24,G24,B24]], /// + /// /// [[R30,G30,B30],[R31,G31,B31],[R32,G32,B32],[R33,G33,B33],[R34,G34,B34]], /// + /// /// [[R40,G40,B40],[R41,G41,B41],[R42,G42,B42],[R43,G43,B43],[R44,G44,B44]], /// + /// /// [[R50,G50,B50],[R51,G51,B51],[R52,G52,B52],[R53,G53,B53],[R54,G54,B54]], /// + /// /// [[R60,G60,B60],[R61,G61,B61],[R62,G62,B62],[R63,G63,B63],[R64,G64,B64]], /// + /// … /// ] /// ``` - /// - /// # Performance - /// - /// Returning an image from an Alpaca device as a JSON array is very inefficient and can result in delays of 30 or more seconds while client and device process and send the huge JSON string over the network. A new, much faster mechanic called ImageBytes - [Alpaca ImageBytes Concepts and Implementation](https://www.ascom-standards.org/Developer/AlpacaImageBytes.pdf) has been developed that sends data as a binary byte stream and can offer a 10 to 20 fold reduction in transfer time. It is strongly recommended that Alpaca Cameras implement the ImageBytes mechanic as well as the JSON mechanic. + /// ## Performance + /// Returning an image from an Alpaca device as a JSON array is very inefficient and can result in delays of 30 or more seconds while client and device process and send the huge JSON string over the network. A new, much faster mechanic called ImageBytes - [Alpaca ImageBytes Concepts and Implementation](https://www.ascom-standards.org/Developer/AlpacaImageBytes.pdf) has been developed that sends data as a binary byte stream and can offer a 10 to 20 fold reduction in transfer time. It is strongly recommended that Alpaca Cameras implement the ImageBytes mechanic as well as the JSON mechanic. #[http("imagearray", method = Get)] async fn image_array(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) @@ -1154,7 +1168,7 @@ pub trait Camera: Device + Send + Sync { async fn pulse_guide( &self, - #[http("Direction")] direction: PutPulseGuideDirection, + #[http("Direction")] direction: GuideDirection, #[http("Duration")] duration: i32, ) -> ASCOMResult { @@ -1317,7 +1331,7 @@ pub trait Dome: Device + Send + Sync { /// Returns the status of the dome shutter or roll-off roof. #[http("shutterstatus", method = Get, via = ValueResponse)] - async fn shutter_status(&self) -> ASCOMResult { + async fn shutter_status(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } @@ -1735,43 +1749,43 @@ pub trait Switch: Device + Send + Sync { /// Reports if the specified switch device can be written to, default true. This is false if the device cannot be written to, for example a limit switch or a sensor. Devices are numbered from 0 to MaxSwitch - 1 #[http("canwrite", method = Get, via = ValueResponse)] - async fn can_write(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn can_write(&self, #[http("Id")] id: i32) -> ASCOMResult { Ok(false) } /// Return the state of switch device id as a boolean. Devices are numbered from 0 to MaxSwitch - 1 #[http("getswitch", method = Get, via = ValueResponse)] - async fn get_switch(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn get_switch(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } /// Gets the description of the specified switch device. This is to allow a fuller description of the device to be returned, for example for a tool tip. Devices are numbered from 0 to MaxSwitch - 1 #[http("getswitchdescription", method = Get, via = ValueResponse)] - async fn get_switch_description(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn get_switch_description(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } /// Gets the name of the specified switch device. Devices are numbered from 0 to MaxSwitch - 1 #[http("getswitchname", method = Get, via = ValueResponse)] - async fn get_switch_name(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn get_switch_name(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } /// Gets the value of the specified switch device as a double. Devices are numbered from 0 to MaxSwitch - 1, The value of this switch is expected to be between MinSwitchValue and MaxSwitchValue. #[http("getswitchvalue", method = Get, via = ValueResponse)] - async fn get_switch_value(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn get_switch_value(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } /// Gets the minimum value of the specified switch device as a double. Devices are numbered from 0 to MaxSwitch - 1. #[http("minswitchvalue", method = Get, via = ValueResponse)] - async fn min_switch_value(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn min_switch_value(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } /// Gets the maximum value of the specified switch device as a double. Devices are numbered from 0 to MaxSwitch - 1. #[http("maxswitchvalue", method = Get, via = ValueResponse)] - async fn max_switch_value(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn max_switch_value(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } @@ -1780,7 +1794,7 @@ pub trait Switch: Device + Send + Sync { async fn set_switch( &self, - #[http("Id")] id: u32, + #[http("Id")] id: i32, #[http("State", via = BoolParam)] state: bool, ) -> ASCOMResult { @@ -1792,7 +1806,7 @@ pub trait Switch: Device + Send + Sync { async fn set_switch_name( &self, - #[http("Id")] id: u32, + #[http("Id")] id: i32, #[http("Name")] name: String, ) -> ASCOMResult { @@ -1804,7 +1818,7 @@ pub trait Switch: Device + Send + Sync { async fn set_switch_value( &self, - #[http("Id")] id: u32, + #[http("Id")] id: i32, #[http("Value")] value: f64, ) -> ASCOMResult { @@ -1813,7 +1827,7 @@ pub trait Switch: Device + Send + Sync { /// Returns the step size that this device supports (the difference between successive values of the device). Devices are numbered from 0 to MaxSwitch - 1. #[http("switchstep", method = Get, via = ValueResponse)] - async fn switch_step(&self, #[http("Id")] id: u32) -> ASCOMResult { + async fn switch_step(&self, #[http("Id")] id: i32) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } } @@ -1822,7 +1836,7 @@ pub trait Switch: Device + Send + Sync { #[cfg(feature = "telescope")] #[apply(rpc_trait)] pub trait Telescope: Device + Send + Sync { - /// Returns the alignment mode of the mount (Alt/Az, Polar, German Polar). The alignment mode is specified as an integer value from the AlignmentModes Enum. + /// Returns the alignment mode of the mount (Alt/Az, Polar, German Polar). #[http("alignmentmode", method = Get, via = ValueResponse)] async fn alignment_mode(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) @@ -1966,13 +1980,13 @@ pub trait Telescope: Device + Send + Sync { Err(ASCOMError::NOT_IMPLEMENTED) } - /// The declination tracking rate (arcseconds per second, default = 0.0) + /// The declination tracking rate (arcseconds per SI second, default = 0.0). Please note that rightascensionrate units are arcseconds per sidereal second. #[http("declinationrate", method = Get, via = ValueResponse)] async fn declination_rate(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } - /// Sets the declination tracking rate (arcseconds per second) + /// Sets the declination tracking rate (arcseconds per SI second). Please note that rightascensionrate units are arcseconds per sidereal second. #[http("declinationrate", method = Put)] async fn set_declination_rate( &self, @@ -2000,7 +2014,7 @@ pub trait Telescope: Device + Send + Sync { /// Returns the current equatorial coordinate system used by this telescope (e.g. Topocentric or J2000). #[http("equatorialsystem", method = Get, via = ValueResponse)] - async fn equatorial_system(&self) -> ASCOMResult { + async fn equatorial_system(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } @@ -2054,13 +2068,13 @@ pub trait Telescope: Device + Send + Sync { Err(ASCOMError::NOT_IMPLEMENTED) } - /// The right ascension tracking rate (arcseconds per second, default = 0.0) + /// The right ascension tracking rate (arcseconds per sidereal second, default = 0.0). Please note that the declinationrate units are arcseconds per SI second. #[http("rightascensionrate", method = Get, via = ValueResponse)] async fn right_ascension_rate(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } - /// Sets the right ascension tracking rate (arcseconds per second) + /// Sets the right ascension tracking rate (arcseconds per sidereal second). Please note that the declinationrate units are arcseconds per SI second. #[http("rightascensionrate", method = Put)] async fn set_right_ascension_rate( &self, @@ -2072,17 +2086,13 @@ pub trait Telescope: Device + Send + Sync { /// Indicates the pointing state of the mount. #[http("sideofpier", method = Get, via = ValueResponse)] - async fn side_of_pier(&self) -> ASCOMResult { + async fn side_of_pier(&self) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } /// Sets the pointing state of the mount. #[http("sideofpier", method = Put)] - async fn set_side_of_pier( - &self, - - #[http("SideOfPier")] side_of_pier: SideOfPier, - ) -> ASCOMResult { + async fn set_side_of_pier(&self, #[http("SideOfPier")] side_of_pier: PierSide) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } @@ -2252,13 +2262,13 @@ pub trait Telescope: Device + Send + Sync { /// The rates at which the telescope may be moved about the specified axis by the MoveAxis(TelescopeAxes, Double) method. #[http("axisrates", method = Get, via = ValueResponse)] - async fn axis_rates(&self, #[http("Axis")] axis: Axis) -> ASCOMResult> { + async fn axis_rates(&self, #[http("Axis")] axis: TelescopeAxis) -> ASCOMResult> { Err(ASCOMError::NOT_IMPLEMENTED) } /// True if this telescope can move the requested axis. #[http("canmoveaxis", method = Get, via = ValueResponse)] - async fn can_move_axis(&self, #[http("Axis")] axis: Axis) -> ASCOMResult { + async fn can_move_axis(&self, #[http("Axis")] axis: TelescopeAxis) -> ASCOMResult { Ok(false) } @@ -2270,7 +2280,7 @@ pub trait Telescope: Device + Send + Sync { #[http("RightAscension")] right_ascension: f64, #[http("Declination")] declination: f64, - ) -> ASCOMResult { + ) -> ASCOMResult { Err(ASCOMError::NOT_IMPLEMENTED) } @@ -2285,7 +2295,7 @@ pub trait Telescope: Device + Send + Sync { async fn move_axis( &self, - #[http("Axis")] axis: Axis, + #[http("Axis")] axis: TelescopeAxis, #[http("Rate")] rate: f64, ) -> ASCOMResult { @@ -2303,7 +2313,7 @@ pub trait Telescope: Device + Send + Sync { async fn pulse_guide( &self, - #[http("Direction")] direction: PutPulseGuideDirection, + #[http("Direction")] direction: GuideDirection, #[http("Duration")] duration: i32, ) -> ASCOMResult { diff --git a/src/macros.rs b/src/macros.rs index 2a8674d..f48b744 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -86,6 +86,7 @@ macro_rules! rpc_trait { async fn handle_action(device: &(impl ?Sized + $trait_name), action: &str, params: $crate::server::ActionParams) -> $crate::server::Result { #[derive(Serialize)] #[serde(untagged)] + #[allow(non_camel_case_types)] enum ResponseRepr<$($method_name),*> { $($method_name($method_name),)* } diff --git a/src/server/params.rs b/src/server/params.rs index 7aa0ed8..7665e34 100644 --- a/src/server/params.rs +++ b/src/server/params.rs @@ -30,7 +30,7 @@ where name: &'static str, ) -> super::Result> { self.0 - .remove(name.as_ref()) + .swap_remove(name.as_ref()) .map(|value| serde_plain::from_str(&value)) .transpose() .map_err(|err| Error::BadParameter { name, err })