commit 065844a66b61e305587ea0f20a240bdd2ca3a633 Author: rowan Date: Wed Jul 9 21:56:51 2025 -0400 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..059b8b0 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2037 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "backtrace" +version = "0.3.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cc" +version = "1.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" + +[[package]] +name = "confique" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d011f79ecb68498e94453e133c67cc5c35ab847684c59fa58b9ce0698e272e7b" +dependencies = [ + "confique-macro", + "serde", + "toml", +] + +[[package]] +name = "confique-macro" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df20583fae327154743356c4896906bda1aa9b7df30c5aed73a54cf27fede9de" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "core" +version = "0.1.0" +dependencies = [ + "confique", + "derive_more", + "directories", + "osstr_traits", + "osstr_traits_derive", + "serde", + "toml", + "unity_release_api", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e3ae26c830a573f2e231fc2475f71fce4705609097cb9523abfc4007caed0b" + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "directories" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f5094c54661b38d03bd7e50df373292118db60b585c08a411c6d840017fe7d" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.60.2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "features" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83072b3c84e55f9d0c0ff36a4575d0fd2e543ae4a56e04e7f5a9222188d574e3" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "gui" +version = "0.1.0" + +[[package]] +name = "h2" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "libc", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.174" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" + +[[package]] +name = "libredox" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638" +dependencies = [ + "bitflags 2.9.1", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "maybe_owned" +version = "0.1.0" +source = "git+https://git.kitsu.cafe/rowan/maybe-owned.git#7cbcd78645813193a5d1df9d463660b9bff5a27b" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags 2.9.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "osstr_traits" +version = "0.1.0" + +[[package]] +name = "osstr_traits_derive" +version = "0.1.0" +dependencies = [ + "osstr_traits", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "redox_users" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror", +] + +[[package]] +name = "reqwest" +version = "0.12.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags 2.9.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustls" +version = "0.23.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a72fe2bcf7a6ac6fd7d0b9e5cb68aeb7d4c0a0271730218b3e92d43b4eb435" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.9.1", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "subresource_integrity" +version = "0.1.0" +source = "git+https://git.kitsu.cafe/rowan/subresource-integrity.git#05f62a89aa7058616b104a2b5fbabb63fff023c2" +dependencies = [ + "base64", + "md-5", + "serde", + "sha2", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.1", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" +dependencies = [ + "fastrand", + "getrandom 0.3.3", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" +dependencies = [ + "backtrace", + "bytes", + "io-uring", + "libc", + "mio", + "pin-project-lite", + "slab", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.1", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unity_release_api" +version = "0.1.0" +source = "git+https://git.kitsu.cafe/rowan/unity-release-client.git#90a2ebecf7501a5bdd3876be8e4feedae597effb" +dependencies = [ + "derive", + "features", + "futures", + "maybe_owned", + "reqwest", + "serde", + "serde_json", + "subresource_integrity", + "thiserror", + "time", + "url", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "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]] +name = "windows-targets" +version = "0.53.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef" +dependencies = [ + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "winnow" +version = "0.7.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74c7b26e3480b707944fc872477815d29a8e429d2f93a1ce000f5fa84a15cbcd" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.1", +] + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..064b698 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +resolver = "3" +members = [ "core","gui"] + diff --git a/core/Cargo.toml b/core/Cargo.toml new file mode 100644 index 0000000..9797029 --- /dev/null +++ b/core/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "core" +version = "0.1.0" +edition = "2024" + +[dependencies] +confique = { version = "0.3.0", features = ["toml"] } +derive_more = { version = "2.0.1", features = ["display", "from_str"] } +directories = "6.0.0" +serde = "1.0.219" +toml = "0.8.23" +unity_release_api = { git = "https://git.kitsu.cafe/rowan/unity-release-client.git", version = "0.1.0" } +osstr_traits = { path = "../../osstr_traits/crates/osstr_traits", version = "0.1.0" } +osstr_traits_derive = { path = "../../osstr_traits/crates/osstr_traits_derive", version = "0.1.0" } +#osstr_traits = { git = "https://git.kitsu.cafe/rowan/osstr-traits.git", version = "0.1.0" } +#osstr_traits_derive = { git = "https://git.kitsu.cafe/rowan/osstr-traits.git", version = "0.1.0" } diff --git a/core/blah.rs b/core/blah.rs new file mode 100644 index 0000000..2c38db6 --- /dev/null +++ b/core/blah.rs @@ -0,0 +1,6355 @@ +#![feature(prelude_import)] +#![feature(min_specialization)] +#[prelude_import] +use std::prelude::rust_2024::*; +#[macro_use] +extern crate std; + +pub mod collection { + + + + + + + + + + + + + + + + + + + + use std::{ + borrow::Cow, ffi::{OsStr, OsString}, + fmt::Display, ops::{Deref, DerefMut}, + path::PathBuf, + }; + use derive_more::Display; + use osstr_traits::{OsDisplay, ToOsString}; + type OsStrDisplay<'a> = std::ffi::os_str::Display<'a>; + type PathDisplay<'a> = std::path::Display<'a>; + pub struct DelimitedVec(Vec); + #[automatically_derived] + impl ::core::clone::Clone for + DelimitedVec { + #[inline] + fn clone(&self) -> DelimitedVec { + DelimitedVec(::core::clone::Clone::clone(&self.0)) + } + } + #[automatically_derived] + impl ::core::fmt::Debug for + DelimitedVec { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "DelimitedVec", &&self.0) + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for + DelimitedVec { + } + #[automatically_derived] + impl ::core::cmp::PartialEq for + DelimitedVec { + #[inline] + fn eq(&self, other: &DelimitedVec) -> bool { self.0 == other.0 } + } + #[automatically_derived] + impl ::core::cmp::Eq for + DelimitedVec { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq>; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd + for DelimitedVec { + #[inline] + fn partial_cmp(&self, other: &DelimitedVec) + -> ::core::option::Option<::core::cmp::Ordering> { + ::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for + DelimitedVec { + #[inline] + fn cmp(&self, other: &DelimitedVec) -> ::core::cmp::Ordering { + ::core::cmp::Ord::cmp(&self.0, &other.0) + } + } + impl OsDisplay for DelimitedVec { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + let mut first = true; + for item in &self.0 { + if !first { f.write_os_str(&D.to_os_string())?; } + item.fmt_os(f)?; + first = false; + } + Ok(()) + } + } + impl Display for DelimitedVec { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut first = true; + for item in &self.0 { + if !first { f.write_fmt(format_args!("{0}", D))?; } + f.write_fmt(format_args!("{0}", item))?; + first = false; + } + Ok(()) + } + } + impl FromIterator for DelimitedVec { + fn from_iter>(iter: T) -> Self { + Self(iter.into_iter().collect()) + } + } + impl<'a, const D : char> From<&'a Vec> for + DelimitedVec, D> { + fn from(value: &'a Vec) -> Self { + let iter = value.iter().map(|s| s.display()); + Self::from_iter(iter) + } + } + impl<'a, const D : char> From<&'a Vec> for + DelimitedVec, D> { + fn from(value: &'a Vec) -> Self { + let iter = value.iter().map(|s| s.display()); + Self::from_iter(iter) + } + } + pub struct CommandArgs(Vec); + #[automatically_derived] + impl ::core::clone::Clone for CommandArgs { + #[inline] + fn clone(&self) -> CommandArgs { + CommandArgs(::core::clone::Clone::clone(&self.0)) + } + } + #[automatically_derived] + impl ::core::fmt::Debug for CommandArgs { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "CommandArgs", &&self.0) + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for CommandArgs { } + #[automatically_derived] + impl ::core::cmp::PartialEq for CommandArgs + { + #[inline] + fn eq(&self, other: &CommandArgs) -> bool { self.0 == other.0 } + } + #[automatically_derived] + impl ::core::cmp::Eq for CommandArgs { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq>; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for + CommandArgs { + #[inline] + fn partial_cmp(&self, other: &CommandArgs) + -> ::core::option::Option<::core::cmp::Ordering> { + ::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for CommandArgs { + #[inline] + fn cmp(&self, other: &CommandArgs) -> ::core::cmp::Ordering { + ::core::cmp::Ord::cmp(&self.0, &other.0) + } + } + impl OsDisplay for CommandArgs { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + let mut first = true; + for item in &self.0 { + if !first { f.write_os_str(OsStr::new(" "))?; } + item.fmt_os(f)?; + first = false; + } + Ok(()) + } + } + impl Display for CommandArgs { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut first = true; + for item in &self.0 { + if !first { f.write_fmt(format_args!(" "))?; } + f.write_fmt(format_args!("{0}", item))?; + first = false; + } + Ok(()) + } + } + impl Default for CommandArgs { + fn default() -> Self { Self(Vec::new()) } + } + impl Deref for CommandArgs { + type Target = Vec; + fn deref(&self) -> &Self::Target { &self.0 } + } + impl DerefMut for CommandArgs { + fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } + } + impl FromIterator for CommandArgs { + fn from_iter>(iter: T) -> Self { + Self(iter.into_iter().collect()) + } + } + impl IntoIterator for CommandArgs { + type Item = T; + type IntoIter = as IntoIterator>::IntoIter; + fn into_iter(self) -> Self::IntoIter { self.0.into_iter() } + } + #[display("{} {}", command.display(), args)] + pub struct Command<'a, T> { + command: Cow<'a, OsStr>, + args: CommandArgs, + } + #[automatically_derived] + impl<'a, T: ::core::clone::Clone> ::core::clone::Clone for Command<'a, T> + { + #[inline] + fn clone(&self) -> Command<'a, T> { + Command { + command: ::core::clone::Clone::clone(&self.command), + args: ::core::clone::Clone::clone(&self.args), + } + } + } + #[automatically_derived] + impl<'a, T: ::core::fmt::Debug> ::core::fmt::Debug for Command<'a, T> { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field2_finish(f, "Command", + "command", &self.command, "args", &&self.args) + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl<'a, T> derive_more::core::fmt::Display for Command<'a, T> where + CommandArgs: derive_more::core::fmt::Display { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + let command = &self.command; + let args = &self.args; + __derive_more_f.write_fmt(format_args!("{0} {1}", + command.display(), args)) + } + } + impl<'a, T> Command<'a, T> { + pub fn new(command: impl Into>) -> Self { + Self { command: command.into(), args: CommandArgs::default() } + } + pub fn arg(&mut self, arg: T) { self.args.push(arg); } + } + impl<'a, T: AsRef> Command<'a, T> { + pub fn into_os_command(self) -> std::process::Command { + let mut cmd = std::process::Command::new(self.command); + cmd.args(self.args); + cmd + } + } +} +pub mod config { + use std::{borrow::Cow, env, path::{Path, PathBuf}}; + use confique::Config; + use directories::ProjectDirs; + use serde::{Deserialize, Deserializer, Serialize}; + use crate::error::{Error, ShellExpansionError}; + trait Fallback: Config { + fn fallback() + -> ::Partial; + } + fn project_dir() -> Option { + ProjectDirs::from("cafe", "kitsu", "TormentNexus") + } + fn expand_tilde<'a>(path: impl Into>) + -> Result, ShellExpansionError> { + let path = path.into(); + let into_err = || ShellExpansionError::new("~", path.to_str()); + if !path.starts_with("~") { + Ok(path) + } else if path == Path::new("~") { + env::home_dir().map(Cow::Owned).ok_or_else(into_err) + } else { + let mut home_dir = env::home_dir().ok_or_else(into_err)?; + if home_dir == Path::new("/") { + let stripped = + path.strip_prefix("~").map_err(|_e| into_err())?; + Ok(Cow::Owned(stripped.into())) + } else { + home_dir.push(path.strip_prefix("~/").map_err(|_e| + into_err())?); + Ok(Cow::Owned(home_dir)) + } + } + } + fn deserialize_path<'de, D: Deserializer<'de>>(de: D) + -> Result { + let path = PathBuf::deserialize(de)?; + if let Ok(expanded_path) = expand_tilde(&path) { + Ok(expanded_path.into()) + } else { Ok(path) } + } + pub struct EditorCfg { + #[config(deserialize_with = deserialize_path, env = "EDITOR_PATH")] + pub path: PathBuf, + } + #[automatically_derived] + impl confique::Config for EditorCfg { + type Partial = confique_partial_editor_cfg::PartialEditorCfg; + fn from_partial(partial: Self::Partial) + -> std::result::Result { + let out = + Self { + path: confique::internal::unwrap_or_missing_value_err(partial.path, + "path")?, + }; + std::result::Result::Ok(out) + } + const META: confique::meta::Meta = + confique::meta::Meta { + name: "EditorCfg", + doc: &[], + fields: &[confique::meta::Field { + name: "path", + doc: &[], + kind: confique::meta::FieldKind::Leaf { + env: std::option::Option::Some("EDITOR_PATH"), + kind: confique::meta::LeafKind::Required { + default: std::option::Option::None, + }, + }, + }], + }; + } + #[doc = + "*Generated* by `confique`: helpers to implement `Config` for [`EditorCfg`].\n\nDo not use directly! Only use via the `Config` and `Partial` traits and what's explained in the confique documentation.\n Any other parts of this module cannot be relied on and are not part of the semver guarantee of `confique`."] + pub mod confique_partial_editor_cfg { + #![allow(missing_docs)] + use super::*; + #[serde(crate = "confique::serde")] + pub struct PartialEditorCfg { + #[serde(default, deserialize_with = + "__confique_deserialize_some_path")] + pub path: std::option::Option, + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, + unused_qualifications, clippy :: absolute_paths,)] + const _: () = + { + use confique::serde as _serde; + #[automatically_derived] + impl<'de> confique::serde::Deserialize<'de> for + PartialEditorCfg { + fn deserialize<__D>(__deserializer: __D) + -> confique::serde::__private::Result + where __D: confique::serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "path" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"path" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = PartialEditorCfg; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct PartialEditorCfg") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match { + #[doc(hidden)] + struct __DeserializeWith<'de> { + value: std::option::Option, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for + __DeserializeWith<'de> { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::__private::Ok(__DeserializeWith { + value: __confique_deserialize_some_path(__deserializer)?, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData, + }) + } + } + _serde::__private::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?, + |__wrap| __wrap.value) + } { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + _serde::__private::Default::default(), + }; + _serde::__private::Ok(PartialEditorCfg { path: __field0 }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: + _serde::__private::Option> = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("path")); + } + __field0 = + _serde::__private::Some({ + #[doc(hidden)] + struct __DeserializeWith<'de> { + value: std::option::Option, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for + __DeserializeWith<'de> { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::__private::Ok(__DeserializeWith { + value: __confique_deserialize_some_path(__deserializer)?, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData, + }) + } + } + match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map) + { + _serde::__private::Ok(__wrapper) => __wrapper.value, + _serde::__private::Err(__err) => { + return _serde::__private::Err(__err); + } + } + }); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::Default::default(), + }; + _serde::__private::Ok(PartialEditorCfg { path: __field0 }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &["path"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "PartialEditorCfg", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; + #[automatically_derived] + impl confique::Partial for PartialEditorCfg where { + fn empty() -> Self { Self { path: std::option::Option::None } } + fn default_values() -> Self { + Self { path: std::option::Option::None } + } + fn from_env() -> std::result::Result { + std::result::Result::Ok(Self { + path: confique::internal::from_env("EDITOR_PATH", + "EditorCfg::path", deserialize_path)?, + }) + } + fn with_fallback(self, fallback: Self) -> Self { + Self { path: self.path.or(fallback.path) } + } + fn is_empty(&self) -> bool { true && self.path.is_none() } + fn is_complete(&self) -> bool { true && self.path.is_some() } + } + fn __confique_deserialize_some_path<'de, D>(deserializer: D) + -> std::result::Result, D::Error> + where D: confique::serde::Deserializer<'de> { + deserialize_path(deserializer).map(std::option::Option::Some) + } + } + #[automatically_derived] + impl ::core::fmt::Debug for EditorCfg { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field1_finish(f, "EditorCfg", + "path", &&self.path) + } + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl _serde::Serialize for EditorCfg { + fn serialize<__S>(&self, __serializer: __S) + -> _serde::__private::Result<__S::Ok, __S::Error> where + __S: _serde::Serializer { + let mut __serde_state = + _serde::Serializer::serialize_struct(__serializer, + "EditorCfg", false as usize + 1)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "path", &self.path)?; + _serde::ser::SerializeStruct::end(__serde_state) + } + } + }; + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for EditorCfg { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "path" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"path" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = EditorCfg; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct EditorCfg") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(0usize, + &"struct EditorCfg with 1 element")), + }; + _serde::__private::Ok(EditorCfg { path: __field0 }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: _serde::__private::Option = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("path")); + } + __field0 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::de::missing_field("path")?, + }; + _serde::__private::Ok(EditorCfg { path: __field0 }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &["path"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "EditorCfg", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; + impl Fallback for EditorCfg { + fn fallback() -> ::Partial { + Self::Partial { + path: project_dir().map(|d| + d.data_local_dir().join("editors/")), + } + } + } + pub struct ProjectCfg { + #[config(deserialize_with = deserialize_path, env = + "PROJECT_MANIFEST_PATH")] + pub manifest_path: PathBuf, + } + #[automatically_derived] + impl ::core::fmt::Debug for ProjectCfg { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field1_finish(f, + "ProjectCfg", "manifest_path", &&self.manifest_path) + } + } + #[automatically_derived] + impl confique::Config for ProjectCfg { + type Partial = confique_partial_project_cfg::PartialProjectCfg; + fn from_partial(partial: Self::Partial) + -> std::result::Result { + let out = + Self { + manifest_path: confique::internal::unwrap_or_missing_value_err(partial.manifest_path, + "manifest_path")?, + }; + std::result::Result::Ok(out) + } + const META: confique::meta::Meta = + confique::meta::Meta { + name: "ProjectCfg", + doc: &[], + fields: &[confique::meta::Field { + name: "manifest_path", + doc: &[], + kind: confique::meta::FieldKind::Leaf { + env: std::option::Option::Some("PROJECT_MANIFEST_PATH"), + kind: confique::meta::LeafKind::Required { + default: std::option::Option::None, + }, + }, + }], + }; + } + #[doc = + "*Generated* by `confique`: helpers to implement `Config` for [`ProjectCfg`].\n\nDo not use directly! Only use via the `Config` and `Partial` traits and what's explained in the confique documentation.\n Any other parts of this module cannot be relied on and are not part of the semver guarantee of `confique`."] + pub mod confique_partial_project_cfg { + #![allow(missing_docs)] + use super::*; + #[serde(crate = "confique::serde")] + pub struct PartialProjectCfg { + #[serde(default, deserialize_with = + "__confique_deserialize_some_manifest_path")] + pub manifest_path: std::option::Option, + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, + unused_qualifications, clippy :: absolute_paths,)] + const _: () = + { + use confique::serde as _serde; + #[automatically_derived] + impl<'de> confique::serde::Deserialize<'de> for + PartialProjectCfg { + fn deserialize<__D>(__deserializer: __D) + -> confique::serde::__private::Result + where __D: confique::serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "manifest_path" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"manifest_path" => + _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = PartialProjectCfg; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct PartialProjectCfg") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match { + #[doc(hidden)] + struct __DeserializeWith<'de> { + value: std::option::Option, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for + __DeserializeWith<'de> { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::__private::Ok(__DeserializeWith { + value: __confique_deserialize_some_manifest_path(__deserializer)?, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData, + }) + } + } + _serde::__private::Option::map(_serde::de::SeqAccess::next_element::<__DeserializeWith<'de>>(&mut __seq)?, + |__wrap| __wrap.value) + } { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + _serde::__private::Default::default(), + }; + _serde::__private::Ok(PartialProjectCfg { + manifest_path: __field0, + }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: + _serde::__private::Option> = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("manifest_path")); + } + __field0 = + _serde::__private::Some({ + #[doc(hidden)] + struct __DeserializeWith<'de> { + value: std::option::Option, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for + __DeserializeWith<'de> { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::__private::Ok(__DeserializeWith { + value: __confique_deserialize_some_manifest_path(__deserializer)?, + phantom: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData, + }) + } + } + match _serde::de::MapAccess::next_value::<__DeserializeWith<'de>>(&mut __map) + { + _serde::__private::Ok(__wrapper) => __wrapper.value, + _serde::__private::Err(__err) => { + return _serde::__private::Err(__err); + } + } + }); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::Default::default(), + }; + _serde::__private::Ok(PartialProjectCfg { + manifest_path: __field0, + }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &["manifest_path"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "PartialProjectCfg", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; + #[automatically_derived] + impl confique::Partial for PartialProjectCfg where { + fn empty() -> Self { + Self { manifest_path: std::option::Option::None } + } + fn default_values() -> Self { + Self { manifest_path: std::option::Option::None } + } + fn from_env() -> std::result::Result { + std::result::Result::Ok(Self { + manifest_path: confique::internal::from_env("PROJECT_MANIFEST_PATH", + "ProjectCfg::manifest_path", deserialize_path)?, + }) + } + fn with_fallback(self, fallback: Self) -> Self { + Self { + manifest_path: self.manifest_path.or(fallback.manifest_path), + } + } + fn is_empty(&self) -> bool { + true && self.manifest_path.is_none() + } + fn is_complete(&self) -> bool { + true && self.manifest_path.is_some() + } + } + fn __confique_deserialize_some_manifest_path<'de, D>(deserializer: D) + -> std::result::Result, D::Error> + where D: confique::serde::Deserializer<'de> { + deserialize_path(deserializer).map(std::option::Option::Some) + } + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl _serde::Serialize for ProjectCfg { + fn serialize<__S>(&self, __serializer: __S) + -> _serde::__private::Result<__S::Ok, __S::Error> where + __S: _serde::Serializer { + let mut __serde_state = + _serde::Serializer::serialize_struct(__serializer, + "ProjectCfg", false as usize + 1)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "manifest_path", &self.manifest_path)?; + _serde::ser::SerializeStruct::end(__serde_state) + } + } + }; + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for ProjectCfg { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "manifest_path" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"manifest_path" => + _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = ProjectCfg; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct ProjectCfg") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(0usize, + &"struct ProjectCfg with 1 element")), + }; + _serde::__private::Ok(ProjectCfg { + manifest_path: __field0, + }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: _serde::__private::Option = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("manifest_path")); + } + __field0 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::de::missing_field("manifest_path")?, + }; + _serde::__private::Ok(ProjectCfg { + manifest_path: __field0, + }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &["manifest_path"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "ProjectCfg", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; + impl Fallback for ProjectCfg { + fn fallback() -> ::Partial { + Self::Partial { + manifest_path: project_dir().map(|d| + d.data_local_dir().join("manifest.toml")), + } + } + } + pub struct Cfg { + #[config(nested)] + pub editor: EditorCfg, + #[config(nested)] + pub project: ProjectCfg, + } + #[automatically_derived] + impl ::core::fmt::Debug for Cfg { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field2_finish(f, "Cfg", + "editor", &self.editor, "project", &&self.project) + } + } + #[automatically_derived] + impl confique::Config for Cfg { + type Partial = confique_partial_cfg::PartialCfg; + fn from_partial(partial: Self::Partial) + -> std::result::Result { + let out = + Self { + editor: confique::internal::map_err_prefix_path(confique::Config::from_partial(partial.editor), + "editor")?, + project: confique::internal::map_err_prefix_path(confique::Config::from_partial(partial.project), + "project")?, + }; + std::result::Result::Ok(out) + } + const META: confique::meta::Meta = + confique::meta::Meta { + name: "Cfg", + doc: &[], + fields: &[confique::meta::Field { + name: "editor", + doc: &[], + kind: confique::meta::FieldKind::Nested { + meta: &::META, + }, + }, + confique::meta::Field { + name: "project", + doc: &[], + kind: confique::meta::FieldKind::Nested { + meta: &::META, + }, + }], + }; + } + #[doc = + "*Generated* by `confique`: helpers to implement `Config` for [`Cfg`].\n\nDo not use directly! Only use via the `Config` and `Partial` traits and what's explained in the confique documentation.\n Any other parts of this module cannot be relied on and are not part of the semver guarantee of `confique`."] + pub mod confique_partial_cfg { + #![allow(missing_docs)] + use super::*; + #[serde(crate = "confique::serde")] + pub struct PartialCfg { + #[serde(default = "confique::Partial::empty")] + pub editor: ::Partial, + #[serde(default = "confique::Partial::empty")] + pub project: ::Partial, + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, + unused_qualifications, clippy :: absolute_paths,)] + const _: () = + { + use confique::serde as _serde; + #[automatically_derived] + impl<'de> confique::serde::Deserialize<'de> for PartialCfg { + fn deserialize<__D>(__deserializer: __D) + -> confique::serde::__private::Result + where __D: confique::serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __field1, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + 1u64 => _serde::__private::Ok(__Field::__field1), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "editor" => _serde::__private::Ok(__Field::__field0), + "project" => _serde::__private::Ok(__Field::__field1), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"editor" => _serde::__private::Ok(__Field::__field0), + b"project" => _serde::__private::Ok(__Field::__field1), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = PartialCfg; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct PartialCfg") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match _serde::de::SeqAccess::next_element::<::Partial>(&mut __seq)? { + _serde::__private::Some(__value) => __value, + _serde::__private::None => confique::Partial::empty(), + }; + let __field1 = + match _serde::de::SeqAccess::next_element::<::Partial>(&mut __seq)? { + _serde::__private::Some(__value) => __value, + _serde::__private::None => confique::Partial::empty(), + }; + _serde::__private::Ok(PartialCfg { + editor: __field0, + project: __field1, + }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: + _serde::__private::Option<::Partial> = _serde::__private::None; + let mut __field1: + _serde::__private::Option<::Partial> = _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("editor")); + } + __field0 = + _serde::__private::Some(_serde::de::MapAccess::next_value::<::Partial>(&mut __map)?); + } + __Field::__field1 => { + if _serde::__private::Option::is_some(&__field1) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("project")); + } + __field1 = + _serde::__private::Some(_serde::de::MapAccess::next_value::<::Partial>(&mut __map)?); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => confique::Partial::empty(), + }; + let __field1 = + match __field1 { + _serde::__private::Some(__field1) => __field1, + _serde::__private::None => confique::Partial::empty(), + }; + _serde::__private::Ok(PartialCfg { + editor: __field0, + project: __field1, + }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = + &["editor", "project"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "PartialCfg", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; + #[automatically_derived] + impl confique::Partial for PartialCfg where + EditorCfg: confique::Config, ProjectCfg: confique::Config { + fn empty() -> Self { + Self { + editor: confique::Partial::empty(), + project: confique::Partial::empty(), + } + } + fn default_values() -> Self { + Self { + editor: confique::Partial::default_values(), + project: confique::Partial::default_values(), + } + } + fn from_env() -> std::result::Result { + std::result::Result::Ok(Self { + editor: confique::Partial::from_env()?, + project: confique::Partial::from_env()?, + }) + } + fn with_fallback(self, fallback: Self) -> Self { + Self { + editor: self.editor.with_fallback(fallback.editor), + project: self.project.with_fallback(fallback.project), + } + } + fn is_empty(&self) -> bool { + true && self.editor.is_empty() && self.project.is_empty() + } + fn is_complete(&self) -> bool { + true && self.editor.is_complete() && + self.project.is_complete() + } + } + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl _serde::Serialize for Cfg { + fn serialize<__S>(&self, __serializer: __S) + -> _serde::__private::Result<__S::Ok, __S::Error> where + __S: _serde::Serializer { + let mut __serde_state = + _serde::Serializer::serialize_struct(__serializer, "Cfg", + false as usize + 1 + 1)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "editor", &self.editor)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "project", &self.project)?; + _serde::ser::SerializeStruct::end(__serde_state) + } + } + }; + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for Cfg { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __field1, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + 1u64 => _serde::__private::Ok(__Field::__field1), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "editor" => _serde::__private::Ok(__Field::__field0), + "project" => _serde::__private::Ok(__Field::__field1), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"editor" => _serde::__private::Ok(__Field::__field0), + b"project" => _serde::__private::Ok(__Field::__field1), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = Cfg; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct Cfg") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(0usize, + &"struct Cfg with 2 elements")), + }; + let __field1 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(1usize, + &"struct Cfg with 2 elements")), + }; + _serde::__private::Ok(Cfg { + editor: __field0, + project: __field1, + }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: _serde::__private::Option = + _serde::__private::None; + let mut __field1: _serde::__private::Option = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("editor")); + } + __field0 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + __Field::__field1 => { + if _serde::__private::Option::is_some(&__field1) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("project")); + } + __field1 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::de::missing_field("editor")?, + }; + let __field1 = + match __field1 { + _serde::__private::Some(__field1) => __field1, + _serde::__private::None => + _serde::__private::de::missing_field("project")?, + }; + _serde::__private::Ok(Cfg { + editor: __field0, + project: __field1, + }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = + &["editor", "project"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "Cfg", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; + impl Cfg { + pub fn from_env() -> Result { + let mut builder = Cfg::builder().env(); + if let Some(dir) = project_dir() { + builder = builder.file(dir.config_dir().join("config.toml")); + } + builder.preloaded(Self::fallback()).load().map_err(Into::into) + } + } + impl Fallback for Cfg { + fn fallback() -> ::Partial { + Self::Partial { + editor: EditorCfg::fallback(), + project: ProjectCfg::fallback(), + } + } + } +} +pub mod editor { + pub struct Editor {} +} +pub mod editor_command { + use std::{ + ffi::OsString, net::IpAddr, ops::{Deref, DerefMut}, + path::PathBuf, time::Duration, + }; + use derive_more::Display; + use osstr_traits_derive::OsDisplay; + use serde::{Deserialize, Serialize}; + use crate::collection::{CommandArgs, DelimitedVec}; + type OsStrDisplay<'a> = std::ffi::os_str::Display<'a>; + type PathDisplay<'a> = std::path::Display<'a>; + #[os_display(from_display)] + pub enum ConsistencyCheckSourceMode { + + #[display("local")] + Local, + + #[display("cacheserver")] + CacheServer, + } + #[automatically_derived] + impl ::core::clone::Clone for ConsistencyCheckSourceMode { + #[inline] + fn clone(&self) -> ConsistencyCheckSourceMode { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for ConsistencyCheckSourceMode { } + #[automatically_derived] + impl ::core::fmt::Debug for ConsistencyCheckSourceMode { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + ConsistencyCheckSourceMode::Local => "Local", + ConsistencyCheckSourceMode::CacheServer => "CacheServer", + }) + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for ConsistencyCheckSourceMode { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::Local => { + __derive_more_f.write_fmt(format_args!("local")) + } + Self::CacheServer => { + __derive_more_f.write_fmt(format_args!("cacheserver")) + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for ConsistencyCheckSourceMode { + } + #[automatically_derived] + impl ::core::cmp::PartialEq for ConsistencyCheckSourceMode { + #[inline] + fn eq(&self, other: &ConsistencyCheckSourceMode) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for ConsistencyCheckSourceMode { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for ConsistencyCheckSourceMode { + #[inline] + fn partial_cmp(&self, other: &ConsistencyCheckSourceMode) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for ConsistencyCheckSourceMode { + #[inline] + fn cmp(&self, other: &ConsistencyCheckSourceMode) + -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for ConsistencyCheckSourceMode { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[display("{0} {1}", DelimitedVec::::from(exports), + path.display())] + #[os_display("{exports} {path}", exports = DelimitedVec::<&PathBuf, + ' '>::from_iter(exports), path = path)] + pub struct ExportPackage { + path: PathBuf, + exports: Vec, + } + #[automatically_derived] + impl ::core::clone::Clone for ExportPackage { + #[inline] + fn clone(&self) -> ExportPackage { + ExportPackage { + path: ::core::clone::Clone::clone(&self.path), + exports: ::core::clone::Clone::clone(&self.exports), + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for ExportPackage { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field2_finish(f, + "ExportPackage", "path", &self.path, "exports", + &&self.exports) + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for ExportPackage { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + let path = &self.path; + let exports = &self.exports; + __derive_more_f.write_fmt(format_args!("{0} {1}", + DelimitedVec::::from(exports), path.display())) + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for ExportPackage { } + #[automatically_derived] + impl ::core::cmp::PartialEq for ExportPackage { + #[inline] + fn eq(&self, other: &ExportPackage) -> bool { + self.path == other.path && self.exports == other.exports + } + } + #[automatically_derived] + impl ::core::cmp::Eq for ExportPackage { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq>; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for ExportPackage { + #[inline] + fn partial_cmp(&self, other: &ExportPackage) + -> ::core::option::Option<::core::cmp::Ordering> { + match ::core::cmp::PartialOrd::partial_cmp(&self.path, + &other.path) { + ::core::option::Option::Some(::core::cmp::Ordering::Equal) => + ::core::cmp::PartialOrd::partial_cmp(&self.exports, + &other.exports), + cmp => cmp, + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for ExportPackage { + #[inline] + fn cmp(&self, other: &ExportPackage) -> ::core::cmp::Ordering { + match ::core::cmp::Ord::cmp(&self.path, &other.path) { + ::core::cmp::Ordering::Equal => + ::core::cmp::Ord::cmp(&self.exports, &other.exports), + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for ExportPackage { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + let Self { path, exports } = self; + (DelimitedVec::<&PathBuf, ' '>::from_iter(exports)).fmt_os(f)?; + f.write_str(" ")?; + (path).fmt_os(f)?; + Ok(()) + } + } + #[os_display(from_display)] + pub enum PlatformTextureFormat { + + #[display("dxt")] + Dxt, + + #[display("pvrtc")] + #[deprecated(note = + "PVRTC format is deprecated. Use ASTC or ETC format instead.")] + Pvrtc, + + #[display("atc")] + Atc, + + #[display("etc")] + Etc, + + #[display("etc2")] + Etc2, + + #[display("astc")] + Astc, + } + #[automatically_derived] + impl ::core::clone::Clone for PlatformTextureFormat { + #[inline] + fn clone(&self) -> PlatformTextureFormat { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for PlatformTextureFormat { } + #[automatically_derived] + impl ::core::fmt::Debug for PlatformTextureFormat { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + PlatformTextureFormat::Dxt => "Dxt", + PlatformTextureFormat::Pvrtc => "Pvrtc", + PlatformTextureFormat::Atc => "Atc", + PlatformTextureFormat::Etc => "Etc", + PlatformTextureFormat::Etc2 => "Etc2", + PlatformTextureFormat::Astc => "Astc", + }) + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for PlatformTextureFormat { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::Dxt => { + __derive_more_f.write_fmt(format_args!("dxt")) + } + Self::Pvrtc => { + __derive_more_f.write_fmt(format_args!("pvrtc")) + } + Self::Atc => { + __derive_more_f.write_fmt(format_args!("atc")) + } + Self::Etc => { + __derive_more_f.write_fmt(format_args!("etc")) + } + Self::Etc2 => { + __derive_more_f.write_fmt(format_args!("etc2")) + } + Self::Astc => { + __derive_more_f.write_fmt(format_args!("astc")) + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for PlatformTextureFormat { } + #[automatically_derived] + impl ::core::cmp::PartialEq for PlatformTextureFormat { + #[inline] + fn eq(&self, other: &PlatformTextureFormat) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for PlatformTextureFormat { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for PlatformTextureFormat { + #[inline] + fn partial_cmp(&self, other: &PlatformTextureFormat) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for PlatformTextureFormat { + #[inline] + fn cmp(&self, other: &PlatformTextureFormat) + -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for PlatformTextureFormat { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[os_display(from_display)] + pub enum TextureCompression { + + #[default] + NoOverride, + ForceUncompressed, + ForceFastCompressor, + ForceNoCrunchCompression, + } + #[automatically_derived] + impl ::core::clone::Clone for TextureCompression { + #[inline] + fn clone(&self) -> TextureCompression { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for TextureCompression { } + #[automatically_derived] + impl ::core::fmt::Debug for TextureCompression { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + TextureCompression::NoOverride => "NoOverride", + TextureCompression::ForceUncompressed => + "ForceUncompressed", + TextureCompression::ForceFastCompressor => + "ForceFastCompressor", + TextureCompression::ForceNoCrunchCompression => + "ForceNoCrunchCompression", + }) + } + } + #[automatically_derived] + impl ::core::default::Default for TextureCompression { + #[inline] + fn default() -> TextureCompression { Self::NoOverride } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for TextureCompression { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::NoOverride => { + __derive_more_f.write_str("NoOverride") + } + Self::ForceUncompressed => { + __derive_more_f.write_str("ForceUncompressed") + } + Self::ForceFastCompressor => { + __derive_more_f.write_str("ForceFastCompressor") + } + Self::ForceNoCrunchCompression => { + __derive_more_f.write_str("ForceNoCrunchCompression") + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for TextureCompression { } + #[automatically_derived] + impl ::core::cmp::PartialEq for TextureCompression { + #[inline] + fn eq(&self, other: &TextureCompression) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for TextureCompression { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for TextureCompression { + #[inline] + fn partial_cmp(&self, other: &TextureCompression) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for TextureCompression { + #[inline] + fn cmp(&self, other: &TextureCompression) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for TextureCompression { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[display("-{_variant}")] + pub enum PerforceArgument { + + #[display("vcPerforceWorkspace \"{0}\"", _0.display())] + #[os_display("vcPerforceWorkspace \"{_0}\"")] + Workspace(OsString), + + #[display("vcPerforceServer \"{0}\"", _0.display())] + #[os_display("vcPerforceServer \"{_0}\"")] + Server(OsString), + + #[display("vcPerforceUsername \"{0}\"", _0.display())] + #[os_display("vcPerforceUsername \"{_0}\"")] + Username(OsString), + + #[display("vcPerforcePassword \"{0}\"", _0.display())] + #[os_display("vcPerforcePassword \"{_0}\"")] + Password(OsString), + } + #[automatically_derived] + impl ::core::clone::Clone for PerforceArgument { + #[inline] + fn clone(&self) -> PerforceArgument { + match self { + PerforceArgument::Workspace(__self_0) => + PerforceArgument::Workspace(::core::clone::Clone::clone(__self_0)), + PerforceArgument::Server(__self_0) => + PerforceArgument::Server(::core::clone::Clone::clone(__self_0)), + PerforceArgument::Username(__self_0) => + PerforceArgument::Username(::core::clone::Clone::clone(__self_0)), + PerforceArgument::Password(__self_0) => + PerforceArgument::Password(::core::clone::Clone::clone(__self_0)), + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for PerforceArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + PerforceArgument::Workspace(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Workspace", &__self_0), + PerforceArgument::Server(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Server", &__self_0), + PerforceArgument::Username(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Username", &__self_0), + PerforceArgument::Password(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Password", &__self_0), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for PerforceArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::Workspace(_0) => { + match &format_args!("vcPerforceWorkspace \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Server(_0) => { + match &format_args!("vcPerforceServer \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Username(_0) => { + match &format_args!("vcPerforceUsername \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Password(_0) => { + match &format_args!("vcPerforcePassword \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for PerforceArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for PerforceArgument { + #[inline] + fn eq(&self, other: &PerforceArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (PerforceArgument::Workspace(__self_0), + PerforceArgument::Workspace(__arg1_0)) => + __self_0 == __arg1_0, + (PerforceArgument::Server(__self_0), + PerforceArgument::Server(__arg1_0)) => __self_0 == __arg1_0, + (PerforceArgument::Username(__self_0), + PerforceArgument::Username(__arg1_0)) => + __self_0 == __arg1_0, + (PerforceArgument::Password(__self_0), + PerforceArgument::Password(__arg1_0)) => + __self_0 == __arg1_0, + _ => unsafe { ::core::intrinsics::unreachable() } + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for PerforceArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for PerforceArgument { + #[inline] + fn partial_cmp(&self, other: &PerforceArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (PerforceArgument::Workspace(__self_0), + PerforceArgument::Workspace(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (PerforceArgument::Server(__self_0), + PerforceArgument::Server(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (PerforceArgument::Username(__self_0), + PerforceArgument::Username(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (PerforceArgument::Password(__self_0), + PerforceArgument::Password(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for PerforceArgument { + #[inline] + fn cmp(&self, other: &PerforceArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (PerforceArgument::Workspace(__self_0), + PerforceArgument::Workspace(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (PerforceArgument::Server(__self_0), + PerforceArgument::Server(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (PerforceArgument::Username(__self_0), + PerforceArgument::Username(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (PerforceArgument::Password(__self_0), + PerforceArgument::Password(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => unsafe { ::core::intrinsics::unreachable() } + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for PerforceArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + PerforceArgument::Workspace(_0) => { + f.write_str("vcPerforceWorkspace \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + PerforceArgument::Server(_0) => { + f.write_str("vcPerforceServer \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + PerforceArgument::Username(_0) => { + f.write_str("vcPerforceUsername \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + PerforceArgument::Password(_0) => { + f.write_str("vcPerforcePassword \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + } + Ok(()) + } + } + #[os_display(from_display)] + pub enum VcsMode { + + #[display("\"Visible Meta Files\"")] + VisibleMetaFiles, + + #[display("\"Hidden Meta Files\"")] + HiddenMetaFiles, + + #[display("Perforce {_0}")] + #[os_display("Perforce {_0}")] + Perforce(CommandArgs), + + #[display("PlasticSCM")] + PlasticScm, + } + #[automatically_derived] + impl ::core::clone::Clone for VcsMode { + #[inline] + fn clone(&self) -> VcsMode { + match self { + VcsMode::VisibleMetaFiles => VcsMode::VisibleMetaFiles, + VcsMode::HiddenMetaFiles => VcsMode::HiddenMetaFiles, + VcsMode::Perforce(__self_0) => + VcsMode::Perforce(::core::clone::Clone::clone(__self_0)), + VcsMode::PlasticScm => VcsMode::PlasticScm, + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for VcsMode { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + VcsMode::VisibleMetaFiles => + ::core::fmt::Formatter::write_str(f, "VisibleMetaFiles"), + VcsMode::HiddenMetaFiles => + ::core::fmt::Formatter::write_str(f, "HiddenMetaFiles"), + VcsMode::Perforce(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Perforce", &__self_0), + VcsMode::PlasticScm => + ::core::fmt::Formatter::write_str(f, "PlasticScm"), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for VcsMode { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::VisibleMetaFiles => { + __derive_more_f.write_fmt(format_args!("\"Visible Meta Files\"")) + } + Self::HiddenMetaFiles => { + __derive_more_f.write_fmt(format_args!("\"Hidden Meta Files\"")) + } + Self::Perforce(_0) => { + __derive_more_f.write_fmt(format_args!("Perforce {0}", _0)) + } + Self::PlasticScm => { + __derive_more_f.write_fmt(format_args!("PlasticSCM")) + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for VcsMode { } + #[automatically_derived] + impl ::core::cmp::PartialEq for VcsMode { + #[inline] + fn eq(&self, other: &VcsMode) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (VcsMode::Perforce(__self_0), VcsMode::Perforce(__arg1_0)) + => __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for VcsMode { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: + ::core::cmp::AssertParamIsEq>; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for VcsMode { + #[inline] + fn partial_cmp(&self, other: &VcsMode) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (VcsMode::Perforce(__self_0), VcsMode::Perforce(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for VcsMode { + #[inline] + fn cmp(&self, other: &VcsMode) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (VcsMode::Perforce(__self_0), VcsMode::Perforce(__arg1_0)) + => ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for VcsMode { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + VcsMode::Perforce(_0) => { + f.write_str("Perforce ")?; + (_0).fmt_os(f)?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum ConfigurationArgument { + + #[display("createProject \"{0}\"", _0.display())] + #[os_display("-createProject \"{_0}\"")] + CreateProject(PathBuf), + + #[display("consistencyCheck")] + ConsistencyCheck, + + #[display("consistencyCheckSourceMode {_0}")] + ConsistencyCheckSourceMode(ConsistencyCheckSourceMode), + + #[display("disable-assembly-updater {0}", DelimitedVec::::from(_0))] + #[os_display("-disable-assembly-updater {}", DelimitedVec::<&PathBuf, + ' '>::from_iter(_0))] + DisableAssemblyUpdater(Vec), + + #[display("disable-gpu-skinning")] + DisableGpuSkinning, + + #[display("disable-playback-engines {0}", DelimitedVec::::from(_0))] + #[os_display("-disable-playback-engines {}", + DelimitedVec::<&std::ffi::OsString, ' '>::from_iter(_0))] + DisablePlaybackEngines(Vec), + + #[display("executeMethod {0}", _0.display())] + #[os_display("-executeMethod {_0}")] + ExecMethod(OsString), + + #[display("exportPackage {_0}")] + #[os_display("-exportPackage {_0}")] + ExportPackage(ExportPackage), + + #[display("importPackage {0}", _0.display())] + #[os_display("-importPackage {_0}")] + ImportPackage(PathBuf), + + #[display("job-worker-count {_0}")] + JobWorkerCount(usize), + + #[display("gc-helper-count {_0}")] + GcHelperCount(usize), + + #[display("logFile {0}", _0.display())] + #[os_display("-logFile {_0}")] + LogFile(PathBuf), + + #[display("noUpm")] + NoUpm, + + #[display("openfile {0}", _0.display())] + #[os_display("-openfile {_0}")] + OpenFile(PathBuf), + + #[display("password {0}", _0.display())] + #[os_display("-password {_0}")] + Password(OsString), + + #[display("projectPath {0}", _0.display())] + #[os_display("-projectPath {_0}")] + ProjectPath(PathBuf), + + #[display("quit")] + Quit, + + #[display("releaseCodeOptimization")] + ReleaseCodeOptimization, + + #[display("setDefaultPlatformTextureFormat {_0}")] + SetDefaultPlatformTextureFormat(PlatformTextureFormat), + + #[display("overrideMaxTextureSize {_0}")] + OverrideMaxTextureSize(usize), + + #[display("overrideTextureCompression {_0}")] + OverrideTextureCompression(TextureCompression), + + #[display("silent-crashes")] + SilentCrashes, + + #[display("upmLogFile {0}", _0.display())] + #[os_display("-upmLogFile {_0}")] + UpmLogFile(PathBuf), + + #[display("username {0}", _0.display())] + #[os_display("-username {_0}")] + Username(OsString), + + #[display("vcsMode {_0}")] + VcsMode(VcsMode), + + #[display("version")] + Version, + + #[display("timestamps")] + Timestamps, + } + #[automatically_derived] + impl ::core::fmt::Debug for ConfigurationArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + ConfigurationArgument::CreateProject(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "CreateProject", &__self_0), + ConfigurationArgument::ConsistencyCheck => + ::core::fmt::Formatter::write_str(f, "ConsistencyCheck"), + ConfigurationArgument::ConsistencyCheckSourceMode(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ConsistencyCheckSourceMode", &__self_0), + ConfigurationArgument::DisableAssemblyUpdater(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "DisableAssemblyUpdater", &__self_0), + ConfigurationArgument::DisableGpuSkinning => + ::core::fmt::Formatter::write_str(f, "DisableGpuSkinning"), + ConfigurationArgument::DisablePlaybackEngines(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "DisablePlaybackEngines", &__self_0), + ConfigurationArgument::ExecMethod(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ExecMethod", &__self_0), + ConfigurationArgument::ExportPackage(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ExportPackage", &__self_0), + ConfigurationArgument::ImportPackage(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ImportPackage", &__self_0), + ConfigurationArgument::JobWorkerCount(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "JobWorkerCount", &__self_0), + ConfigurationArgument::GcHelperCount(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "GcHelperCount", &__self_0), + ConfigurationArgument::LogFile(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "LogFile", &__self_0), + ConfigurationArgument::NoUpm => + ::core::fmt::Formatter::write_str(f, "NoUpm"), + ConfigurationArgument::OpenFile(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "OpenFile", &__self_0), + ConfigurationArgument::Password(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Password", &__self_0), + ConfigurationArgument::ProjectPath(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ProjectPath", &__self_0), + ConfigurationArgument::Quit => + ::core::fmt::Formatter::write_str(f, "Quit"), + ConfigurationArgument::ReleaseCodeOptimization => + ::core::fmt::Formatter::write_str(f, + "ReleaseCodeOptimization"), + ConfigurationArgument::SetDefaultPlatformTextureFormat(__self_0) + => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "SetDefaultPlatformTextureFormat", &__self_0), + ConfigurationArgument::OverrideMaxTextureSize(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "OverrideMaxTextureSize", &__self_0), + ConfigurationArgument::OverrideTextureCompression(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "OverrideTextureCompression", &__self_0), + ConfigurationArgument::SilentCrashes => + ::core::fmt::Formatter::write_str(f, "SilentCrashes"), + ConfigurationArgument::UpmLogFile(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "UpmLogFile", &__self_0), + ConfigurationArgument::Username(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Username", &__self_0), + ConfigurationArgument::VcsMode(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "VcsMode", &__self_0), + ConfigurationArgument::Version => + ::core::fmt::Formatter::write_str(f, "Version"), + ConfigurationArgument::Timestamps => + ::core::fmt::Formatter::write_str(f, "Timestamps"), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for ConfigurationArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::CreateProject(_0) => { + match &format_args!("createProject \"{0}\"", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ConsistencyCheck => { + match &format_args!("consistencyCheck") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ConsistencyCheckSourceMode(_0) => { + match &format_args!("consistencyCheckSourceMode {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::DisableAssemblyUpdater(_0) => { + match &format_args!("disable-assembly-updater {0}", + DelimitedVec::::from(_0)) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::DisableGpuSkinning => { + match &format_args!("disable-gpu-skinning") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::DisablePlaybackEngines(_0) => { + match &format_args!("disable-playback-engines {0}", + DelimitedVec::::from(_0)) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ExecMethod(_0) => { + match &format_args!("executeMethod {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ExportPackage(_0) => { + match &format_args!("exportPackage {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ImportPackage(_0) => { + match &format_args!("importPackage {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::JobWorkerCount(_0) => { + match &format_args!("job-worker-count {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::GcHelperCount(_0) => { + match &format_args!("gc-helper-count {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::LogFile(_0) => { + match &format_args!("logFile {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::NoUpm => { + match &format_args!("noUpm") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::OpenFile(_0) => { + match &format_args!("openfile {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Password(_0) => { + match &format_args!("password {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ProjectPath(_0) => { + match &format_args!("projectPath {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Quit => { + match &format_args!("quit") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ReleaseCodeOptimization => { + match &format_args!("releaseCodeOptimization") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::SetDefaultPlatformTextureFormat(_0) => { + match &format_args!("setDefaultPlatformTextureFormat {0}", + _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::OverrideMaxTextureSize(_0) => { + match &format_args!("overrideMaxTextureSize {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::OverrideTextureCompression(_0) => { + match &format_args!("overrideTextureCompression {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::SilentCrashes => { + match &format_args!("silent-crashes") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::UpmLogFile(_0) => { + match &format_args!("upmLogFile {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Username(_0) => { + match &format_args!("username {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::VcsMode(_0) => { + match &format_args!("vcsMode {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Version => { + match &format_args!("version") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Timestamps => { + match &format_args!("timestamps") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::clone::Clone for ConfigurationArgument { + #[inline] + fn clone(&self) -> ConfigurationArgument { + match self { + ConfigurationArgument::CreateProject(__self_0) => + ConfigurationArgument::CreateProject(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::ConsistencyCheck => + ConfigurationArgument::ConsistencyCheck, + ConfigurationArgument::ConsistencyCheckSourceMode(__self_0) => + ConfigurationArgument::ConsistencyCheckSourceMode(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::DisableAssemblyUpdater(__self_0) => + ConfigurationArgument::DisableAssemblyUpdater(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::DisableGpuSkinning => + ConfigurationArgument::DisableGpuSkinning, + ConfigurationArgument::DisablePlaybackEngines(__self_0) => + ConfigurationArgument::DisablePlaybackEngines(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::ExecMethod(__self_0) => + ConfigurationArgument::ExecMethod(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::ExportPackage(__self_0) => + ConfigurationArgument::ExportPackage(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::ImportPackage(__self_0) => + ConfigurationArgument::ImportPackage(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::JobWorkerCount(__self_0) => + ConfigurationArgument::JobWorkerCount(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::GcHelperCount(__self_0) => + ConfigurationArgument::GcHelperCount(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::LogFile(__self_0) => + ConfigurationArgument::LogFile(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::NoUpm => ConfigurationArgument::NoUpm, + ConfigurationArgument::OpenFile(__self_0) => + ConfigurationArgument::OpenFile(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::Password(__self_0) => + ConfigurationArgument::Password(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::ProjectPath(__self_0) => + ConfigurationArgument::ProjectPath(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::Quit => ConfigurationArgument::Quit, + ConfigurationArgument::ReleaseCodeOptimization => + ConfigurationArgument::ReleaseCodeOptimization, + ConfigurationArgument::SetDefaultPlatformTextureFormat(__self_0) + => + ConfigurationArgument::SetDefaultPlatformTextureFormat(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::OverrideMaxTextureSize(__self_0) => + ConfigurationArgument::OverrideMaxTextureSize(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::OverrideTextureCompression(__self_0) => + ConfigurationArgument::OverrideTextureCompression(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::SilentCrashes => + ConfigurationArgument::SilentCrashes, + ConfigurationArgument::UpmLogFile(__self_0) => + ConfigurationArgument::UpmLogFile(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::Username(__self_0) => + ConfigurationArgument::Username(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::VcsMode(__self_0) => + ConfigurationArgument::VcsMode(::core::clone::Clone::clone(__self_0)), + ConfigurationArgument::Version => + ConfigurationArgument::Version, + ConfigurationArgument::Timestamps => + ConfigurationArgument::Timestamps, + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for ConfigurationArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for ConfigurationArgument { + #[inline] + fn eq(&self, other: &ConfigurationArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (ConfigurationArgument::CreateProject(__self_0), + ConfigurationArgument::CreateProject(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::ConsistencyCheckSourceMode(__self_0), + ConfigurationArgument::ConsistencyCheckSourceMode(__arg1_0)) + => __self_0 == __arg1_0, + (ConfigurationArgument::DisableAssemblyUpdater(__self_0), + ConfigurationArgument::DisableAssemblyUpdater(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::DisablePlaybackEngines(__self_0), + ConfigurationArgument::DisablePlaybackEngines(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::ExecMethod(__self_0), + ConfigurationArgument::ExecMethod(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::ExportPackage(__self_0), + ConfigurationArgument::ExportPackage(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::ImportPackage(__self_0), + ConfigurationArgument::ImportPackage(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::JobWorkerCount(__self_0), + ConfigurationArgument::JobWorkerCount(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::GcHelperCount(__self_0), + ConfigurationArgument::GcHelperCount(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::LogFile(__self_0), + ConfigurationArgument::LogFile(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::OpenFile(__self_0), + ConfigurationArgument::OpenFile(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::Password(__self_0), + ConfigurationArgument::Password(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::ProjectPath(__self_0), + ConfigurationArgument::ProjectPath(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::SetDefaultPlatformTextureFormat(__self_0), + ConfigurationArgument::SetDefaultPlatformTextureFormat(__arg1_0)) + => __self_0 == __arg1_0, + (ConfigurationArgument::OverrideMaxTextureSize(__self_0), + ConfigurationArgument::OverrideMaxTextureSize(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::OverrideTextureCompression(__self_0), + ConfigurationArgument::OverrideTextureCompression(__arg1_0)) + => __self_0 == __arg1_0, + (ConfigurationArgument::UpmLogFile(__self_0), + ConfigurationArgument::UpmLogFile(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::Username(__self_0), + ConfigurationArgument::Username(__arg1_0)) => + __self_0 == __arg1_0, + (ConfigurationArgument::VcsMode(__self_0), + ConfigurationArgument::VcsMode(__arg1_0)) => + __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for ConfigurationArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq>; + let _: ::core::cmp::AssertParamIsEq>; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for ConfigurationArgument { + #[inline] + fn partial_cmp(&self, other: &ConfigurationArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr) { + ::core::option::Option::Some(::core::cmp::Ordering::Equal) => + match (self, other) { + (ConfigurationArgument::CreateProject(__self_0), + ConfigurationArgument::CreateProject(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::ConsistencyCheckSourceMode(__self_0), + ConfigurationArgument::ConsistencyCheckSourceMode(__arg1_0)) + => ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::DisableAssemblyUpdater(__self_0), + ConfigurationArgument::DisableAssemblyUpdater(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::DisablePlaybackEngines(__self_0), + ConfigurationArgument::DisablePlaybackEngines(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::ExecMethod(__self_0), + ConfigurationArgument::ExecMethod(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::ExportPackage(__self_0), + ConfigurationArgument::ExportPackage(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::ImportPackage(__self_0), + ConfigurationArgument::ImportPackage(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::JobWorkerCount(__self_0), + ConfigurationArgument::JobWorkerCount(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::GcHelperCount(__self_0), + ConfigurationArgument::GcHelperCount(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::LogFile(__self_0), + ConfigurationArgument::LogFile(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::OpenFile(__self_0), + ConfigurationArgument::OpenFile(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::Password(__self_0), + ConfigurationArgument::Password(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::ProjectPath(__self_0), + ConfigurationArgument::ProjectPath(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::SetDefaultPlatformTextureFormat(__self_0), + ConfigurationArgument::SetDefaultPlatformTextureFormat(__arg1_0)) + => ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::OverrideMaxTextureSize(__self_0), + ConfigurationArgument::OverrideMaxTextureSize(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::OverrideTextureCompression(__self_0), + ConfigurationArgument::OverrideTextureCompression(__arg1_0)) + => ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::UpmLogFile(__self_0), + ConfigurationArgument::UpmLogFile(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::Username(__self_0), + ConfigurationArgument::Username(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ConfigurationArgument::VcsMode(__self_0), + ConfigurationArgument::VcsMode(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::option::Option::Some(::core::cmp::Ordering::Equal), + }, + cmp => cmp, + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for ConfigurationArgument { + #[inline] + fn cmp(&self, other: &ConfigurationArgument) + -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (ConfigurationArgument::CreateProject(__self_0), + ConfigurationArgument::CreateProject(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::ConsistencyCheckSourceMode(__self_0), + ConfigurationArgument::ConsistencyCheckSourceMode(__arg1_0)) + => ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::DisableAssemblyUpdater(__self_0), + ConfigurationArgument::DisableAssemblyUpdater(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::DisablePlaybackEngines(__self_0), + ConfigurationArgument::DisablePlaybackEngines(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::ExecMethod(__self_0), + ConfigurationArgument::ExecMethod(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::ExportPackage(__self_0), + ConfigurationArgument::ExportPackage(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::ImportPackage(__self_0), + ConfigurationArgument::ImportPackage(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::JobWorkerCount(__self_0), + ConfigurationArgument::JobWorkerCount(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::GcHelperCount(__self_0), + ConfigurationArgument::GcHelperCount(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::LogFile(__self_0), + ConfigurationArgument::LogFile(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::OpenFile(__self_0), + ConfigurationArgument::OpenFile(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::Password(__self_0), + ConfigurationArgument::Password(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::ProjectPath(__self_0), + ConfigurationArgument::ProjectPath(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::SetDefaultPlatformTextureFormat(__self_0), + ConfigurationArgument::SetDefaultPlatformTextureFormat(__arg1_0)) + => ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::OverrideMaxTextureSize(__self_0), + ConfigurationArgument::OverrideMaxTextureSize(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::OverrideTextureCompression(__self_0), + ConfigurationArgument::OverrideTextureCompression(__arg1_0)) + => ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::UpmLogFile(__self_0), + ConfigurationArgument::UpmLogFile(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::Username(__self_0), + ConfigurationArgument::Username(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ConfigurationArgument::VcsMode(__self_0), + ConfigurationArgument::VcsMode(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for ConfigurationArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + ConfigurationArgument::CreateProject(_0) => { + f.write_str("-createProject \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + ConfigurationArgument::DisableAssemblyUpdater(_0) => { + f.write_str("-disable-assembly-updater ")?; + (DelimitedVec::<&PathBuf, ' '>::from_iter(_0)).fmt_os(f)?; + } + ConfigurationArgument::DisablePlaybackEngines(_0) => { + f.write_str("-disable-playback-engines ")?; + (DelimitedVec::<&std::ffi::OsString, + ' '>::from_iter(_0)).fmt_os(f)?; + } + ConfigurationArgument::ExecMethod(_0) => { + f.write_str("-executeMethod ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::ExportPackage(_0) => { + f.write_str("-exportPackage ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::ImportPackage(_0) => { + f.write_str("-importPackage ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::LogFile(_0) => { + f.write_str("-logFile ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::OpenFile(_0) => { + f.write_str("-openfile ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::Password(_0) => { + f.write_str("-password ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::ProjectPath(_0) => { + f.write_str("-projectPath ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::UpmLogFile(_0) => { + f.write_str("-upmLogFile ")?; + (_0).fmt_os(f)?; + } + ConfigurationArgument::Username(_0) => { + f.write_str("-username ")?; + (_0).fmt_os(f)?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum BatchModeArgument { + + #[display("accent-apiupdate")] + AcceptApiUpdate, + + #[display("batchmode")] + BatchMode, + + #[display("ignorecompilererrors")] + IgnoreCompilerErrors, + + #[display("nographics")] + NoGraphics, + } + #[automatically_derived] + impl ::core::fmt::Debug for BatchModeArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + BatchModeArgument::AcceptApiUpdate => "AcceptApiUpdate", + BatchModeArgument::BatchMode => "BatchMode", + BatchModeArgument::IgnoreCompilerErrors => + "IgnoreCompilerErrors", + BatchModeArgument::NoGraphics => "NoGraphics", + }) + } + } + #[automatically_derived] + impl ::core::clone::Clone for BatchModeArgument { + #[inline] + fn clone(&self) -> BatchModeArgument { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for BatchModeArgument { } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for BatchModeArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::AcceptApiUpdate => { + match &format_args!("accent-apiupdate") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BatchMode => { + match &format_args!("batchmode") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::IgnoreCompilerErrors => { + match &format_args!("ignorecompilererrors") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::NoGraphics => { + match &format_args!("nographics") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for BatchModeArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for BatchModeArgument { + #[inline] + fn eq(&self, other: &BatchModeArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for BatchModeArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for BatchModeArgument { + #[inline] + fn partial_cmp(&self, other: &BatchModeArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for BatchModeArgument { + #[inline] + fn cmp(&self, other: &BatchModeArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for BatchModeArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[os_display(from_display)] + pub enum BuildTarget { + + #[display("win64")] + Win64, + + #[display("win")] + Win, + + #[display("osxuniversal")] + OsxUniversal, + + #[display("linux64")] + Linux64, + + #[display("android")] + Android, + + #[display("ios")] + IOs, + + #[display("webgl")] + WebGl, + + #[display("tvos")] + TvOs, + + #[display("windowsstoreapps")] + WindowsStoreApps, + + #[display("cloudrendering")] + CloudRendering, + + #[display("visionos")] + VisionOs, + } + #[automatically_derived] + impl ::core::fmt::Debug for BuildTarget { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + BuildTarget::Win64 => "Win64", + BuildTarget::Win => "Win", + BuildTarget::OsxUniversal => "OsxUniversal", + BuildTarget::Linux64 => "Linux64", + BuildTarget::Android => "Android", + BuildTarget::IOs => "IOs", + BuildTarget::WebGl => "WebGl", + BuildTarget::TvOs => "TvOs", + BuildTarget::WindowsStoreApps => "WindowsStoreApps", + BuildTarget::CloudRendering => "CloudRendering", + BuildTarget::VisionOs => "VisionOs", + }) + } + } + #[automatically_derived] + impl ::core::clone::Clone for BuildTarget { + #[inline] + fn clone(&self) -> BuildTarget { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for BuildTarget { } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for BuildTarget { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::Win64 => { + __derive_more_f.write_fmt(format_args!("win64")) + } + Self::Win => { + __derive_more_f.write_fmt(format_args!("win")) + } + Self::OsxUniversal => { + __derive_more_f.write_fmt(format_args!("osxuniversal")) + } + Self::Linux64 => { + __derive_more_f.write_fmt(format_args!("linux64")) + } + Self::Android => { + __derive_more_f.write_fmt(format_args!("android")) + } + Self::IOs => { + __derive_more_f.write_fmt(format_args!("ios")) + } + Self::WebGl => { + __derive_more_f.write_fmt(format_args!("webgl")) + } + Self::TvOs => { + __derive_more_f.write_fmt(format_args!("tvos")) + } + Self::WindowsStoreApps => { + __derive_more_f.write_fmt(format_args!("windowsstoreapps")) + } + Self::CloudRendering => { + __derive_more_f.write_fmt(format_args!("cloudrendering")) + } + Self::VisionOs => { + __derive_more_f.write_fmt(format_args!("visionos")) + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for BuildTarget { } + #[automatically_derived] + impl ::core::cmp::PartialEq for BuildTarget { + #[inline] + fn eq(&self, other: &BuildTarget) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for BuildTarget { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for BuildTarget { + #[inline] + fn partial_cmp(&self, other: &BuildTarget) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for BuildTarget { + #[inline] + fn cmp(&self, other: &BuildTarget) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for BuildTarget { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[os_display(from_display)] + pub enum BuildSubtarget { Player, Server, } + #[automatically_derived] + impl ::core::fmt::Debug for BuildSubtarget { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + BuildSubtarget::Player => "Player", + BuildSubtarget::Server => "Server", + }) + } + } + #[automatically_derived] + impl ::core::clone::Clone for BuildSubtarget { + #[inline] + fn clone(&self) -> BuildSubtarget { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for BuildSubtarget { } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for BuildSubtarget { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::Player => { __derive_more_f.write_str("Player") } + Self::Server => { __derive_more_f.write_str("Server") } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for BuildSubtarget { } + #[automatically_derived] + impl ::core::cmp::PartialEq for BuildSubtarget { + #[inline] + fn eq(&self, other: &BuildSubtarget) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for BuildSubtarget { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for BuildSubtarget { + #[inline] + fn partial_cmp(&self, other: &BuildSubtarget) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for BuildSubtarget { + #[inline] + fn cmp(&self, other: &BuildSubtarget) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for BuildSubtarget { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[display("-{_variant}")] + pub enum BuildArgument { + + #[display("activeBuildProfile \"{0}\"", _0.display())] + #[os_display("activeBuildProfile \"{_0}\"")] + ActiveBuildProfile(PathBuf), + + #[display("build \"{0}\"", _0.display())] + #[os_display("build \"{_0}\"")] + Build(PathBuf), + + #[display("buildLinux64Player \"{0}\"", _0.display())] + #[os_display("buildLinux64Player \"{_0}\"")] + BuildLinux64Player(PathBuf), + + #[display("buildLinuxHeadlessSimulation \"{0}\"", _0.display())] + #[os_display("buildLinuxHeadlessSimulation \"{_0}\"")] + BuildLinuxHeadlessSimulation(PathBuf), + + #[display("buildOSXUniversalPlayer \"{0}\"", _0.display())] + #[os_display("buildOSXUniversalPlayer \"{_0}\"")] + BuildOsxUniversalPlayer(PathBuf), + + #[display("buildTarget \"{_0}\"")] + BuildTarget(BuildTarget), + + #[display("standaloneBuildSubtarget \"{_0}\"")] + #[os_display("standaloneBuildSubtarget \"{_0}\"")] + StandaloneBuildSubtarget(BuildSubtarget), + + #[display("buildWindowsPlayer \"{0}\"", _0.display())] + #[os_display("buildWindowsPlayer \"{_0}\"")] + BuildWindowsPlayer(PathBuf), + + #[display("buildWindows64Player \"{0}\"", _0.display())] + #[os_display("buildWindows64Player \"{_0}\"")] + BuildWindows64Player(PathBuf), + } + #[automatically_derived] + impl ::core::fmt::Debug for BuildArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + BuildArgument::ActiveBuildProfile(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ActiveBuildProfile", &__self_0), + BuildArgument::Build(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Build", &__self_0), + BuildArgument::BuildLinux64Player(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BuildLinux64Player", &__self_0), + BuildArgument::BuildLinuxHeadlessSimulation(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BuildLinuxHeadlessSimulation", &__self_0), + BuildArgument::BuildOsxUniversalPlayer(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BuildOsxUniversalPlayer", &__self_0), + BuildArgument::BuildTarget(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BuildTarget", &__self_0), + BuildArgument::StandaloneBuildSubtarget(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "StandaloneBuildSubtarget", &__self_0), + BuildArgument::BuildWindowsPlayer(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BuildWindowsPlayer", &__self_0), + BuildArgument::BuildWindows64Player(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BuildWindows64Player", &__self_0), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for BuildArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::ActiveBuildProfile(_0) => { + match &format_args!("activeBuildProfile \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Build(_0) => { + match &format_args!("build \"{0}\"", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BuildLinux64Player(_0) => { + match &format_args!("buildLinux64Player \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BuildLinuxHeadlessSimulation(_0) => { + match &format_args!("buildLinuxHeadlessSimulation \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BuildOsxUniversalPlayer(_0) => { + match &format_args!("buildOSXUniversalPlayer \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BuildTarget(_0) => { + match &format_args!("buildTarget \"{0}\"", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::StandaloneBuildSubtarget(_0) => { + match &format_args!("standaloneBuildSubtarget \"{0}\"", _0) + { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BuildWindowsPlayer(_0) => { + match &format_args!("buildWindowsPlayer \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::BuildWindows64Player(_0) => { + match &format_args!("buildWindows64Player \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::clone::Clone for BuildArgument { + #[inline] + fn clone(&self) -> BuildArgument { + match self { + BuildArgument::ActiveBuildProfile(__self_0) => + BuildArgument::ActiveBuildProfile(::core::clone::Clone::clone(__self_0)), + BuildArgument::Build(__self_0) => + BuildArgument::Build(::core::clone::Clone::clone(__self_0)), + BuildArgument::BuildLinux64Player(__self_0) => + BuildArgument::BuildLinux64Player(::core::clone::Clone::clone(__self_0)), + BuildArgument::BuildLinuxHeadlessSimulation(__self_0) => + BuildArgument::BuildLinuxHeadlessSimulation(::core::clone::Clone::clone(__self_0)), + BuildArgument::BuildOsxUniversalPlayer(__self_0) => + BuildArgument::BuildOsxUniversalPlayer(::core::clone::Clone::clone(__self_0)), + BuildArgument::BuildTarget(__self_0) => + BuildArgument::BuildTarget(::core::clone::Clone::clone(__self_0)), + BuildArgument::StandaloneBuildSubtarget(__self_0) => + BuildArgument::StandaloneBuildSubtarget(::core::clone::Clone::clone(__self_0)), + BuildArgument::BuildWindowsPlayer(__self_0) => + BuildArgument::BuildWindowsPlayer(::core::clone::Clone::clone(__self_0)), + BuildArgument::BuildWindows64Player(__self_0) => + BuildArgument::BuildWindows64Player(::core::clone::Clone::clone(__self_0)), + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for BuildArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for BuildArgument { + #[inline] + fn eq(&self, other: &BuildArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (BuildArgument::ActiveBuildProfile(__self_0), + BuildArgument::ActiveBuildProfile(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::Build(__self_0), + BuildArgument::Build(__arg1_0)) => __self_0 == __arg1_0, + (BuildArgument::BuildLinux64Player(__self_0), + BuildArgument::BuildLinux64Player(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::BuildLinuxHeadlessSimulation(__self_0), + BuildArgument::BuildLinuxHeadlessSimulation(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::BuildOsxUniversalPlayer(__self_0), + BuildArgument::BuildOsxUniversalPlayer(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::BuildTarget(__self_0), + BuildArgument::BuildTarget(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::StandaloneBuildSubtarget(__self_0), + BuildArgument::StandaloneBuildSubtarget(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::BuildWindowsPlayer(__self_0), + BuildArgument::BuildWindowsPlayer(__arg1_0)) => + __self_0 == __arg1_0, + (BuildArgument::BuildWindows64Player(__self_0), + BuildArgument::BuildWindows64Player(__arg1_0)) => + __self_0 == __arg1_0, + _ => unsafe { ::core::intrinsics::unreachable() } + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for BuildArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for BuildArgument { + #[inline] + fn partial_cmp(&self, other: &BuildArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (BuildArgument::ActiveBuildProfile(__self_0), + BuildArgument::ActiveBuildProfile(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::Build(__self_0), + BuildArgument::Build(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::BuildLinux64Player(__self_0), + BuildArgument::BuildLinux64Player(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::BuildLinuxHeadlessSimulation(__self_0), + BuildArgument::BuildLinuxHeadlessSimulation(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::BuildOsxUniversalPlayer(__self_0), + BuildArgument::BuildOsxUniversalPlayer(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::BuildTarget(__self_0), + BuildArgument::BuildTarget(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::StandaloneBuildSubtarget(__self_0), + BuildArgument::StandaloneBuildSubtarget(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::BuildWindowsPlayer(__self_0), + BuildArgument::BuildWindowsPlayer(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (BuildArgument::BuildWindows64Player(__self_0), + BuildArgument::BuildWindows64Player(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for BuildArgument { + #[inline] + fn cmp(&self, other: &BuildArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (BuildArgument::ActiveBuildProfile(__self_0), + BuildArgument::ActiveBuildProfile(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::Build(__self_0), + BuildArgument::Build(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::BuildLinux64Player(__self_0), + BuildArgument::BuildLinux64Player(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::BuildLinuxHeadlessSimulation(__self_0), + BuildArgument::BuildLinuxHeadlessSimulation(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::BuildOsxUniversalPlayer(__self_0), + BuildArgument::BuildOsxUniversalPlayer(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::BuildTarget(__self_0), + BuildArgument::BuildTarget(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::StandaloneBuildSubtarget(__self_0), + BuildArgument::StandaloneBuildSubtarget(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::BuildWindowsPlayer(__self_0), + BuildArgument::BuildWindowsPlayer(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (BuildArgument::BuildWindows64Player(__self_0), + BuildArgument::BuildWindows64Player(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => unsafe { ::core::intrinsics::unreachable() } + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for BuildArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + BuildArgument::ActiveBuildProfile(_0) => { + f.write_str("activeBuildProfile \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::Build(_0) => { + f.write_str("build \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::BuildLinux64Player(_0) => { + f.write_str("buildLinux64Player \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::BuildLinuxHeadlessSimulation(_0) => { + f.write_str("buildLinuxHeadlessSimulation \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::BuildOsxUniversalPlayer(_0) => { + f.write_str("buildOSXUniversalPlayer \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::BuildTarget(_0) => { + f.write_str("BuildTarget")?; + } + BuildArgument::StandaloneBuildSubtarget(_0) => { + f.write_str("standaloneBuildSubtarget \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::BuildWindowsPlayer(_0) => { + f.write_str("buildWindowsPlayer \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + BuildArgument::BuildWindows64Player(_0) => { + f.write_str("buildWindows64Player \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum CacheServerArgument { + + #[display("EnableCacheServer")] + Enable, + + #[display("cacheServerEndpoint {_0}:{_1}")] + Endpoint(IpAddr, u16), + + #[display("cacheServerNamespacePrefix \"{0}\"", _0.display())] + #[os_display("cacheServerNamespacePrefix \"{_0}\"")] + NamespacePrefix(OsString), + + #[display("cacheServerEnableDownload {_0}")] + EnableDownload(bool), + + #[display("cacheServerEnableUpload {_0}")] + EnableUpload(bool), + + #[display("cacheServerWaitForConnection {0}", _0.as_millis())] + WaitForConnection(Duration), + + #[display("cacheServerWaitForUploadCompletion")] + WaitForUploadCompletion, + + #[display("cacheServerDownloadBatchSize {_0}")] + DownloadBatchSize(usize), + + #[display("cacheServerUploadAllRevisions")] + UploadAllRevisions, + + #[display("cacheServerUploadExistingShaderCache")] + UploadExistingShaderCache, + } + #[automatically_derived] + impl ::core::fmt::Debug for CacheServerArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + CacheServerArgument::Enable => + ::core::fmt::Formatter::write_str(f, "Enable"), + CacheServerArgument::Endpoint(__self_0, __self_1) => + ::core::fmt::Formatter::debug_tuple_field2_finish(f, + "Endpoint", __self_0, &__self_1), + CacheServerArgument::NamespacePrefix(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "NamespacePrefix", &__self_0), + CacheServerArgument::EnableDownload(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "EnableDownload", &__self_0), + CacheServerArgument::EnableUpload(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "EnableUpload", &__self_0), + CacheServerArgument::WaitForConnection(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "WaitForConnection", &__self_0), + CacheServerArgument::WaitForUploadCompletion => + ::core::fmt::Formatter::write_str(f, + "WaitForUploadCompletion"), + CacheServerArgument::DownloadBatchSize(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "DownloadBatchSize", &__self_0), + CacheServerArgument::UploadAllRevisions => + ::core::fmt::Formatter::write_str(f, "UploadAllRevisions"), + CacheServerArgument::UploadExistingShaderCache => + ::core::fmt::Formatter::write_str(f, + "UploadExistingShaderCache"), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for CacheServerArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::Enable => { + match &format_args!("EnableCacheServer") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Endpoint(_0, _1) => { + match &format_args!("cacheServerEndpoint {0}:{1}", _0, _1) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::NamespacePrefix(_0) => { + match &format_args!("cacheServerNamespacePrefix \"{0}\"", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::EnableDownload(_0) => { + match &format_args!("cacheServerEnableDownload {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::EnableUpload(_0) => { + match &format_args!("cacheServerEnableUpload {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::WaitForConnection(_0) => { + match &format_args!("cacheServerWaitForConnection {0}", + _0.as_millis()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::WaitForUploadCompletion => { + match &format_args!("cacheServerWaitForUploadCompletion") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::DownloadBatchSize(_0) => { + match &format_args!("cacheServerDownloadBatchSize {0}", _0) + { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::UploadAllRevisions => { + match &format_args!("cacheServerUploadAllRevisions") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::UploadExistingShaderCache => { + match &format_args!("cacheServerUploadExistingShaderCache") + { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::clone::Clone for CacheServerArgument { + #[inline] + fn clone(&self) -> CacheServerArgument { + match self { + CacheServerArgument::Enable => CacheServerArgument::Enable, + CacheServerArgument::Endpoint(__self_0, __self_1) => + CacheServerArgument::Endpoint(::core::clone::Clone::clone(__self_0), + ::core::clone::Clone::clone(__self_1)), + CacheServerArgument::NamespacePrefix(__self_0) => + CacheServerArgument::NamespacePrefix(::core::clone::Clone::clone(__self_0)), + CacheServerArgument::EnableDownload(__self_0) => + CacheServerArgument::EnableDownload(::core::clone::Clone::clone(__self_0)), + CacheServerArgument::EnableUpload(__self_0) => + CacheServerArgument::EnableUpload(::core::clone::Clone::clone(__self_0)), + CacheServerArgument::WaitForConnection(__self_0) => + CacheServerArgument::WaitForConnection(::core::clone::Clone::clone(__self_0)), + CacheServerArgument::WaitForUploadCompletion => + CacheServerArgument::WaitForUploadCompletion, + CacheServerArgument::DownloadBatchSize(__self_0) => + CacheServerArgument::DownloadBatchSize(::core::clone::Clone::clone(__self_0)), + CacheServerArgument::UploadAllRevisions => + CacheServerArgument::UploadAllRevisions, + CacheServerArgument::UploadExistingShaderCache => + CacheServerArgument::UploadExistingShaderCache, + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for CacheServerArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for CacheServerArgument { + #[inline] + fn eq(&self, other: &CacheServerArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (CacheServerArgument::Endpoint(__self_0, __self_1), + CacheServerArgument::Endpoint(__arg1_0, __arg1_1)) => + __self_1 == __arg1_1 && __self_0 == __arg1_0, + (CacheServerArgument::NamespacePrefix(__self_0), + CacheServerArgument::NamespacePrefix(__arg1_0)) => + __self_0 == __arg1_0, + (CacheServerArgument::EnableDownload(__self_0), + CacheServerArgument::EnableDownload(__arg1_0)) => + __self_0 == __arg1_0, + (CacheServerArgument::EnableUpload(__self_0), + CacheServerArgument::EnableUpload(__arg1_0)) => + __self_0 == __arg1_0, + (CacheServerArgument::WaitForConnection(__self_0), + CacheServerArgument::WaitForConnection(__arg1_0)) => + __self_0 == __arg1_0, + (CacheServerArgument::DownloadBatchSize(__self_0), + CacheServerArgument::DownloadBatchSize(__arg1_0)) => + __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for CacheServerArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for CacheServerArgument { + #[inline] + fn partial_cmp(&self, other: &CacheServerArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (CacheServerArgument::Endpoint(__self_0, __self_1), + CacheServerArgument::Endpoint(__arg1_0, __arg1_1)) => + match ::core::cmp::PartialOrd::partial_cmp(__self_0, + __arg1_0) { + ::core::option::Option::Some(::core::cmp::Ordering::Equal) + => ::core::cmp::PartialOrd::partial_cmp(__self_1, __arg1_1), + cmp => cmp, + }, + (CacheServerArgument::NamespacePrefix(__self_0), + CacheServerArgument::NamespacePrefix(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (CacheServerArgument::EnableDownload(__self_0), + CacheServerArgument::EnableDownload(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (CacheServerArgument::EnableUpload(__self_0), + CacheServerArgument::EnableUpload(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (CacheServerArgument::WaitForConnection(__self_0), + CacheServerArgument::WaitForConnection(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (CacheServerArgument::DownloadBatchSize(__self_0), + CacheServerArgument::DownloadBatchSize(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for CacheServerArgument { + #[inline] + fn cmp(&self, other: &CacheServerArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (CacheServerArgument::Endpoint(__self_0, __self_1), + CacheServerArgument::Endpoint(__arg1_0, __arg1_1)) => + match ::core::cmp::Ord::cmp(__self_0, __arg1_0) { + ::core::cmp::Ordering::Equal => + ::core::cmp::Ord::cmp(__self_1, __arg1_1), + cmp => cmp, + }, + (CacheServerArgument::NamespacePrefix(__self_0), + CacheServerArgument::NamespacePrefix(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (CacheServerArgument::EnableDownload(__self_0), + CacheServerArgument::EnableDownload(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (CacheServerArgument::EnableUpload(__self_0), + CacheServerArgument::EnableUpload(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (CacheServerArgument::WaitForConnection(__self_0), + CacheServerArgument::WaitForConnection(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (CacheServerArgument::DownloadBatchSize(__self_0), + CacheServerArgument::DownloadBatchSize(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for CacheServerArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + CacheServerArgument::NamespacePrefix(_0) => { + f.write_str("cacheServerNamespacePrefix \"")?; + (_0).fmt_os(f)?; + f.write_str("\"")?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + #[os_display(from_display)] + pub enum StackTraceLogType { + None, + + #[display("\"Script Only\"")] + ScriptOnly, + + #[default] + Full, + } + #[automatically_derived] + impl ::core::fmt::Debug for StackTraceLogType { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + StackTraceLogType::None => "None", + StackTraceLogType::ScriptOnly => "ScriptOnly", + StackTraceLogType::Full => "Full", + }) + } + } + #[automatically_derived] + impl ::core::default::Default for StackTraceLogType { + #[inline] + fn default() -> StackTraceLogType { Self::Full } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for StackTraceLogType { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::None => { __derive_more_f.write_str("None") } + Self::ScriptOnly => { + __derive_more_f.write_fmt(format_args!("\"Script Only\"")) + } + Self::Full => { __derive_more_f.write_str("Full") } + } + } + } + #[automatically_derived] + impl ::core::clone::Clone for StackTraceLogType { + #[inline] + fn clone(&self) -> StackTraceLogType { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for StackTraceLogType { } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for StackTraceLogType { } + #[automatically_derived] + impl ::core::cmp::PartialEq for StackTraceLogType { + #[inline] + fn eq(&self, other: &StackTraceLogType) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for StackTraceLogType { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for StackTraceLogType { + #[inline] + fn partial_cmp(&self, other: &StackTraceLogType) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for StackTraceLogType { + #[inline] + fn cmp(&self, other: &StackTraceLogType) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for StackTraceLogType { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum DebugArgument { + + #[display("disableManagedDebugger")] + DisableManagedDebugger, + + #[display("diag-debug-shader-compiler")] + DiagDebugShaderCompiler, + + #[display("debugCodeOptimization")] + DebugCodeOptimization, + + #[display("enableCodeCoverage")] + EnableCodeCoverage, + + #[display("force-d3d12-debug")] + ForceD3d12Debug, + + #[display("force-d3d12-debug-gbv")] + ForceD3d12DebugGbv, + + #[display("force-vulkan-layers")] + ForceVulkanLayers, + + #[display("StackTraceLogType {_0}")] + #[os_display("StackTraceLogType {_0}")] + StackTraceLogType(StackTraceLogType), + + #[display("log-memory-performance-stats")] + LogMemoryPerformanceStats, + + #[display("wait-for-managed-debugger")] + WaitForManagedDebugger, + + #[display("wait-for-native-debugger")] + WaitForNativeDebugger, + } + #[automatically_derived] + impl ::core::fmt::Debug for DebugArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + DebugArgument::DisableManagedDebugger => + ::core::fmt::Formatter::write_str(f, + "DisableManagedDebugger"), + DebugArgument::DiagDebugShaderCompiler => + ::core::fmt::Formatter::write_str(f, + "DiagDebugShaderCompiler"), + DebugArgument::DebugCodeOptimization => + ::core::fmt::Formatter::write_str(f, + "DebugCodeOptimization"), + DebugArgument::EnableCodeCoverage => + ::core::fmt::Formatter::write_str(f, "EnableCodeCoverage"), + DebugArgument::ForceD3d12Debug => + ::core::fmt::Formatter::write_str(f, "ForceD3d12Debug"), + DebugArgument::ForceD3d12DebugGbv => + ::core::fmt::Formatter::write_str(f, "ForceD3d12DebugGbv"), + DebugArgument::ForceVulkanLayers => + ::core::fmt::Formatter::write_str(f, "ForceVulkanLayers"), + DebugArgument::StackTraceLogType(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "StackTraceLogType", &__self_0), + DebugArgument::LogMemoryPerformanceStats => + ::core::fmt::Formatter::write_str(f, + "LogMemoryPerformanceStats"), + DebugArgument::WaitForManagedDebugger => + ::core::fmt::Formatter::write_str(f, + "WaitForManagedDebugger"), + DebugArgument::WaitForNativeDebugger => + ::core::fmt::Formatter::write_str(f, + "WaitForNativeDebugger"), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for DebugArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::DisableManagedDebugger => { + match &format_args!("disableManagedDebugger") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::DiagDebugShaderCompiler => { + match &format_args!("diag-debug-shader-compiler") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::DebugCodeOptimization => { + match &format_args!("debugCodeOptimization") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::EnableCodeCoverage => { + match &format_args!("enableCodeCoverage") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceD3d12Debug => { + match &format_args!("force-d3d12-debug") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceD3d12DebugGbv => { + match &format_args!("force-d3d12-debug-gbv") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceVulkanLayers => { + match &format_args!("force-vulkan-layers") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::StackTraceLogType(_0) => { + match &format_args!("StackTraceLogType {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::LogMemoryPerformanceStats => { + match &format_args!("log-memory-performance-stats") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::WaitForManagedDebugger => { + match &format_args!("wait-for-managed-debugger") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::WaitForNativeDebugger => { + match &format_args!("wait-for-native-debugger") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::clone::Clone for DebugArgument { + #[inline] + fn clone(&self) -> DebugArgument { + let _: ::core::clone::AssertParamIsClone; + *self + } + } + #[automatically_derived] + impl ::core::marker::Copy for DebugArgument { } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for DebugArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for DebugArgument { + #[inline] + fn eq(&self, other: &DebugArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (DebugArgument::StackTraceLogType(__self_0), + DebugArgument::StackTraceLogType(__arg1_0)) => + __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for DebugArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for DebugArgument { + #[inline] + fn partial_cmp(&self, other: &DebugArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (DebugArgument::StackTraceLogType(__self_0), + DebugArgument::StackTraceLogType(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for DebugArgument { + #[inline] + fn cmp(&self, other: &DebugArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (DebugArgument::StackTraceLogType(__self_0), + DebugArgument::StackTraceLogType(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for DebugArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + DebugArgument::StackTraceLogType(_0) => { + f.write_str("StackTraceLogType ")?; + (_0).fmt_os(f)?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum GraphicsApiArgument { + + #[display("force-clamped")] + ForceClamped, + + #[display("force-d3d11")] + ForceD3d11, + + #[display("force-d3d12")] + ForceD3d12, + + #[display("force-device-index")] + ForceDeviceIndex, + + #[display("force-glcore")] + ForceGlCore, + + #[display("force-glcoreXY")] + ForceGlCoreXy, + + #[display("force-gles")] + ForceGlEs, + + #[display("force-glesXY")] + ForceGlEsXy, + + #[display("force-opengl")] + ForceOpenGl, + + #[display("force-vulkan")] + ForceVulkan, + } + #[automatically_derived] + impl ::core::clone::Clone for GraphicsApiArgument { + #[inline] + fn clone(&self) -> GraphicsApiArgument { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for GraphicsApiArgument { } + #[automatically_derived] + impl ::core::fmt::Debug for GraphicsApiArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + GraphicsApiArgument::ForceClamped => "ForceClamped", + GraphicsApiArgument::ForceD3d11 => "ForceD3d11", + GraphicsApiArgument::ForceD3d12 => "ForceD3d12", + GraphicsApiArgument::ForceDeviceIndex => "ForceDeviceIndex", + GraphicsApiArgument::ForceGlCore => "ForceGlCore", + GraphicsApiArgument::ForceGlCoreXy => "ForceGlCoreXy", + GraphicsApiArgument::ForceGlEs => "ForceGlEs", + GraphicsApiArgument::ForceGlEsXy => "ForceGlEsXy", + GraphicsApiArgument::ForceOpenGl => "ForceOpenGl", + GraphicsApiArgument::ForceVulkan => "ForceVulkan", + }) + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for GraphicsApiArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::ForceClamped => { + match &format_args!("force-clamped") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceD3d11 => { + match &format_args!("force-d3d11") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceD3d12 => { + match &format_args!("force-d3d12") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceDeviceIndex => { + match &format_args!("force-device-index") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceGlCore => { + match &format_args!("force-glcore") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceGlCoreXy => { + match &format_args!("force-glcoreXY") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceGlEs => { + match &format_args!("force-gles") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceGlEsXy => { + match &format_args!("force-glesXY") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceOpenGl => { + match &format_args!("force-opengl") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceVulkan => { + match &format_args!("force-vulkan") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for GraphicsApiArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for GraphicsApiArgument { + #[inline] + fn eq(&self, other: &GraphicsApiArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for GraphicsApiArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for GraphicsApiArgument { + #[inline] + fn partial_cmp(&self, other: &GraphicsApiArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for GraphicsApiArgument { + #[inline] + fn cmp(&self, other: &GraphicsApiArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for GraphicsApiArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum LicenseArgument { + + #[display("createManualActivationFile")] + CreateManualActivationFile, + + #[display("manualLicenseFile {0}", _0.display())] + #[os_display("manualLicenseFile {_0}")] + ManualLicenseFile(PathBuf), + + #[display("returnlicense")] + ReturnLicense, + + #[display("serial {0}", _0.display())] + #[os_display("serial {_0}")] + Serial(OsString), + } + #[automatically_derived] + impl ::core::clone::Clone for LicenseArgument { + #[inline] + fn clone(&self) -> LicenseArgument { + match self { + LicenseArgument::CreateManualActivationFile => + LicenseArgument::CreateManualActivationFile, + LicenseArgument::ManualLicenseFile(__self_0) => + LicenseArgument::ManualLicenseFile(::core::clone::Clone::clone(__self_0)), + LicenseArgument::ReturnLicense => + LicenseArgument::ReturnLicense, + LicenseArgument::Serial(__self_0) => + LicenseArgument::Serial(::core::clone::Clone::clone(__self_0)), + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for LicenseArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + LicenseArgument::CreateManualActivationFile => + ::core::fmt::Formatter::write_str(f, + "CreateManualActivationFile"), + LicenseArgument::ManualLicenseFile(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ManualLicenseFile", &__self_0), + LicenseArgument::ReturnLicense => + ::core::fmt::Formatter::write_str(f, "ReturnLicense"), + LicenseArgument::Serial(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Serial", &__self_0), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for LicenseArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::CreateManualActivationFile => { + match &format_args!("createManualActivationFile") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ManualLicenseFile(_0) => { + match &format_args!("manualLicenseFile {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ReturnLicense => { + match &format_args!("returnlicense") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Serial(_0) => { + match &format_args!("serial {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for LicenseArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for LicenseArgument { + #[inline] + fn eq(&self, other: &LicenseArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (LicenseArgument::ManualLicenseFile(__self_0), + LicenseArgument::ManualLicenseFile(__arg1_0)) => + __self_0 == __arg1_0, + (LicenseArgument::Serial(__self_0), + LicenseArgument::Serial(__arg1_0)) => __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for LicenseArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for LicenseArgument { + #[inline] + fn partial_cmp(&self, other: &LicenseArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (LicenseArgument::ManualLicenseFile(__self_0), + LicenseArgument::ManualLicenseFile(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (LicenseArgument::Serial(__self_0), + LicenseArgument::Serial(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for LicenseArgument { + #[inline] + fn cmp(&self, other: &LicenseArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (LicenseArgument::ManualLicenseFile(__self_0), + LicenseArgument::ManualLicenseFile(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (LicenseArgument::Serial(__self_0), + LicenseArgument::Serial(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for LicenseArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + LicenseArgument::ManualLicenseFile(_0) => { + f.write_str("manualLicenseFile ")?; + (_0).fmt_os(f)?; + } + LicenseArgument::Serial(_0) => { + f.write_str("serial ")?; + (_0).fmt_os(f)?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum MetalArgument { + + #[display("force-low-power-device")] + ForceLowPowerDevice, + + #[display("force-metal")] + ForceMetal, + + #[display("enable-metal-capture")] + EnableMetalCapture, + } + #[automatically_derived] + impl ::core::clone::Clone for MetalArgument { + #[inline] + fn clone(&self) -> MetalArgument { *self } + } + #[automatically_derived] + impl ::core::marker::Copy for MetalArgument { } + #[automatically_derived] + impl ::core::fmt::Debug for MetalArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, + match self { + MetalArgument::ForceLowPowerDevice => "ForceLowPowerDevice", + MetalArgument::ForceMetal => "ForceMetal", + MetalArgument::EnableMetalCapture => "EnableMetalCapture", + }) + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for MetalArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::ForceLowPowerDevice => { + match &format_args!("force-low-power-device") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::ForceMetal => { + match &format_args!("force-metal") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::EnableMetalCapture => { + match &format_args!("enable-metal-capture") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for MetalArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for MetalArgument { + #[inline] + fn eq(&self, other: &MetalArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr + } + } + #[automatically_derived] + impl ::core::cmp::Eq for MetalArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () {} + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for MetalArgument { + #[inline] + fn partial_cmp(&self, other: &MetalArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for MetalArgument { + #[inline] + fn cmp(&self, other: &MetalArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) + } + } + impl osstr_traits::OsDisplay for MetalArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { _ => { f.write_str(&self.to_string())? } } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum ProfilerArgument { + + #[display("deepprofiling")] + DeepProfiling, + + #[display("profiler-enable")] + Enable, + + #[display("profiler-log-file {0}", _0.display())] + #[os_display("profiler-log-file {_0}")] + LogFile(PathBuf), + + #[display("profiler-capture-frame-count {_0}")] + CaptureFrameCount(usize), + + #[display("profiler-maxusedmemory {_0}")] + MaxUsedMemory(usize), + } + #[automatically_derived] + impl ::core::clone::Clone for ProfilerArgument { + #[inline] + fn clone(&self) -> ProfilerArgument { + match self { + ProfilerArgument::DeepProfiling => + ProfilerArgument::DeepProfiling, + ProfilerArgument::Enable => ProfilerArgument::Enable, + ProfilerArgument::LogFile(__self_0) => + ProfilerArgument::LogFile(::core::clone::Clone::clone(__self_0)), + ProfilerArgument::CaptureFrameCount(__self_0) => + ProfilerArgument::CaptureFrameCount(::core::clone::Clone::clone(__self_0)), + ProfilerArgument::MaxUsedMemory(__self_0) => + ProfilerArgument::MaxUsedMemory(::core::clone::Clone::clone(__self_0)), + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for ProfilerArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + ProfilerArgument::DeepProfiling => + ::core::fmt::Formatter::write_str(f, "DeepProfiling"), + ProfilerArgument::Enable => + ::core::fmt::Formatter::write_str(f, "Enable"), + ProfilerArgument::LogFile(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "LogFile", &__self_0), + ProfilerArgument::CaptureFrameCount(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "CaptureFrameCount", &__self_0), + ProfilerArgument::MaxUsedMemory(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "MaxUsedMemory", &__self_0), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for ProfilerArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::DeepProfiling => { + match &format_args!("deepprofiling") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::Enable => { + match &format_args!("profiler-enable") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::LogFile(_0) => { + match &format_args!("profiler-log-file {0}", _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::CaptureFrameCount(_0) => { + match &format_args!("profiler-capture-frame-count {0}", _0) + { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::MaxUsedMemory(_0) => { + match &format_args!("profiler-maxusedmemory {0}", _0) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for ProfilerArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for ProfilerArgument { + #[inline] + fn eq(&self, other: &ProfilerArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (ProfilerArgument::LogFile(__self_0), + ProfilerArgument::LogFile(__arg1_0)) => + __self_0 == __arg1_0, + (ProfilerArgument::CaptureFrameCount(__self_0), + ProfilerArgument::CaptureFrameCount(__arg1_0)) => + __self_0 == __arg1_0, + (ProfilerArgument::MaxUsedMemory(__self_0), + ProfilerArgument::MaxUsedMemory(__arg1_0)) => + __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for ProfilerArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for ProfilerArgument { + #[inline] + fn partial_cmp(&self, other: &ProfilerArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (ProfilerArgument::LogFile(__self_0), + ProfilerArgument::LogFile(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ProfilerArgument::CaptureFrameCount(__self_0), + ProfilerArgument::CaptureFrameCount(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (ProfilerArgument::MaxUsedMemory(__self_0), + ProfilerArgument::MaxUsedMemory(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for ProfilerArgument { + #[inline] + fn cmp(&self, other: &ProfilerArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (ProfilerArgument::LogFile(__self_0), + ProfilerArgument::LogFile(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ProfilerArgument::CaptureFrameCount(__self_0), + ProfilerArgument::CaptureFrameCount(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (ProfilerArgument::MaxUsedMemory(__self_0), + ProfilerArgument::MaxUsedMemory(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for ProfilerArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + ProfilerArgument::LogFile(_0) => { + f.write_str("profiler-log-file ")?; + (_0).fmt_os(f)?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + #[display("-{_variant}")] + #[os_display(from_display)] + pub enum EditorSpecialArgument { + + #[display("enableIncompatibleAssetDowngrade")] + EnableIncompatibleAssetDowngrade, + + #[display("giCustomCacheLocation {0}", _0.display())] + #[os_display("giCustomCacheLocation {_0}")] + GiCustomCacheLocation(PathBuf), + } + #[automatically_derived] + impl ::core::clone::Clone for EditorSpecialArgument { + #[inline] + fn clone(&self) -> EditorSpecialArgument { + match self { + EditorSpecialArgument::EnableIncompatibleAssetDowngrade => + EditorSpecialArgument::EnableIncompatibleAssetDowngrade, + EditorSpecialArgument::GiCustomCacheLocation(__self_0) => + EditorSpecialArgument::GiCustomCacheLocation(::core::clone::Clone::clone(__self_0)), + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for EditorSpecialArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + EditorSpecialArgument::EnableIncompatibleAssetDowngrade => + ::core::fmt::Formatter::write_str(f, + "EnableIncompatibleAssetDowngrade"), + EditorSpecialArgument::GiCustomCacheLocation(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "GiCustomCacheLocation", &__self_0), + } + } + } + #[allow(unreachable_code)] + #[automatically_derived] + impl derive_more::core::fmt::Display for EditorSpecialArgument { + fn fmt(&self, + __derive_more_f: &mut derive_more::core::fmt::Formatter<'_>) + -> derive_more::core::fmt::Result { + match self { + Self::EnableIncompatibleAssetDowngrade => { + match &format_args!("enableIncompatibleAssetDowngrade") { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + Self::GiCustomCacheLocation(_0) => { + match &format_args!("giCustomCacheLocation {0}", + _0.display()) { + _variant => + __derive_more_f.write_fmt(format_args!("-{0}", _variant)), + } + } + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for EditorSpecialArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for EditorSpecialArgument { + #[inline] + fn eq(&self, other: &EditorSpecialArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (EditorSpecialArgument::GiCustomCacheLocation(__self_0), + EditorSpecialArgument::GiCustomCacheLocation(__arg1_0)) => + __self_0 == __arg1_0, + _ => true, + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for EditorSpecialArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for EditorSpecialArgument { + #[inline] + fn partial_cmp(&self, other: &EditorSpecialArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (EditorSpecialArgument::GiCustomCacheLocation(__self_0), + EditorSpecialArgument::GiCustomCacheLocation(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for EditorSpecialArgument { + #[inline] + fn cmp(&self, other: &EditorSpecialArgument) + -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (EditorSpecialArgument::GiCustomCacheLocation(__self_0), + EditorSpecialArgument::GiCustomCacheLocation(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => ::core::cmp::Ordering::Equal, + }, + cmp => cmp, + } + } + } + impl osstr_traits::OsDisplay for EditorSpecialArgument { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) + -> std::fmt::Result { + match self { + EditorSpecialArgument::GiCustomCacheLocation(_0) => { + f.write_str("giCustomCacheLocation ")?; + (_0).fmt_os(f)?; + } + _ => { f.write_str(&self.to_string())? } + } + Ok(()) + } + } + pub enum UnityArgument { + Configuration(ConfigurationArgument), + BatchMode(BatchModeArgument), + Build(BuildArgument), + CacheServer(CacheServerArgument), + Debug(DebugArgument), + GraphicsApi(GraphicsApiArgument), + License(LicenseArgument), + Metal(MetalArgument), + Profiler(ProfilerArgument), + Editor(EditorSpecialArgument), + Extra(OsString), + } + #[automatically_derived] + impl ::core::clone::Clone for UnityArgument { + #[inline] + fn clone(&self) -> UnityArgument { + match self { + UnityArgument::Configuration(__self_0) => + UnityArgument::Configuration(::core::clone::Clone::clone(__self_0)), + UnityArgument::BatchMode(__self_0) => + UnityArgument::BatchMode(::core::clone::Clone::clone(__self_0)), + UnityArgument::Build(__self_0) => + UnityArgument::Build(::core::clone::Clone::clone(__self_0)), + UnityArgument::CacheServer(__self_0) => + UnityArgument::CacheServer(::core::clone::Clone::clone(__self_0)), + UnityArgument::Debug(__self_0) => + UnityArgument::Debug(::core::clone::Clone::clone(__self_0)), + UnityArgument::GraphicsApi(__self_0) => + UnityArgument::GraphicsApi(::core::clone::Clone::clone(__self_0)), + UnityArgument::License(__self_0) => + UnityArgument::License(::core::clone::Clone::clone(__self_0)), + UnityArgument::Metal(__self_0) => + UnityArgument::Metal(::core::clone::Clone::clone(__self_0)), + UnityArgument::Profiler(__self_0) => + UnityArgument::Profiler(::core::clone::Clone::clone(__self_0)), + UnityArgument::Editor(__self_0) => + UnityArgument::Editor(::core::clone::Clone::clone(__self_0)), + UnityArgument::Extra(__self_0) => + UnityArgument::Extra(::core::clone::Clone::clone(__self_0)), + } + } + } + #[automatically_derived] + impl ::core::fmt::Debug for UnityArgument { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + UnityArgument::Configuration(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Configuration", &__self_0), + UnityArgument::BatchMode(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "BatchMode", &__self_0), + UnityArgument::Build(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Build", &__self_0), + UnityArgument::CacheServer(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "CacheServer", &__self_0), + UnityArgument::Debug(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Debug", &__self_0), + UnityArgument::GraphicsApi(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "GraphicsApi", &__self_0), + UnityArgument::License(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "License", &__self_0), + UnityArgument::Metal(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Metal", &__self_0), + UnityArgument::Profiler(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Profiler", &__self_0), + UnityArgument::Editor(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Editor", &__self_0), + UnityArgument::Extra(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Extra", &__self_0), + } + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for UnityArgument { } + #[automatically_derived] + impl ::core::cmp::PartialEq for UnityArgument { + #[inline] + fn eq(&self, other: &UnityArgument) -> bool { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + __self_discr == __arg1_discr && + match (self, other) { + (UnityArgument::Configuration(__self_0), + UnityArgument::Configuration(__arg1_0)) => + __self_0 == __arg1_0, + (UnityArgument::BatchMode(__self_0), + UnityArgument::BatchMode(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::Build(__self_0), + UnityArgument::Build(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::CacheServer(__self_0), + UnityArgument::CacheServer(__arg1_0)) => + __self_0 == __arg1_0, + (UnityArgument::Debug(__self_0), + UnityArgument::Debug(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::GraphicsApi(__self_0), + UnityArgument::GraphicsApi(__arg1_0)) => + __self_0 == __arg1_0, + (UnityArgument::License(__self_0), + UnityArgument::License(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::Metal(__self_0), + UnityArgument::Metal(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::Profiler(__self_0), + UnityArgument::Profiler(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::Editor(__self_0), + UnityArgument::Editor(__arg1_0)) => __self_0 == __arg1_0, + (UnityArgument::Extra(__self_0), + UnityArgument::Extra(__arg1_0)) => __self_0 == __arg1_0, + _ => unsafe { ::core::intrinsics::unreachable() } + } + } + } + #[automatically_derived] + impl ::core::cmp::Eq for UnityArgument { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + let _: ::core::cmp::AssertParamIsEq; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for UnityArgument { + #[inline] + fn partial_cmp(&self, other: &UnityArgument) + -> ::core::option::Option<::core::cmp::Ordering> { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match (self, other) { + (UnityArgument::Configuration(__self_0), + UnityArgument::Configuration(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::BatchMode(__self_0), + UnityArgument::BatchMode(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::Build(__self_0), + UnityArgument::Build(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::CacheServer(__self_0), + UnityArgument::CacheServer(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::Debug(__self_0), + UnityArgument::Debug(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::GraphicsApi(__self_0), + UnityArgument::GraphicsApi(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::License(__self_0), + UnityArgument::License(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::Metal(__self_0), + UnityArgument::Metal(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::Profiler(__self_0), + UnityArgument::Profiler(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::Editor(__self_0), + UnityArgument::Editor(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + (UnityArgument::Extra(__self_0), + UnityArgument::Extra(__arg1_0)) => + ::core::cmp::PartialOrd::partial_cmp(__self_0, __arg1_0), + _ => + ::core::cmp::PartialOrd::partial_cmp(&__self_discr, + &__arg1_discr), + } + } + } + #[automatically_derived] + impl ::core::cmp::Ord for UnityArgument { + #[inline] + fn cmp(&self, other: &UnityArgument) -> ::core::cmp::Ordering { + let __self_discr = ::core::intrinsics::discriminant_value(self); + let __arg1_discr = ::core::intrinsics::discriminant_value(other); + match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) { + ::core::cmp::Ordering::Equal => + match (self, other) { + (UnityArgument::Configuration(__self_0), + UnityArgument::Configuration(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::BatchMode(__self_0), + UnityArgument::BatchMode(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::Build(__self_0), + UnityArgument::Build(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::CacheServer(__self_0), + UnityArgument::CacheServer(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::Debug(__self_0), + UnityArgument::Debug(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::GraphicsApi(__self_0), + UnityArgument::GraphicsApi(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::License(__self_0), + UnityArgument::License(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::Metal(__self_0), + UnityArgument::Metal(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::Profiler(__self_0), + UnityArgument::Profiler(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::Editor(__self_0), + UnityArgument::Editor(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + (UnityArgument::Extra(__self_0), + UnityArgument::Extra(__arg1_0)) => + ::core::cmp::Ord::cmp(__self_0, __arg1_0), + _ => unsafe { ::core::intrinsics::unreachable() } + }, + cmp => cmp, + } + } + } + pub struct UnityArguments(Vec); + #[automatically_derived] + impl ::core::clone::Clone for UnityArguments { + #[inline] + fn clone(&self) -> UnityArguments { + UnityArguments(::core::clone::Clone::clone(&self.0)) + } + } + #[automatically_derived] + impl ::core::fmt::Debug for UnityArguments { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "UnityArguments", &&self.0) + } + } + #[automatically_derived] + impl ::core::marker::StructuralPartialEq for UnityArguments { } + #[automatically_derived] + impl ::core::cmp::PartialEq for UnityArguments { + #[inline] + fn eq(&self, other: &UnityArguments) -> bool { self.0 == other.0 } + } + #[automatically_derived] + impl ::core::cmp::Eq for UnityArguments { + #[inline] + #[doc(hidden)] + #[coverage(off)] + fn assert_receiver_is_total_eq(&self) -> () { + let _: ::core::cmp::AssertParamIsEq>; + } + } + #[automatically_derived] + impl ::core::cmp::PartialOrd for UnityArguments { + #[inline] + fn partial_cmp(&self, other: &UnityArguments) + -> ::core::option::Option<::core::cmp::Ordering> { + ::core::cmp::PartialOrd::partial_cmp(&self.0, &other.0) + } + } + #[automatically_derived] + impl ::core::cmp::Ord for UnityArguments { + #[inline] + fn cmp(&self, other: &UnityArguments) -> ::core::cmp::Ordering { + ::core::cmp::Ord::cmp(&self.0, &other.0) + } + } + impl Deref for UnityArguments { + type Target = Vec; + fn deref(&self) -> &Self::Target { &self.0 } + } + impl DerefMut for UnityArguments { + fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } + } + impl Default for UnityArguments { + fn default() -> Self { Self(Vec::new()) } + } + macro_rules! unity_args { + () => { UnityArguments::default() }; + ($arg:expr $(, $rest:expr)* $(,)?) => + { + { + let mut args = Vec::new(); + $(#[allow(unreachable_patterns)] match $rest + { + arg @ ConfigArguments::CreateProject(_) | arg @ + ConfigArguments::ConsistencyCheck | arg @ + ConfigArguments::ConsistencyCheckSourceMode(_) | arg @ + ConfigArguments::DisableAssemblyUpdater(_) | arg @ + ConfigArguments::DisableGpuSkinning | arg @ + ConfigArguments::DisablePlaybackEngines(_) | arg @ + ConfigArguments::ExecMethod(_) | arg @ + ConfigArguments::ExportPackage(_) | arg @ + ConfigArguments::ImportPackage(_) | arg @ + ConfigArguments::JobWorkerCount(_) | arg @ + ConfigArguments::GcHelperCount(_) | arg @ + ConfigArguments::LogFile(_) | arg @ ConfigArguments::NoUpm | + arg @ ConfigArguments::OpenFile(_) | arg @ + ConfigArguments::Password(_) | arg @ + ConfigArguments::ProjectPath(_) | arg @ + ConfigArguments::Quit | arg @ + ConfigArguments::ReleaseCodeOptimization | arg @ + ConfigArguments::SetDefaultPlatformTextureFormat | arg @ + ConfigArguments::OverrideMaxTextureSize(_) | arg @ + ConfigArguments::OverrideTextureCompression(_) | arg @ + ConfigArguments::SilentCrashes | arg @ + ConfigArguments::UpmLogFile(_) | arg @ + ConfigArguments::Username(_) | arg @ + ConfigArguments::VcsMode | arg @ ConfigArguments::Version | + arg @ ConfigArguments::Timestamps => + { args.push(UnityArgument::Configuration(arg)); }, arg @ + BatchModeArguments::AcceptApiUpdate | arg @ + BatchModeArguments::BatchMode | arg @ + BatchModeArguments::IgnoreCompileErrors | arg @ + BatchModeArguments::NoGraphics => + { args.push(UnityArgument::BatchMode(arg)); }, arg @ + BuildArguments::ActiveBuildProfile(_) | arg @ + BuildArguments::Build(_) | arg @ + BuildArguments::BuildLinux64Player(_) | arg @ + BuildArguments::BuildLinuxHeadlessSimulation(_) | arg @ + BuildArguments::BuildOSXUniversalPlayer(_) | arg @ + BuildArguments::BuildTarget(_) | arg @ + BuildArguments::StandaloneBuildSubtarget(_) | arg @ + BuildArguments::BuildWindowsPlayer(_) | arg @ + BuildArguments::BuildWindows64Player(_) => + { args.push(UnityArgument::Build(arg)); }, arg @ + CacheServerArguments::Enable | arg @ + CacheServerArguments::Endpoint(_, _) | arg @ + CacheServerArguments::NamespacePrefix(_) | arg @ + CacheServerArguments::EnableDownload(_) | arg @ + CacheServerArguments::EnableUpload(_) | arg @ + CacheServerArguments::WaitForConnection(_) | arg @ + CacheServerArguments::WaitForUploadCompletion | arg @ + CacheServerArguments::DownloadBatchSize(_) | arg @ + CacheServerArguments::UploadAllRevisions | arg @ + CacheServerArguments::UploadExistingShaderCache => + { args.push(UnityArgument::CacheServer(arg)); }, arg @ + DebugArguments::DisableManagedDebugger | arg @ + DebugArguments::DiagDebugShaderCompiler | arg @ + DebugArguments::DebugCodeOptimization | arg @ + DebugArguments::EnableCodeCoverage | arg @ + DebugArguments::ForceD3d12Debug | arg @ + DebugArguments::ForceD3d12DebugGbv | arg @ + DebugArguments::ForceVulkanLayers | arg @ + DebugArguments::StackTraceLogType(_) | arg @ + DebugArguments::LogMemoryPerformanceStats | arg @ + DebugArguments::WaitForManagedDebugger | arg @ + DebugArguments::WaitForNativeDebugger => + { args.push(UnityArgument::Debug(arg)); }, arg @ + GraphicsApiArguments::ForceClamped | arg @ + GraphicsApiArguments::ForceD3d11 | arg @ + GraphicsApiArguments::ForceD3d12 | arg @ + GraphicsApiArguments::ForceDeviceIndex | arg @ + GraphicsApiArguments::ForceGlCore | arg @ + GraphicsApiArguments::ForceGlCoreXy | arg @ + GraphicsApiArguments::ForceGlEs | arg @ + GraphicsApiArguments::ForceGlEsXy | arg @ + GraphicsApiArguments::ForceOpenGl | arg @ + GraphicsApiArguments::ForceVulkan => + { args.push(UnityArgument::GraphicsApi(arg)); }, arg @ + LicenseArguments::CreateManualActivationFile | arg @ + LicenseArguments::ManualLicenseFile(_) | arg @ + LicenseArguments::ReturnLicense | arg @ + LicenseArguments::Serial(_) => + { args.push(UnityArgument::License(arg)); }, arg @ + MetalArguments::ForceLowPowerDevice | arg @ + MetalArguments::ForceMetal | arg @ + MetalArguments::EnableMetalCapture => + { args.push(UnityArgument::Metal(arg)); }, arg @ + ProfilerArguments::DeepProfiling | arg @ + ProfilerArguments::Enable | arg @ + ProfilerArguments::LogFile(_) | arg @ + ProfilerArguments::CaptureFrameCount(_) | arg @ + ProfilerArguments::MaxUsedMemory(_) => + { args.push(UnityArgument::Profiler(arg)); }, arg @ + EditorSpecialArguments::EnableIncompatibleAssetDowngrade | + arg @ EditorSpecialArguments::GiCustomCacheLocation(_) => + { args.push(UnityArgument::Editor(arg)); }, arg @ + UnityArgument::Configuration(_) | arg @ + UnityArgument::BatchMode(_) | arg @ UnityArgument::Build(_) + | arg @ UnityArgument::CacheServer(_) | arg @ + UnityArgument::Debug(_) | arg @ + UnityArgument::GraphicsApi(_) | arg @ + UnityArgument::License(_) | arg @ UnityArgument::Metal(_) | + arg @ UnityArgument::Profiler(_) | arg @ + UnityArgument::Editor(_) | arg @ UnityArgument::Extra(_) => + { args.push(arg); }, s: OsString => + { args.push(UnityArgument::Extra(s)); }, _ => + compile_error!("Unsupported argument type in unity_args! macro. Ensure it's a valid argument enum variant or a String."), + })* UnityArguments(args) + } + }; + } + pub struct EditorCommand {} + #[automatically_derived] + impl ::core::fmt::Debug for EditorCommand { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::write_str(f, "EditorCommand") + } + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl _serde::Serialize for EditorCommand { + fn serialize<__S>(&self, __serializer: __S) + -> _serde::__private::Result<__S::Ok, __S::Error> where + __S: _serde::Serializer { + let __serde_state = + _serde::Serializer::serialize_struct(__serializer, + "EditorCommand", false as usize)?; + _serde::ser::SerializeStruct::end(__serde_state) + } + } + }; + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for EditorCommand { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = EditorCommand; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct EditorCommand") + } + #[inline] + fn visit_seq<__A>(self, _: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + _serde::__private::Ok(EditorCommand {}) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + _serde::__private::Ok(EditorCommand {}) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &[]; + _serde::Deserializer::deserialize_struct(__deserializer, + "EditorCommand", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; +} +pub mod error { + use std::{error::Error as StdError, fmt::Display, path::PathBuf}; + use toml::de::Error as TomlError; + pub struct ShellExpansionError { + variable: String, + context: Option, + } + #[automatically_derived] + impl ::core::fmt::Debug for ShellExpansionError { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field2_finish(f, + "ShellExpansionError", "variable", &self.variable, "context", + &&self.context) + } + } + impl ShellExpansionError { + pub fn new(variable: &str, context: Option<&str>) -> Self { + Self { + variable: variable.into(), + context: context.map(Into::into), + } + } + } + impl Display for ShellExpansionError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if let Some(context) = &self.context { + f.write_fmt(format_args!("Error expanding {0} in {1}", + self.variable, context)) + } else { + f.write_fmt(format_args!("Error expanding {0}", + self.variable)) + } + } + } + pub struct FileError { + path: PathBuf, + source: Box, + } + #[automatically_derived] + impl ::core::fmt::Debug for FileError { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field2_finish(f, "FileError", + "path", &self.path, "source", &&self.source) + } + } + impl FileError { + pub fn new(path: impl Into, + source: impl Into>) -> Self { + Self { path: path.into(), source: source.into() } + } + } + impl Display for FileError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_fmt(format_args!("Error handling \"{0}\": {1}", + self.path.display(), &self.source)) + } + } + impl std::error::Error for FileError {} + pub enum ProjectManifestError { Read(FileError), Parse(TomlError), } + #[automatically_derived] + impl ::core::fmt::Debug for ProjectManifestError { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + ProjectManifestError::Read(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, "Read", + &__self_0), + ProjectManifestError::Parse(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "Parse", &__self_0), + } + } + } + impl From for ProjectManifestError { + fn from(value: FileError) -> Self { Self::Read(value) } + } + impl From for ProjectManifestError { + fn from(value: TomlError) -> Self { Self::Parse(value) } + } + impl std::fmt::Display for ProjectManifestError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Read(error) => + f.write_fmt(format_args!("Error reading project manifest: {0}", + error)), + Self::Parse(error) => + f.write_fmt(format_args!("Error parsing project manifest: {0}", + error)), + } + } + } + impl std::error::Error for ProjectManifestError {} + pub enum Error { + LoadConfig(confique::Error), + ProjectManifest(ProjectManifestError), + } + #[automatically_derived] + impl ::core::fmt::Debug for Error { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + match self { + Error::LoadConfig(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "LoadConfig", &__self_0), + Error::ProjectManifest(__self_0) => + ::core::fmt::Formatter::debug_tuple_field1_finish(f, + "ProjectManifest", &__self_0), + } + } + } + impl From for Error { + fn from(value: confique::Error) -> Self { Self::LoadConfig(value) } + } + impl From for Error { + fn from(value: ProjectManifestError) -> Self { + Self::ProjectManifest(value) + } + } + impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::LoadConfig(error) => + f.write_fmt(format_args!("Couldn\'t load config: {0}", + error)), + Error::ProjectManifest(error) => + f.write_fmt(format_args!("Couldn\'t read projects: {0}", + error)), + } + } + } + impl std::error::Error for Error {} +} +pub mod project { + use std::path::PathBuf; + use serde::{Deserialize, Serialize}; + pub struct Project { + pub name: String, + pub editor: String, + pub path: PathBuf, + } + #[automatically_derived] + impl ::core::fmt::Debug for Project { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field3_finish(f, "Project", + "name", &self.name, "editor", &self.editor, "path", + &&self.path) + } + } + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl _serde::Serialize for Project { + fn serialize<__S>(&self, __serializer: __S) + -> _serde::__private::Result<__S::Ok, __S::Error> where + __S: _serde::Serializer { + let mut __serde_state = + _serde::Serializer::serialize_struct(__serializer, + "Project", false as usize + 1 + 1 + 1)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "name", &self.name)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "editor", &self.editor)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "path", &self.path)?; + _serde::ser::SerializeStruct::end(__serde_state) + } + } + }; + #[doc(hidden)] + #[allow(non_upper_case_globals, unused_attributes, unused_qualifications, + clippy :: absolute_paths,)] + const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for Project { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __field1, __field2, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + 1u64 => _serde::__private::Ok(__Field::__field1), + 2u64 => _serde::__private::Ok(__Field::__field2), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "name" => _serde::__private::Ok(__Field::__field0), + "editor" => _serde::__private::Ok(__Field::__field1), + "path" => _serde::__private::Ok(__Field::__field2), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"name" => _serde::__private::Ok(__Field::__field0), + b"editor" => _serde::__private::Ok(__Field::__field1), + b"path" => _serde::__private::Ok(__Field::__field2), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = Project; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct Project") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(0usize, + &"struct Project with 3 elements")), + }; + let __field1 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(1usize, + &"struct Project with 3 elements")), + }; + let __field2 = + match _serde::de::SeqAccess::next_element::(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(2usize, + &"struct Project with 3 elements")), + }; + _serde::__private::Ok(Project { + name: __field0, + editor: __field1, + path: __field2, + }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: _serde::__private::Option = + _serde::__private::None; + let mut __field1: _serde::__private::Option = + _serde::__private::None; + let mut __field2: _serde::__private::Option = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("name")); + } + __field0 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + __Field::__field1 => { + if _serde::__private::Option::is_some(&__field1) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("editor")); + } + __field1 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + __Field::__field2 => { + if _serde::__private::Option::is_some(&__field2) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("path")); + } + __field2 = + _serde::__private::Some(_serde::de::MapAccess::next_value::(&mut __map)?); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::de::missing_field("name")?, + }; + let __field1 = + match __field1 { + _serde::__private::Some(__field1) => __field1, + _serde::__private::None => + _serde::__private::de::missing_field("editor")?, + }; + let __field2 = + match __field2 { + _serde::__private::Some(__field2) => __field2, + _serde::__private::None => + _serde::__private::de::missing_field("path")?, + }; + _serde::__private::Ok(Project { + name: __field0, + editor: __field1, + path: __field2, + }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = + &["name", "editor", "path"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "Project", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; +} +use std::{fs, ops::Deref, path::Path}; +use serde::{Deserialize, Serialize}; +use crate::{ + config::Cfg, editor::Editor, + error::{Error, FileError, ProjectManifestError}, + project::Project, +}; +pub struct Projects { + projects: Vec, +} +#[automatically_derived] +impl ::core::fmt::Debug for Projects { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field1_finish(f, "Projects", + "projects", &&self.projects) + } +} +#[doc(hidden)] +#[allow(non_upper_case_globals, unused_attributes, unused_qualifications, +clippy :: absolute_paths,)] +const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl _serde::Serialize for Projects { + fn serialize<__S>(&self, __serializer: __S) + -> _serde::__private::Result<__S::Ok, __S::Error> where + __S: _serde::Serializer { + let mut __serde_state = + _serde::Serializer::serialize_struct(__serializer, + "Projects", false as usize + 1)?; + _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, + "projects", &self.projects)?; + _serde::ser::SerializeStruct::end(__serde_state) + } + } + }; +#[doc(hidden)] +#[allow(non_upper_case_globals, unused_attributes, unused_qualifications, +clippy :: absolute_paths,)] +const _: () = + { + #[allow(unused_extern_crates, clippy :: useless_attribute)] + extern crate serde as _serde; + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for Projects { + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + #[allow(non_camel_case_types)] + #[doc(hidden)] + enum __Field { __field0, __ignore, } + #[doc(hidden)] + struct __FieldVisitor; + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __FieldVisitor { + type Value = __Field; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "field identifier") + } + fn visit_u64<__E>(self, __value: u64) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + 0u64 => _serde::__private::Ok(__Field::__field0), + _ => _serde::__private::Ok(__Field::__ignore), + } + } + fn visit_str<__E>(self, __value: &str) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + "projects" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + fn visit_bytes<__E>(self, __value: &[u8]) + -> _serde::__private::Result where + __E: _serde::de::Error { + match __value { + b"projects" => _serde::__private::Ok(__Field::__field0), + _ => { _serde::__private::Ok(__Field::__ignore) } + } + } + } + #[automatically_derived] + impl<'de> _serde::Deserialize<'de> for __Field { + #[inline] + fn deserialize<__D>(__deserializer: __D) + -> _serde::__private::Result where + __D: _serde::Deserializer<'de> { + _serde::Deserializer::deserialize_identifier(__deserializer, + __FieldVisitor) + } + } + #[doc(hidden)] + struct __Visitor<'de> { + marker: _serde::__private::PhantomData, + lifetime: _serde::__private::PhantomData<&'de ()>, + } + #[automatically_derived] + impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> { + type Value = Projects; + fn expecting(&self, + __formatter: &mut _serde::__private::Formatter) + -> _serde::__private::fmt::Result { + _serde::__private::Formatter::write_str(__formatter, + "struct Projects") + } + #[inline] + fn visit_seq<__A>(self, mut __seq: __A) + -> _serde::__private::Result where + __A: _serde::de::SeqAccess<'de> { + let __field0 = + match _serde::de::SeqAccess::next_element::>(&mut __seq)? + { + _serde::__private::Some(__value) => __value, + _serde::__private::None => + return _serde::__private::Err(_serde::de::Error::invalid_length(0usize, + &"struct Projects with 1 element")), + }; + _serde::__private::Ok(Projects { projects: __field0 }) + } + #[inline] + fn visit_map<__A>(self, mut __map: __A) + -> _serde::__private::Result where + __A: _serde::de::MapAccess<'de> { + let mut __field0: _serde::__private::Option> = + _serde::__private::None; + while let _serde::__private::Some(__key) = + _serde::de::MapAccess::next_key::<__Field>(&mut __map)? { + match __key { + __Field::__field0 => { + if _serde::__private::Option::is_some(&__field0) { + return _serde::__private::Err(<__A::Error as + _serde::de::Error>::duplicate_field("projects")); + } + __field0 = + _serde::__private::Some(_serde::de::MapAccess::next_value::>(&mut __map)?); + } + _ => { + let _ = + _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?; + } + } + } + let __field0 = + match __field0 { + _serde::__private::Some(__field0) => __field0, + _serde::__private::None => + _serde::__private::de::missing_field("projects")?, + }; + _serde::__private::Ok(Projects { projects: __field0 }) + } + } + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &["projects"]; + _serde::Deserializer::deserialize_struct(__deserializer, + "Projects", FIELDS, + __Visitor { + marker: _serde::__private::PhantomData::, + lifetime: _serde::__private::PhantomData, + }) + } + } + }; +impl Projects { + pub fn new(projects: Vec) -> Self { Self { projects } } +} +impl From> for Projects { + fn from(value: Vec) -> Self { Self::new(value) } +} +impl Default for Projects { + fn default() -> Self { Self::new(Vec::new()) } +} +impl Deref for Projects { + type Target = Vec; + fn deref(&self) -> &Self::Target { &self.projects } +} +pub struct TormentNexus { + config: Cfg, + projects: Projects, +} +#[automatically_derived] +impl ::core::fmt::Debug for TormentNexus { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { + ::core::fmt::Formatter::debug_struct_field2_finish(f, "TormentNexus", + "config", &self.config, "projects", &&self.projects) + } +} +impl TormentNexus { + pub fn new(config: Cfg, projects: impl Into) -> Self { + Self { config, projects: projects.into() } + } + pub fn load() -> Result { + let config = Cfg::from_env()?; + let projects = Self::read_projects(&config.project.manifest_path)?; + Ok(Self::new(config, projects)) + } + pub fn read_projects(manifest_path: impl AsRef) + -> Result { + let content = + fs::read_to_string(&manifest_path).map_err(|err| + FileError::new(manifest_path.as_ref(), err))?; + Ok(toml::from_str::(&content)?) + } + pub fn installed_editors(&self) -> Vec { Vec::new() } + pub fn projects(&self) -> &Projects { &self.projects } +} diff --git a/core/src/collection.rs b/core/src/collection.rs new file mode 100644 index 0000000..e12b90e --- /dev/null +++ b/core/src/collection.rs @@ -0,0 +1,170 @@ +use std::{ + borrow::Cow, + ffi::{OsStr, OsString}, + fmt::Display, + ops::{Deref, DerefMut}, + path::PathBuf, +}; + +use derive_more::Display; +use osstr_traits::{OsDisplay, ToOsString}; + +type OsStrDisplay<'a> = std::ffi::os_str::Display<'a>; +type PathDisplay<'a> = std::path::Display<'a>; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct DelimitedVec(Vec); + +impl OsDisplay for DelimitedVec { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) -> std::fmt::Result { + let mut first = true; + + for item in &self.0 { + if !first { + f.write_os_str(&D.to_os_string())?; + } + + item.fmt_os(f)?; + first = false; + } + + Ok(()) + } +} + +impl Display for DelimitedVec { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut first = true; + + for item in &self.0 { + if !first { + write!(f, "{D}")?; + } + + write!(f, "{item}")?; + first = false; + } + + Ok(()) + } +} + +impl FromIterator for DelimitedVec { + fn from_iter>(iter: T) -> Self { + Self(iter.into_iter().collect()) + } +} + +impl<'a, const D: char> From<&'a Vec> for DelimitedVec, D> { + fn from(value: &'a Vec) -> Self { + let iter = value.iter().map(|s| s.display()); + Self::from_iter(iter) + } +} + +impl<'a, const D: char> From<&'a Vec> for DelimitedVec, D> { + fn from(value: &'a Vec) -> Self { + let iter = value.iter().map(|s| s.display()); + Self::from_iter(iter) + } +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct CommandArgs(pub Vec); + +impl OsDisplay for CommandArgs { + fn fmt_os(&self, f: &mut osstr_traits::OsStringFormatter) -> std::fmt::Result { + let mut first = true; + + for item in &self.0 { + if !first { + f.write_os_str(OsStr::new(" "))?; + } + + item.fmt_os(f)?; + first = false; + } + + Ok(()) + } +} + +impl Display for CommandArgs { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let mut first = true; + + for item in &self.0 { + if !first { + write!(f, " ")?; + } + + write!(f, "{item}")?; + first = false; + } + + Ok(()) + } +} + +impl Default for CommandArgs { + fn default() -> Self { + Self(Vec::new()) + } +} + +impl Deref for CommandArgs { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for CommandArgs { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl FromIterator for CommandArgs { + fn from_iter>(iter: T) -> Self { + Self(iter.into_iter().collect()) + } +} + +impl IntoIterator for CommandArgs { + type Item = T; + type IntoIter = as IntoIterator>::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +#[derive(Clone, Debug, Display)] +#[display("{} {}", command.display(), args)] +pub struct Command<'a, T> { + command: Cow<'a, OsStr>, + args: CommandArgs, +} + +impl<'a, T> Command<'a, T> { + pub fn new(command: impl Into>) -> Self { + Self { + command: command.into(), + args: CommandArgs::default(), + } + } + + pub fn arg(&mut self, arg: T) { + self.args.push(arg); + } +} + +impl<'a, T: AsRef> Command<'a, T> { + pub fn into_os_command(self) -> std::process::Command { + let mut cmd = std::process::Command::new(self.command); + cmd.args(self.args); + cmd + } +} diff --git a/core/src/config.rs b/core/src/config.rs new file mode 100644 index 0000000..a42fdb7 --- /dev/null +++ b/core/src/config.rs @@ -0,0 +1,108 @@ +use std::{ + borrow::Cow, + env, + path::{Path, PathBuf}, +}; + +use confique::Config; +use directories::ProjectDirs; +use serde::{Deserialize, Deserializer, Serialize}; + +use crate::error::{Error, ShellExpansionError}; + +trait Fallback: Config { + fn fallback() -> ::Partial; +} + +fn project_dir() -> Option { + ProjectDirs::from("cafe", "kitsu", "TormentNexus") +} + +fn expand_tilde<'a>(path: impl Into>) -> Result, ShellExpansionError> { + let path = path.into(); + let into_err = || ShellExpansionError::new("~", path.to_str()); + + if !path.starts_with("~") { + Ok(path) + } else if path == Path::new("~") { + env::home_dir().map(Cow::Owned).ok_or_else(into_err) + } else { + let mut home_dir = env::home_dir().ok_or_else(into_err)?; + if home_dir == Path::new("/") { + let stripped = path.strip_prefix("~").map_err(|_e| into_err())?; + Ok(Cow::Owned(stripped.into())) + } else { + home_dir.push(path.strip_prefix("~/").map_err(|_e| into_err())?); + Ok(Cow::Owned(home_dir)) + } + } +} + +fn deserialize_path<'de, D: Deserializer<'de>>(de: D) -> Result { + let path = PathBuf::deserialize(de)?; + if let Ok(expanded_path) = expand_tilde(&path) { + Ok(expanded_path.into()) + } else { + Ok(path) + } +} + +#[derive(Config, Debug, Serialize, Deserialize)] +pub struct EditorCfg { + #[config(deserialize_with = deserialize_path, env = "EDITOR_PATH")] + pub path: PathBuf, +} + +impl Fallback for EditorCfg { + fn fallback() -> ::Partial { + Self::Partial { + path: project_dir().map(|d| d.data_local_dir().join("editors/")), + } + } +} + +#[derive(Debug, Config, Serialize, Deserialize)] +pub struct ProjectCfg { + #[config(deserialize_with = deserialize_path, env = "PROJECT_MANIFEST_PATH")] + pub manifest_path: PathBuf, +} + +impl Fallback for ProjectCfg { + fn fallback() -> ::Partial { + Self::Partial { + manifest_path: project_dir().map(|d| d.data_local_dir().join("manifest.toml")), + } + } +} +#[derive(Debug, Config, Serialize, Deserialize)] +pub struct Cfg { + #[config(nested)] + pub editor: EditorCfg, + + #[config(nested)] + pub project: ProjectCfg, +} + +impl Cfg { + pub fn from_env() -> Result { + let mut builder = Cfg::builder().env(); + + if let Some(dir) = project_dir() { + builder = builder.file(dir.config_dir().join("config.toml")); + } + + builder + .preloaded(Self::fallback()) + .load() + .map_err(Into::into) + } +} + +impl Fallback for Cfg { + fn fallback() -> ::Partial { + Self::Partial { + editor: EditorCfg::fallback(), + project: ProjectCfg::fallback(), + } + } +} diff --git a/core/src/editor.rs b/core/src/editor.rs new file mode 100644 index 0000000..42436b3 --- /dev/null +++ b/core/src/editor.rs @@ -0,0 +1 @@ +pub struct Editor {} diff --git a/core/src/editor_command.rs b/core/src/editor_command.rs new file mode 100644 index 0000000..cb573ea --- /dev/null +++ b/core/src/editor_command.rs @@ -0,0 +1,795 @@ +use std::{ + ffi::OsString, + net::IpAddr, + ops::{Deref, DerefMut}, + path::PathBuf, + time::Duration, +}; + +use derive_more::Display; +use osstr_traits_derive::OsDisplay; +use serde::{Deserialize, Serialize}; + +use crate::collection::{CommandArgs, DelimitedVec}; + +type OsStrDisplay<'a> = std::ffi::os_str::Display<'a>; +type PathDisplay<'a> = std::path::Display<'a>; + +#[derive(Clone, Copy, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum ConsistencyCheckSourceMode { + #[display("local")] + Local, + #[display("cacheserver")] + CacheServer, +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("{0} {1}", DelimitedVec::::from(exports), path.display())] +#[os_display("{exports} {path}", exports = DelimitedVec::<&PathBuf, ' '>::from_iter(exports), path = path)] +pub struct ExportPackage { + path: PathBuf, + exports: Vec, +} + +#[derive(Clone, Copy, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum PlatformTextureFormat { + #[display("dxt")] + Dxt, + #[display("pvrtc")] + #[deprecated(note = "PVRTC format is deprecated. Use ASTC or ETC format instead.")] + Pvrtc, + #[display("atc")] + Atc, + #[display("etc")] + Etc, + #[display("etc2")] + Etc2, + #[display("astc")] + Astc, +} + +#[derive(Clone, Copy, Debug, Default, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum TextureCompression { + #[default] + NoOverride, + ForceUncompressed, + ForceFastCompressor, + ForceNoCrunchCompression, +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum SharedLogLevel { + #[display("debug")] + Debug, + #[display("info")] + Info, + #[display("notice")] + Notice, + #[display("fatal")] + Fatal, +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +pub enum PerforceArgument { + #[display("vcPerforceHost {0}", _0.display())] + #[os_display("vcPerforceHost {_0}")] + Host(OsString), + #[display("vcSharedLogLevel {_0}")] + #[os_display("vcSharedLogLevel {_0}")] + SharedLogLevel(SharedLogLevel), + #[display("vcPerforceServer {0}", _0.display())] + #[os_display("vcPerforceServer {_0}")] + Server(OsString), + #[display("vcPerforceWorkspace {0}", _0.display())] + #[os_display("vcPerforceWorkspace {_0}")] + Workspace(OsString), + #[display("vcPerforceUsername {0}", _0.display())] + #[os_display("vcPerforceUsername {_0}")] + Username(OsString), + #[display("vcPerforcePassword {0}", _0.display())] + #[os_display("vcPerforcePassword {_0}")] + Password(OsString), +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum VcsMode { + #[display("\"Visible Meta Files\"")] + VisibleMetaFiles, + #[display("\"Hidden Meta Files\"")] + HiddenMetaFiles, + #[display("Perforce {_0}")] + #[os_display("Perforce {_0}")] + Perforce(CommandArgs), + #[display("PlasticSCM")] + PlasticScm, + #[display("{0}", _0.display())] + #[os_display("{_0}")] + Other(OsString), +} + +#[derive(Debug, Display, Clone, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum ConfigurationArgument { + #[display("createProject \"{0}\"", _0.display())] + #[os_display("-createProject \"{_0}\"")] + CreateProject(PathBuf), + #[display("consistencyCheck")] + ConsistencyCheck, + #[display("consistencyCheckSourceMode {_0}")] + ConsistencyCheckSourceMode(ConsistencyCheckSourceMode), + #[display("disable-assembly-updater {0}", DelimitedVec::::from(_0))] + #[os_display("-disable-assembly-updater {}", DelimitedVec::<&PathBuf, ' '>::from_iter(_0))] + DisableAssemblyUpdater(Vec), + #[display("disable-gpu-skinning")] + DisableGpuSkinning, + #[display("disable-playback-engines {0}", DelimitedVec::::from(_0))] + #[os_display("-disable-playback-engines {}", DelimitedVec::<&std::ffi::OsString, ' '>::from_iter(_0))] + DisablePlaybackEngines(Vec), + #[display("executeMethod {0}", _0.display())] + #[os_display("-executeMethod {_0}")] + ExecMethod(OsString), + #[display("exportPackage {_0}")] + #[os_display("-exportPackage {_0}")] + ExportPackage(ExportPackage), + #[display("importPackage {0}", _0.display())] + #[os_display("-importPackage {_0}")] + ImportPackage(PathBuf), + #[display("job-worker-count {_0}")] + JobWorkerCount(usize), + #[display("gc-helper-count {_0}")] + GcHelperCount(usize), + #[display("logFile {0}", _0.display())] + #[os_display("-logFile {_0}")] + LogFile(PathBuf), + #[display("noUpm")] + NoUpm, + #[display("openfile {0}", _0.display())] + #[os_display("-openfile {_0}")] + OpenFile(PathBuf), + #[display("password {0}", _0.display())] + #[os_display("-password {_0}")] + Password(OsString), + #[display("projectPath {0}", _0.display())] + #[os_display("-projectPath {_0}")] + ProjectPath(PathBuf), + #[display("quit")] + Quit, + #[display("releaseCodeOptimization")] + ReleaseCodeOptimization, + #[display("setDefaultPlatformTextureFormat {_0}")] + SetDefaultPlatformTextureFormat(PlatformTextureFormat), + #[display("overrideMaxTextureSize {_0}")] + OverrideMaxTextureSize(usize), + #[display("overrideTextureCompression {_0}")] + OverrideTextureCompression(TextureCompression), + #[display("silent-crashes")] + SilentCrashes, + #[display("upmLogFile {0}", _0.display())] + #[os_display("-upmLogFile {_0}")] + UpmLogFile(PathBuf), + #[display("username {0}", _0.display())] + #[os_display("-username {_0}")] + Username(OsString), + #[display("vcsMode {_0}")] + VcsMode(VcsMode), + #[display("version")] + Version, + #[display("timestamps")] + Timestamps, +} + +#[derive(Debug, Clone, Copy, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum BatchModeArgument { + #[display("accent-apiupdate")] + AcceptApiUpdate, + #[display("batchmode")] + BatchMode, + #[display("ignorecompilererrors")] + IgnoreCompilerErrors, + #[display("nographics")] + NoGraphics, +} + +#[derive(Debug, Clone, Copy, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum BuildTarget { + #[display("win64")] + Win64, + #[display("win")] + Win, + #[display("osxuniversal")] + OsxUniversal, + #[display("linux64")] + Linux64, + #[display("android")] + Android, + #[display("ios")] + IOs, + #[display("webgl")] + WebGl, + #[display("tvos")] + TvOs, + #[display("windowsstoreapps")] + WindowsStoreApps, + #[display("cloudrendering")] + CloudRendering, + #[display("visionos")] + VisionOs, +} + +#[derive(Debug, Clone, Copy, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum BuildSubtarget { + Player, + Server, +} + +#[derive(Debug, Display, Clone, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +pub enum BuildArgument { + #[display("activeBuildProfile \"{0}\"", _0.display())] + #[os_display("activeBuildProfile \"{_0}\"")] + ActiveBuildProfile(PathBuf), + #[display("build \"{0}\"", _0.display())] + #[os_display("build \"{_0}\"")] + Build(PathBuf), + #[display("buildLinux64Player \"{0}\"", _0.display())] + #[os_display("buildLinux64Player \"{_0}\"")] + BuildLinux64Player(PathBuf), + #[display("buildLinuxHeadlessSimulation \"{0}\"", _0.display())] + #[os_display("buildLinuxHeadlessSimulation \"{_0}\"")] + BuildLinuxHeadlessSimulation(PathBuf), + #[display("buildOSXUniversalPlayer \"{0}\"", _0.display())] + #[os_display("buildOSXUniversalPlayer \"{_0}\"")] + BuildOsxUniversalPlayer(PathBuf), + #[display("buildTarget \"{_0}\"")] + BuildTarget(BuildTarget), + #[display("standaloneBuildSubtarget \"{_0}\"")] + #[os_display("standaloneBuildSubtarget \"{_0}\"")] + StandaloneBuildSubtarget(BuildSubtarget), + #[display("buildWindowsPlayer \"{0}\"", _0.display())] + #[os_display("buildWindowsPlayer \"{_0}\"")] + BuildWindowsPlayer(PathBuf), + #[display("buildWindows64Player \"{0}\"", _0.display())] + #[os_display("buildWindows64Player \"{_0}\"")] + BuildWindows64Player(PathBuf), +} +#[derive(Debug, Display, Clone, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum CacheServerArgument { + #[display("EnableCacheServer")] + Enable, + #[display("cacheServerEndpoint {_0}:{_1}")] + Endpoint(IpAddr, u16), + #[display("cacheServerNamespacePrefix \"{0}\"", _0.display())] + #[os_display("cacheServerNamespacePrefix \"{_0}\"")] + NamespacePrefix(OsString), + #[display("cacheServerEnableDownload {_0}")] + EnableDownload(bool), + #[display("cacheServerEnableUpload {_0}")] + EnableUpload(bool), + #[display("cacheServerWaitForConnection {0}", _0.as_millis())] + WaitForConnection(Duration), + #[display("cacheServerWaitForUploadCompletion")] + WaitForUploadCompletion, + #[display("cacheServerDownloadBatchSize {_0}")] + DownloadBatchSize(usize), + #[display("cacheServerUploadAllRevisions")] + UploadAllRevisions, + #[display("cacheServerUploadExistingShaderCache")] + UploadExistingShaderCache, +} + +#[derive(Debug, Default, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[os_display(from_display)] +pub enum StackTraceLogType { + None, + #[display("\"Script Only\"")] + ScriptOnly, + #[default] + Full, +} + +#[derive(Debug, Display, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum DebugArgument { + #[display("disableManagedDebugger")] + DisableManagedDebugger, + #[display("diag-debug-shader-compiler")] + DiagDebugShaderCompiler, + #[display("debugCodeOptimization")] + DebugCodeOptimization, + #[display("enableCodeCoverage")] + EnableCodeCoverage, + #[display("force-d3d12-debug")] + ForceD3d12Debug, + #[display("force-d3d12-debug-gbv")] + ForceD3d12DebugGbv, + #[display("force-vulkan-layers")] + ForceVulkanLayers, + #[display("StackTraceLogType {_0}")] + #[os_display("StackTraceLogType {_0}")] + StackTraceLogType(StackTraceLogType), + #[display("log-memory-performance-stats")] + LogMemoryPerformanceStats, + #[display("wait-for-managed-debugger")] + WaitForManagedDebugger, + #[display("wait-for-native-debugger")] + WaitForNativeDebugger, +} + +#[derive(Clone, Copy, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum GraphicsApiArgument { + #[display("force-clamped")] + ForceClamped, + #[display("force-d3d11")] + ForceD3d11, + #[display("force-d3d12")] + ForceD3d12, + #[display("force-device-index")] + ForceDeviceIndex, + #[display("force-glcore")] + ForceGlCore, + #[display("force-glcoreXY")] + ForceGlCoreXy, + #[display("force-gles")] + ForceGlEs, + #[display("force-glesXY")] + ForceGlEsXy, + #[display("force-opengl")] + ForceOpenGl, + #[display("force-vulkan")] + ForceVulkan, +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum LicenseArgument { + #[display("createManualActivationFile")] + CreateManualActivationFile, + #[display("manualLicenseFile {0}", _0.display())] + #[os_display("manualLicenseFile {_0}")] + ManualLicenseFile(PathBuf), + #[display("returnlicense")] + ReturnLicense, + #[display("serial {0}", _0.display())] + #[os_display("serial {_0}")] + Serial(OsString), +} + +#[derive(Clone, Copy, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum MetalArgument { + #[display("force-low-power-device")] + ForceLowPowerDevice, + #[display("force-metal")] + ForceMetal, + #[display("enable-metal-capture")] + EnableMetalCapture, +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum ProfilerArgument { + #[display("deepprofiling")] + DeepProfiling, + #[display("profiler-enable")] + Enable, + #[display("profiler-log-file {0}", _0.display())] + #[os_display("profiler-log-file {_0}")] + LogFile(PathBuf), + #[display("profiler-capture-frame-count {_0}")] + CaptureFrameCount(usize), + #[display("profiler-maxusedmemory {_0}")] + MaxUsedMemory(usize), +} + +#[derive(Clone, Debug, Display, PartialEq, Eq, PartialOrd, Ord, OsDisplay)] +#[display("-{_variant}")] +#[os_display(from_display)] +pub enum EditorSpecialArgument { + #[display("enableIncompatibleAssetDowngrade")] + EnableIncompatibleAssetDowngrade, + #[display("giCustomCacheLocation {0}", _0.display())] + #[os_display("giCustomCacheLocation {_0}")] + GiCustomCacheLocation(PathBuf), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub enum UnityArgument { + Configuration(ConfigurationArgument), + BatchMode(BatchModeArgument), + Build(BuildArgument), + CacheServer(CacheServerArgument), + Debug(DebugArgument), + GraphicsApi(GraphicsApiArgument), + License(LicenseArgument), + Metal(MetalArgument), + Profiler(ProfilerArgument), + Editor(EditorSpecialArgument), + Extra(OsString), +} + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] +pub struct UnityArguments(Vec); + +impl Deref for UnityArguments { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for UnityArguments { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl Default for UnityArguments { + fn default() -> Self { + Self(Vec::new()) + } +} + +macro_rules! unity_args { + () => { + UnityArguments::default() + }; + + ($arg:expr $(, $rest:expr)* $(,)?) => { + { + let mut args = Vec::new(); + $( + #[allow(unreachable_patterns)] + match $rest { + arg @ ConfigArguments::CreateProject(_) | + arg @ ConfigArguments::ConsistencyCheck | + arg @ ConfigArguments::ConsistencyCheckSourceMode(_) | + arg @ ConfigArguments::DisableAssemblyUpdater(_) | + arg @ ConfigArguments::DisableGpuSkinning | + arg @ ConfigArguments::DisablePlaybackEngines(_) | + arg @ ConfigArguments::ExecMethod(_) | + arg @ ConfigArguments::ExportPackage(_) | + arg @ ConfigArguments::ImportPackage(_) | + arg @ ConfigArguments::JobWorkerCount(_) | + arg @ ConfigArguments::GcHelperCount(_) | + arg @ ConfigArguments::LogFile(_) | + arg @ ConfigArguments::NoUpm | + arg @ ConfigArguments::OpenFile(_) | + arg @ ConfigArguments::Password(_) | + arg @ ConfigArguments::ProjectPath(_) | + arg @ ConfigArguments::Quit | + arg @ ConfigArguments::ReleaseCodeOptimization | + arg @ ConfigArguments::SetDefaultPlatformTextureFormat | + arg @ ConfigArguments::OverrideMaxTextureSize(_) | + arg @ ConfigArguments::OverrideTextureCompression(_) | + arg @ ConfigArguments::SilentCrashes | + arg @ ConfigArguments::UpmLogFile(_) | + arg @ ConfigArguments::Username(_) | + arg @ ConfigArguments::VcsMode | + arg @ ConfigArguments::Version | + arg @ ConfigArguments::Timestamps => { + args.push(UnityArgument::Configuration(arg)); + }, + + arg @ BatchModeArguments::AcceptApiUpdate | + arg @ BatchModeArguments::BatchMode | + arg @ BatchModeArguments::IgnoreCompileErrors | + arg @ BatchModeArguments::NoGraphics => { + args.push(UnityArgument::BatchMode(arg)); + }, + + arg @ BuildArguments::ActiveBuildProfile(_) | + arg @ BuildArguments::Build(_) | + arg @ BuildArguments::BuildLinux64Player(_) | + arg @ BuildArguments::BuildLinuxHeadlessSimulation(_) | + arg @ BuildArguments::BuildOSXUniversalPlayer(_) | + arg @ BuildArguments::BuildTarget(_) | + arg @ BuildArguments::StandaloneBuildSubtarget(_) | + arg @ BuildArguments::BuildWindowsPlayer(_) | + arg @ BuildArguments::BuildWindows64Player(_) => { + args.push(UnityArgument::Build(arg)); + }, + + arg @ CacheServerArguments::Enable | + arg @ CacheServerArguments::Endpoint(_, _) | + arg @ CacheServerArguments::NamespacePrefix(_) | + arg @ CacheServerArguments::EnableDownload(_) | + arg @ CacheServerArguments::EnableUpload(_) | + arg @ CacheServerArguments::WaitForConnection(_) | + arg @ CacheServerArguments::WaitForUploadCompletion | + arg @ CacheServerArguments::DownloadBatchSize(_) | + arg @ CacheServerArguments::UploadAllRevisions | + arg @ CacheServerArguments::UploadExistingShaderCache => { + args.push(UnityArgument::CacheServer(arg)); + }, + + arg @ DebugArguments::DisableManagedDebugger | + arg @ DebugArguments::DiagDebugShaderCompiler | + arg @ DebugArguments::DebugCodeOptimization | + arg @ DebugArguments::EnableCodeCoverage | + arg @ DebugArguments::ForceD3d12Debug | + arg @ DebugArguments::ForceD3d12DebugGbv | + arg @ DebugArguments::ForceVulkanLayers | + arg @ DebugArguments::StackTraceLogType(_) | + arg @ DebugArguments::LogMemoryPerformanceStats | + arg @ DebugArguments::WaitForManagedDebugger | + arg @ DebugArguments::WaitForNativeDebugger => { + args.push(UnityArgument::Debug(arg)); + }, + + arg @ GraphicsApiArguments::ForceClamped | + arg @ GraphicsApiArguments::ForceD3d11 | + arg @ GraphicsApiArguments::ForceD3d12 | + arg @ GraphicsApiArguments::ForceDeviceIndex | + arg @ GraphicsApiArguments::ForceGlCore | + arg @ GraphicsApiArguments::ForceGlCoreXy | + arg @ GraphicsApiArguments::ForceGlEs | + arg @ GraphicsApiArguments::ForceGlEsXy | + arg @ GraphicsApiArguments::ForceOpenGl | + arg @ GraphicsApiArguments::ForceVulkan => { + args.push(UnityArgument::GraphicsApi(arg)); + }, + + arg @ LicenseArguments::CreateManualActivationFile | + arg @ LicenseArguments::ManualLicenseFile(_) | + arg @ LicenseArguments::ReturnLicense | + arg @ LicenseArguments::Serial(_) => { + args.push(UnityArgument::License(arg)); + }, + + arg @ MetalArguments::ForceLowPowerDevice | + arg @ MetalArguments::ForceMetal | + arg @ MetalArguments::EnableMetalCapture => { + args.push(UnityArgument::Metal(arg)); + }, + + arg @ ProfilerArguments::DeepProfiling | + arg @ ProfilerArguments::Enable | + arg @ ProfilerArguments::LogFile(_) | + arg @ ProfilerArguments::CaptureFrameCount(_) | + arg @ ProfilerArguments::MaxUsedMemory(_) => { + args.push(UnityArgument::Profiler(arg)); + }, + + arg @ EditorSpecialArguments::EnableIncompatibleAssetDowngrade | + arg @ EditorSpecialArguments::GiCustomCacheLocation(_) => { + args.push(UnityArgument::Editor(arg)); + }, + + arg @ UnityArgument::Configuration(_) | + arg @ UnityArgument::BatchMode(_) | + arg @ UnityArgument::Build(_) | + arg @ UnityArgument::CacheServer(_) | + arg @ UnityArgument::Debug(_) | + arg @ UnityArgument::GraphicsApi(_) | + arg @ UnityArgument::License(_) | + arg @ UnityArgument::Metal(_) | + arg @ UnityArgument::Profiler(_) | + arg @ UnityArgument::Editor(_) | + arg @ UnityArgument::Extra(_) => { + args.push(arg); + }, + + s: OsString => { + args.push(UnityArgument::Extra(s)); + }, + + _ => compile_error!("Unsupported argument type in unity_args! macro. Ensure it's a valid argument enum variant or a String."), + } + )* + + UnityArguments(args) + } + }; +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct EditorCommand {} + +#[cfg(test)] +mod tests { + use std::{ffi::OsString, path::PathBuf}; + + use osstr_traits::ToOsString; + + use crate::{ + collection::CommandArgs, + editor_command::{ + ConfigurationArgument, ExportPackage, PerforceArgument, PlatformTextureFormat, + SharedLogLevel, TextureCompression, VcsMode, + }, + }; + + #[test] + fn config_args() { + let arg = ConfigurationArgument::CreateProject(PathBuf::from("./test-project")); + assert_eq!(arg.to_os_string(), "-createProject \"./test-project\""); + + let arg = ConfigurationArgument::ConsistencyCheck; + assert_eq!(arg.to_os_string(), "-consistencyCheck"); + + let arg = ConfigurationArgument::ConsistencyCheckSourceMode( + super::ConsistencyCheckSourceMode::Local, + ); + assert_eq!(arg.to_os_string(), "-consistencyCheckSourceMode local"); + + let arg = ConfigurationArgument::ConsistencyCheckSourceMode( + super::ConsistencyCheckSourceMode::CacheServer, + ); + assert_eq!( + arg.to_os_string(), + "-consistencyCheckSourceMode cacheserver" + ); + + let arg = + ConfigurationArgument::DisableAssemblyUpdater(vec!["a.dll".into(), "b.dll".into()]); + assert_eq!(arg.to_os_string(), "-disable-assembly-updater a.dll b.dll"); + + let arg = ConfigurationArgument::DisableGpuSkinning; + assert_eq!(arg.to_os_string(), "-disable-gpu-skinning"); + + let arg = ConfigurationArgument::DisablePlaybackEngines(vec![ + "AndroidPlayer".into(), + "iOSSupport".into(), + ]); + assert_eq!( + arg.to_os_string(), + "-disable-playback-engines AndroidPlayer iOSSupport" + ); + + let arg = ConfigurationArgument::ExecMethod("NamespaceName.ClassName.MethodName".into()); + assert_eq!( + arg.to_os_string(), + "-executeMethod NamespaceName.ClassName.MethodName" + ); + + let arg = ConfigurationArgument::ExportPackage(ExportPackage { + path: "export.unitypackage".into(), + exports: vec!["Assets/a.asset".into(), "Assets/b.asset".into()], + }); + assert_eq!( + arg.to_os_string(), + "-exportPackage Assets/a.asset Assets/b.asset export.unitypackage" + ); + + let arg = ConfigurationArgument::ImportPackage(PathBuf::from("./package.unitypackage")); + assert_eq!(arg.to_os_string(), "-importPackage ./package.unitypackage"); + + let arg = ConfigurationArgument::JobWorkerCount(8usize); + assert_eq!(arg.to_os_string(), "-job-worker-count 8"); + + let arg = ConfigurationArgument::GcHelperCount(12usize); + assert_eq!(arg.to_os_string(), "-gc-helper-count 12"); + + let arg = ConfigurationArgument::LogFile(PathBuf::from("/var/log/unity/editor.log")); + assert_eq!(arg.to_os_string(), "-logFile /var/log/unity/editor.log"); + + let arg = ConfigurationArgument::NoUpm; + assert_eq!(arg.to_os_string(), "-noUpm"); + + let arg = ConfigurationArgument::OpenFile(PathBuf::from("./scene.unity")); + assert_eq!(arg.to_os_string(), "-openfile ./scene.unity"); + + let arg = ConfigurationArgument::Password(OsString::from("hunter12")); + assert_eq!(arg.to_os_string(), "-password hunter12"); + + let arg = ConfigurationArgument::ProjectPath(PathBuf::from("./my-project/")); + assert_eq!(arg.to_os_string(), "-projectPath ./my-project/"); + + let arg = ConfigurationArgument::Quit; + assert_eq!(arg.to_os_string(), "-quit"); + + let arg = ConfigurationArgument::ReleaseCodeOptimization; + assert_eq!(arg.to_os_string(), "-releaseCodeOptimization"); + + let arg = + ConfigurationArgument::SetDefaultPlatformTextureFormat(PlatformTextureFormat::Dxt); + assert_eq!(arg.to_os_string(), "-setDefaultPlatformTextureFormat dxt"); + + let arg = + ConfigurationArgument::SetDefaultPlatformTextureFormat(PlatformTextureFormat::Atc); + assert_eq!(arg.to_os_string(), "-setDefaultPlatformTextureFormat atc"); + + let arg = + ConfigurationArgument::SetDefaultPlatformTextureFormat(PlatformTextureFormat::Etc); + assert_eq!(arg.to_os_string(), "-setDefaultPlatformTextureFormat etc"); + + let arg = + ConfigurationArgument::SetDefaultPlatformTextureFormat(PlatformTextureFormat::Etc2); + assert_eq!(arg.to_os_string(), "-setDefaultPlatformTextureFormat etc2"); + + let arg = + ConfigurationArgument::SetDefaultPlatformTextureFormat(PlatformTextureFormat::Pvrtc); + assert_eq!(arg.to_os_string(), "-setDefaultPlatformTextureFormat pvrtc"); + + let arg = + ConfigurationArgument::SetDefaultPlatformTextureFormat(PlatformTextureFormat::Astc); + assert_eq!(arg.to_os_string(), "-setDefaultPlatformTextureFormat astc"); + + let arg = ConfigurationArgument::OverrideMaxTextureSize(256usize); + assert_eq!(arg.to_os_string(), "-overrideMaxTextureSize 256"); + + let arg = ConfigurationArgument::OverrideTextureCompression(TextureCompression::NoOverride); + assert_eq!(arg.to_os_string(), "-overrideTextureCompression NoOverride"); + + let arg = ConfigurationArgument::OverrideTextureCompression( + TextureCompression::ForceUncompressed, + ); + assert_eq!( + arg.to_os_string(), + "-overrideTextureCompression ForceUncompressed" + ); + + let arg = ConfigurationArgument::OverrideTextureCompression( + TextureCompression::ForceFastCompressor, + ); + assert_eq!( + arg.to_os_string(), + "-overrideTextureCompression ForceFastCompressor" + ); + + let arg = ConfigurationArgument::OverrideTextureCompression( + TextureCompression::ForceNoCrunchCompression, + ); + assert_eq!( + arg.to_os_string(), + "-overrideTextureCompression ForceNoCrunchCompression" + ); + + let arg = ConfigurationArgument::SilentCrashes; + assert_eq!(arg.to_os_string(), "-silent-crashes"); + + let arg = ConfigurationArgument::UpmLogFile(PathBuf::from("/var/log/unity/upm.log")); + assert_eq!(arg.to_os_string(), "-upmLogFile /var/log/unity/upm.log"); + + let arg = ConfigurationArgument::Username(OsString::from("kitsucafe")); + assert_eq!(arg.to_os_string(), "-username kitsucafe"); + + let arg = ConfigurationArgument::VcsMode(VcsMode::VisibleMetaFiles); + assert_eq!(arg.to_os_string(), "-vcsMode \"Visible Meta Files\""); + + let arg = ConfigurationArgument::VcsMode(VcsMode::HiddenMetaFiles); + assert_eq!(arg.to_os_string(), "-vcsMode \"Hidden Meta Files\""); + + let arg = ConfigurationArgument::VcsMode(VcsMode::PlasticScm); + assert_eq!(arg.to_os_string(), "-vcsMode PlasticSCM"); + + let arg = ConfigurationArgument::VcsMode(VcsMode::Perforce(CommandArgs(vec![ + PerforceArgument::Workspace("TestWorkspace".into()), + PerforceArgument::Host("Hostname".into()), + PerforceArgument::Server("8.8.8.8".into()), + PerforceArgument::SharedLogLevel(SharedLogLevel::Info), + PerforceArgument::Username("kitsucafe".into()), + PerforceArgument::Password("hunter12".into()), + ]))); + assert_eq!( + arg.to_os_string(), + "-vcsMode Perforce -vcPerforceWorkspace TestWorkspace -vcPerforceHost Hostname -vcPerforceServer 8.8.8.8 -vcSharedLogLevel info -vcPerforceUsername kitsucafe -vcPerforcePassword hunter12" + ); + + let arg = ConfigurationArgument::Version; + assert_eq!(arg.to_os_string(), "-version"); + + let arg = ConfigurationArgument::Timestamps; + assert_eq!(arg.to_os_string(), "-timestamps"); + } +} diff --git a/core/src/error.rs b/core/src/error.rs new file mode 100644 index 0000000..63afd59 --- /dev/null +++ b/core/src/error.rs @@ -0,0 +1,113 @@ +use std::{error::Error as StdError, fmt::Display, path::PathBuf}; +use toml::de::Error as TomlError; + +#[derive(Debug)] +pub struct ShellExpansionError { + variable: String, + context: Option, +} + +impl ShellExpansionError { + pub fn new(variable: &str, context: Option<&str>) -> Self { + Self { + variable: variable.into(), + context: context.map(Into::into), + } + } +} + +impl Display for ShellExpansionError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if let Some(context) = &self.context { + write!(f, "Error expanding {} in {}", self.variable, context) + } else { + write!(f, "Error expanding {}", self.variable) + } + } +} + +#[derive(Debug)] +pub struct FileError { + path: PathBuf, + source: Box, +} + +impl FileError { + pub fn new(path: impl Into, source: impl Into>) -> Self { + Self { + path: path.into(), + source: source.into(), + } + } +} + +impl Display for FileError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "Error handling \"{}\": {}", + self.path.display(), + &self.source + ) + } +} + +impl std::error::Error for FileError {} + +#[derive(Debug)] +pub enum ProjectManifestError { + Read(FileError), + Parse(TomlError), +} + +impl From for ProjectManifestError { + fn from(value: FileError) -> Self { + Self::Read(value) + } +} + +impl From for ProjectManifestError { + fn from(value: TomlError) -> Self { + Self::Parse(value) + } +} + +impl std::fmt::Display for ProjectManifestError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Read(error) => write!(f, "Error reading project manifest: {error}"), + Self::Parse(error) => write!(f, "Error parsing project manifest: {error}"), + } + } +} + +impl std::error::Error for ProjectManifestError {} + +#[derive(Debug)] +pub enum Error { + LoadConfig(confique::Error), + ProjectManifest(ProjectManifestError), +} + +impl From for Error { + fn from(value: confique::Error) -> Self { + Self::LoadConfig(value) + } +} + +impl From for Error { + fn from(value: ProjectManifestError) -> Self { + Self::ProjectManifest(value) + } +} + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::LoadConfig(error) => write!(f, "Couldn't load config: {error}"), + Error::ProjectManifest(error) => write!(f, "Couldn't read projects: {error}"), + } + } +} + +impl std::error::Error for Error {} diff --git a/core/src/lib.rs b/core/src/lib.rs new file mode 100644 index 0000000..539f692 --- /dev/null +++ b/core/src/lib.rs @@ -0,0 +1,101 @@ +#![feature(min_specialization)] + +pub mod collection; +pub mod config; +pub mod editor; +pub mod editor_command; +pub mod error; +pub mod project; + +use std::{fs, ops::Deref, path::Path}; + +use serde::{Deserialize, Serialize}; + +use crate::{ + config::Cfg, + editor::Editor, + error::{Error, FileError, ProjectManifestError}, + project::Project, +}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Projects { + projects: Vec, +} + +impl Projects { + pub fn new(projects: Vec) -> Self { + Self { projects } + } +} + +impl From> for Projects { + fn from(value: Vec) -> Self { + Self::new(value) + } +} + +impl Default for Projects { + fn default() -> Self { + Self::new(Vec::new()) + } +} + +impl Deref for Projects { + type Target = Vec; + + fn deref(&self) -> &Self::Target { + &self.projects + } +} + +#[derive(Debug)] +pub struct TormentNexus { + config: Cfg, + projects: Projects, +} + +impl TormentNexus { + pub fn new(config: Cfg, projects: impl Into) -> Self { + Self { + config, + projects: projects.into(), + } + } + + pub fn load() -> Result { + let config = Cfg::from_env()?; + let projects = Self::read_projects(&config.project.manifest_path)?; + + Ok(Self::new(config, projects)) + } + + pub fn read_projects( + manifest_path: impl AsRef, + ) -> Result { + let content = fs::read_to_string(&manifest_path) + .map_err(|err| FileError::new(manifest_path.as_ref(), err))?; + + Ok(toml::from_str::(&content)?) + } + + pub fn installed_editors(&self) -> Vec { + Vec::new() + } + + pub fn projects(&self) -> &Projects { + &self.projects + } +} + +#[cfg(test)] +mod tests { + use crate::TormentNexus; + + #[test] + fn without_cfg() { + let hub = TormentNexus::load(); + println!("{hub:?}"); + assert!(hub.is_ok()) + } +} diff --git a/core/src/project.rs b/core/src/project.rs new file mode 100644 index 0000000..f585e32 --- /dev/null +++ b/core/src/project.rs @@ -0,0 +1,10 @@ +use std::path::PathBuf; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct Project { + pub name: String, + pub editor: String, + pub path: PathBuf, +} diff --git a/gui/Cargo.toml b/gui/Cargo.toml new file mode 100644 index 0000000..ac8282d --- /dev/null +++ b/gui/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "gui" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/gui/src/main.rs b/gui/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/gui/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..5d56faf --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "nightly"