diff --git a/Cargo.lock b/Cargo.lock index 842f99b2e..c21713d7e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -63,9 +63,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bumpalo" -version = "3.12.0" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" +checksum = "9b1ce199063694f33ffb7dd4e0ee620741495c32833cde5aa08f02a0bf96f0c8" [[package]] name = "byteorder" @@ -126,9 +126,9 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.23" +version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "bitflags", "clap_lex", @@ -183,9 +183,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -259,13 +259,13 @@ checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "errno" -version = "0.2.8" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -305,9 +305,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", "libc", @@ -344,6 +344,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex-literal" version = "0.4.1" @@ -352,9 +358,9 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -371,12 +377,13 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ + "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -390,9 +397,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "js-sys" @@ -411,9 +418,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317" [[package]] name = "libm" @@ -423,9 +430,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "b64f40e5e03e0d54f03845c8197d0291253cdbedfb1cb46b13c2c117554a9f4c" [[package]] name = "log" @@ -500,9 +507,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "plotters" @@ -540,9 +547,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -562,7 +569,7 @@ dependencies = [ "rand", "rand_chacha", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.6.29", "rusty-fork", "tempfile", "unarray", @@ -582,9 +589,9 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -630,9 +637,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -640,9 +647,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -652,27 +659,33 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" dependencies = [ - "regex-syntax", + "regex-syntax 0.7.1", ] [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" [[package]] name = "rlp" @@ -692,16 +705,16 @@ checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" [[package]] name = "rustix" -version = "0.36.8" +version = "0.37.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "8bbfc1d1c7c40c01715f47d71444744a81669ca84e8b63e25a55e169b1f86433" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -718,9 +731,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "same-file" @@ -739,29 +752,29 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.160" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.15", ] [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ "itoa", "ryu", @@ -795,17 +808,28 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "tempfile" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", "redox_syscall", "rustix", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -838,9 +862,9 @@ checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "version_check" @@ -859,12 +883,11 @@ dependencies = [ [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -895,7 +918,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -917,7 +940,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -971,84 +994,135 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows-targets 0.42.2", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows-targets", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "zeroize" diff --git a/Cargo.toml b/Cargo.toml index 525089032..c35b3f39c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ default = ["rand"] alloc = [] rand = ["rand_core/std"] serde = ["dep:serdect"] +extra-trait-impls = [] [package.metadata.docs.rs] all-features = true diff --git a/src/uint.rs b/src/uint.rs index 4dd22fa61..9c9a4c6d0 100644 --- a/src/uint.rs +++ b/src/uint.rs @@ -44,6 +44,9 @@ mod array; #[cfg(feature = "rand_core")] mod rand; +#[cfg(feature = "extra-trait-impls")] +mod extra_trait_impls; + use crate::{Bounded, Concat, Encoding, Integer, Limb, Split, Word, Zero}; use core::fmt; use subtle::{Choice, ConditionallySelectable}; diff --git a/src/uint/extra_trait_impls.rs b/src/uint/extra_trait_impls.rs new file mode 100644 index 000000000..bb13da4f1 --- /dev/null +++ b/src/uint/extra_trait_impls.rs @@ -0,0 +1 @@ +mod convert; diff --git a/src/uint/extra_trait_impls/convert.rs b/src/uint/extra_trait_impls/convert.rs new file mode 100644 index 000000000..701fabc9f --- /dev/null +++ b/src/uint/extra_trait_impls/convert.rs @@ -0,0 +1,403 @@ +use crate::{ + Uint, U1024, U128, U1280, U1536, U1792, U192, U2048, U256, U3072, U320, U3584, U384, U4096, + U448, U512, U576, U6144, U64, U640, U768, U8192, U896, +}; + +use crate::Limb; + +macro_rules! impl_convert { + (($source_type:ident, $source_bits:expr), ($(($target_type:ident, $target_bits:expr)),+ $(,)?)) => { + $( + impl From<$source_type> for $target_type { + fn from(x: $source_type) -> Self { + let mut limbs = [Limb::ZERO; nlimbs!($target_bits)]; + let mut i = 0; + + while i < nlimbs!($source_bits) { + limbs[i] = x.limbs[i]; + i += 1; + } + + Uint { limbs } + } + } + + impl From<&$source_type> for $target_type { + fn from(x: &$source_type) -> Self { + let mut limbs = [Limb::ZERO; nlimbs!($target_bits)]; + let mut i = 0; + + while i < nlimbs!($source_bits) { + limbs[i] = x.limbs[i]; + i += 1; + } + + Uint { limbs } + } + } + )+ + }; +} + +impl_convert! { + (U64, 64), + ( + (U128, 128), + (U192, 192), + (U256, 256), + (U320, 320), + (U384, 384), + (U448, 448), + (U512, 512), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U128, 128), + ( + (U192, 192), + (U256, 256), + (U320, 320), + (U384, 384), + (U448, 448), + (U512, 512), + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U192, 192), + ( + (U256, 256), + (U320, 320), + (U384, 384), + (U448, 448), + (U512, 512), + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U256, 256), + ( + (U320, 320), + (U384, 384), + (U448, 448), + (U512, 512), + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U320, 320), + ( + (U384, 384), + (U448, 448), + (U512, 512), + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U384, 384), + ( + (U448, 448), + (U512, 512), + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U448, 448), + ( + (U512, 512), + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U512, 512), + ( + (U576, 576), + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U576, 576), + ( + (U640, 640), + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U640, 640), + ( + (U768, 768), + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U768, 768), + ( + (U896, 896), + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U896, 896), + ( + (U1024, 1024), + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U1024, 1024), + ( + (U1280, 1280), + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U1280, 1280), + ( + (U1536, 1536), + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U1536, 1536), + ( + (U1792, 1792), + (U2048, 2048), + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U2048, 2048), + ( + (U3072, 3072), + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U3072, 3072), + ( + (U3584, 3584), + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U3584, 3584), + ( + (U4096, 4096), + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U4096, 4096), + ( + (U6144, 6144), + (U8192, 8192) + ) +} + +impl_convert! { + (U6144, 6144), + ( + (U8192, 8192) + ) +} + +#[cfg(test)] +mod tests { + use crate::{U128, U384, U64}; + + #[test] + fn concat_zero_equals_convert() { + let x = U64::from_u64(0x0011223344556677); + + assert_eq!(U128::from(&x), U128::from_u64(0x0011223344556677)); + assert_eq!(U128::from(x), U128::from_u64(0x0011223344556677)); + } + + #[test] + fn converts_non_concatable_types() { + assert_eq!(U384::ONE, U384::from(&U128::ONE)); + assert_eq!(U384::ONE, U384::from(U128::ONE)); + } +}