diff --git a/Cargo.lock b/Cargo.lock index 4051f17819..9823cd2820 100755 --- a/Cargo.lock +++ b/Cargo.lock @@ -160,9 +160,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "37bf3594c4c988a53154954629820791dde498571819ae4ca50ca811e060cc95" [[package]] name = "anymap2" @@ -308,9 +308,9 @@ dependencies = [ [[package]] name = "bip39" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" +checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387" dependencies = [ "bitcoin_hashes", "rand", @@ -319,11 +319,21 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "bitcoin-internals" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" + [[package]] name = "bitcoin_hashes" -version = "0.11.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" +checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" +dependencies = [ + "bitcoin-internals", + "hex-conservative", +] [[package]] name = "bitflags" @@ -403,15 +413,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "cc" -version = "1.1.24" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "shlex", ] @@ -469,9 +479,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.19" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -479,9 +489,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.19" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -1258,9 +1268,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -1273,9 +1283,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -1283,15 +1293,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -1300,15 +1310,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -1317,21 +1327,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1649,6 +1659,12 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hex-conservative" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" + [[package]] name = "hex-literal" version = "0.4.1" @@ -1723,9 +1739,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", @@ -1899,9 +1915,9 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2008,9 +2024,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.159" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "linked-list-repeat" @@ -2378,7 +2394,7 @@ dependencies = [ "serde", "serde_json", "toml", - "wasmparser", + "wasmparser 0.216.0", "wasmprinter", "wat", ] @@ -2686,18 +2702,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.1" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" -dependencies = [ - "portable-atomic", -] +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.66" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ "bitflags", "cfg-if", @@ -2727,9 +2740,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.103" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -2830,9 +2843,9 @@ dependencies = [ [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361" [[package]] name = "payable-features" @@ -2882,18 +2895,18 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" dependencies = [ "proc-macro2", "quote", @@ -2970,12 +2983,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" -[[package]] -name = "portable-atomic" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" - [[package]] name = "ppv-lite86" version = "0.2.20" @@ -3412,9 +3419,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.14" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "once_cell", "rustls-pki-types", @@ -3434,9 +3441,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -3451,9 +3458,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" @@ -3497,9 +3504,9 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ "windows-sys 0.59.0", ] @@ -3634,9 +3641,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "indexmap 2.6.0", "itoa", @@ -4225,9 +4232,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", ] @@ -4304,9 +4311,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -4315,9 +4322,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", @@ -4330,9 +4337,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -4342,9 +4349,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4352,9 +4359,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", @@ -4365,17 +4372,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-encoder" -version = "0.218.0" +version = "0.219.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22b896fa8ceb71091ace9bcb81e853f54043183a1c9667cf93422c40252ffa0a" +checksum = "29cbbd772edcb8e7d524a82ee8cef8dd046fc14033796a754c3ad246d019fa54" dependencies = [ "leb128", + "wasmparser 0.219.1", ] [[package]] @@ -4392,6 +4400,16 @@ dependencies = [ "serde", ] +[[package]] +name = "wasmparser" +version = "0.219.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c771866898879073c53b565a6c7b49953795159836714ac56a5befb581227c5" +dependencies = [ + "bitflags", + "indexmap 2.6.0", +] + [[package]] name = "wasmprinter" version = "0.216.0" @@ -4400,14 +4418,14 @@ checksum = "8f82916f3892e53620639217d6ec78fe15c678352a3fbf3f3745b6417d0bd70f" dependencies = [ "anyhow", "termcolor", - "wasmparser", + "wasmparser 0.216.0", ] [[package]] name = "wast" -version = "218.0.0" +version = "219.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a53cd1f0fa505df97557e36a58bddb8296e2fcdcd089529545ebfdb18a1b9d7" +checksum = "4f79a9d9df79986a68689a6b40bcc8d5d40d807487b235bebc2ac69a242b54a1" dependencies = [ "bumpalo", "leb128", @@ -4418,18 +4436,18 @@ dependencies = [ [[package]] name = "wat" -version = "1.218.0" +version = "1.219.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f87f8e14e776762e07927c27c2054d2cf678aab9aae2d431a79b3e31e4dd391" +checksum = "8bc3cf014fb336883a411cd662f987abf6a1d2a27f2f0008616a0070bbf6bd0d" dependencies = [ "wast", ] [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/contracts/feature-tests/composability/interact/src/comp_interact_config.rs b/contracts/feature-tests/composability/interact/src/comp_interact_config.rs index cffff8e915..6bb265245b 100644 --- a/contracts/feature-tests/composability/interact/src/comp_interact_config.rs +++ b/contracts/feature-tests/composability/interact/src/comp_interact_config.rs @@ -65,10 +65,7 @@ impl Config { } pub fn token_amount(&self) -> BigUint { - match BigUint::from_str(&self.amount) { - Ok(amount) => amount, - Err(_) => BigUint::default(), - } + BigUint::from_str(&self.amount).unwrap_or_default() } pub fn token_nonce(&self) -> u64 { diff --git a/framework/meta-lib/src/cargo_toml.rs b/framework/meta-lib/src/cargo_toml.rs new file mode 100644 index 0000000000..898d1932be --- /dev/null +++ b/framework/meta-lib/src/cargo_toml.rs @@ -0,0 +1,12 @@ +mod cargo_toml_contents; +mod cargo_toml_deps; +mod cargo_toml_deps_raw; +mod version_req; + +pub use cargo_toml_contents::{ + change_from_base_to_adapter_path, CargoTomlContents, CARGO_TOML_DEPENDENCIES, + CARGO_TOML_DEV_DEPENDENCIES, +}; +pub use cargo_toml_deps::{DependencyReference, GitCommitReference}; +pub use cargo_toml_deps_raw::DependencyRawValue; +pub use version_req::VersionReq; diff --git a/framework/meta-lib/src/cargo_toml_contents.rs b/framework/meta-lib/src/cargo_toml/cargo_toml_contents.rs similarity index 64% rename from framework/meta-lib/src/cargo_toml_contents.rs rename to framework/meta-lib/src/cargo_toml/cargo_toml_contents.rs index e078bcdfab..e78092a844 100644 --- a/framework/meta-lib/src/cargo_toml_contents.rs +++ b/framework/meta-lib/src/cargo_toml/cargo_toml_contents.rs @@ -8,6 +8,8 @@ use toml::{value::Table, Value}; use crate::contract::sc_config::ContractVariantProfile; +use super::DependencyRawValue; + pub const CARGO_TOML_DEPENDENCIES: &str = "dependencies"; pub const CARGO_TOML_DEV_DEPENDENCIES: &str = "dev-dependencies"; pub const PACKAGE: &str = "package"; @@ -34,24 +36,26 @@ pub struct CargoTomlContents { } impl CargoTomlContents { + pub fn parse_string(raw_str: &str, path: &Path) -> Self { + let toml_value = raw_str.parse::().unwrap_or_else(|e| { + panic!( + "failed to parse Cargo.toml toml format, path:{}, error: {e}", + path.display() + ) + }); + CargoTomlContents { + path: path.to_owned(), + toml_value, + prepend_auto_generated_comment: false, + } + } + pub fn load_from_file>(path: P) -> Self { let path_ref = path.as_ref(); let cargo_toml_content = fs::read(path_ref).expect("failed to open Cargo.toml file"); let cargo_toml_content_str = String::from_utf8(cargo_toml_content).expect("error decoding Cargo.toml utf-8"); - let toml_value = cargo_toml_content_str - .parse::() - .unwrap_or_else(|e| { - panic!( - "failed to parse Cargo.toml toml format, path:{}, error: {e}", - path_ref.display() - ) - }); - CargoTomlContents { - path: path_ref.to_owned(), - toml_value, - prepend_auto_generated_comment: false, - } + Self::parse_string(&cargo_toml_content_str, path_ref) } pub fn new() -> Self { @@ -91,27 +95,15 @@ impl CargoTomlContents { .to_string() } - pub fn dependency_version(&self, crate_name: &str) -> String { - let toml_value = self.dependency(crate_name).unwrap().to_owned(); - - if let Value::Table(table) = toml_value { - if let Some(version) = table.get("version") { - return remove_quotes(version); - } - } - panic!("could not find multiversx-sc dependency version in cargo toml") + /// Interprets the dependency value and organizes values in a struct. + pub fn dependency_raw_value(&self, crate_name: &str) -> Option { + self.dependency(crate_name) + .map(DependencyRawValue::parse_toml_value) } - pub fn dependency_path(&self, crate_name: &str) -> Option { - let toml_value = self.dependency(crate_name).unwrap().to_owned(); - - if let Value::Table(table) = toml_value { - if let Some(path) = table.get("path") { - return Option::Some(remove_quotes(path)); - } - } - - Option::None + pub fn insert_dependency_raw_value(&mut self, crate_name: &str, raw_value: DependencyRawValue) { + self.dependencies_mut() + .insert(crate_name.to_owned(), raw_value.into_toml_value()); } /// Assumes that a package section already exists. @@ -150,8 +142,10 @@ impl CargoTomlContents { pub fn dependencies_mut(&mut self) -> &mut Table { self.toml_value - .get_mut(CARGO_TOML_DEPENDENCIES) - .unwrap_or_else(|| panic!("no dependencies found in crate {}", self.path.display())) + .as_table_mut() + .expect("add deps cargo toml error wasm adapter") + .entry(CARGO_TOML_DEPENDENCIES) + .or_insert(toml::Value::Table(toml::map::Map::new())) .as_table_mut() .expect("malformed crate Cargo.toml") } @@ -341,11 +335,16 @@ pub fn change_from_base_to_adapter_path(base_path: &str) -> String { ) } +/// TODO: still useful? +#[allow(unused)] fn remove_quotes(var: &Value) -> String { var.to_string().replace('\"', "") } +#[cfg(test)] mod tests { + use super::*; + use crate::cargo_toml::{DependencyReference, GitCommitReference, VersionReq}; #[test] fn test_change_from_base_to_adapter_path() { @@ -356,4 +355,154 @@ mod tests { adapter_path ); } + + const CARGO_TOML_RAW: &str = r#" +[dependencies.by-version-1] +version = "1.2.30" + +[dependencies.by-version-1-strict] +version = "=1.2.31" + +[dependencies.by-git-commit-1] +git = "https://github.com/multiversx/repo1" +rev = "85c31b9ce730bd5ffe41589c353d935a14baaa96" + +[dependencies.by-path-1] +path = "a/b/c" + +[dependencies] +by-version-2 = "4.5.60" +by-version-2-strict = "=4.5.61" +by-path-2 = { path = "d/e/f" } +by-git-commit-2 = { git = "https://github.com/multiversx/repo2", rev = "e990be823f26d1e7f59c71536d337b7240dc3fa2" } + "#; + + #[test] + fn test_dependency_value() { + let cargo_toml = CargoTomlContents::parse_string(CARGO_TOML_RAW, "/test".as_ref()); + + // version + let raw_value = cargo_toml.dependency_raw_value("by-version-1").unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + version: Some("1.2.30".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::Version(VersionReq::from_version_str("1.2.30")), + ); + + // version, strict + let raw_value = cargo_toml + .dependency_raw_value("by-version-1-strict") + .unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + version: Some("=1.2.31".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::Version(VersionReq::from_version_str("1.2.31").strict()), + ); + + // version, compact + let raw_value = cargo_toml.dependency_raw_value("by-version-2").unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + version: Some("4.5.60".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::Version(VersionReq::from_version_str("4.5.60")), + ); + + // version, compact, strict + let raw_value = cargo_toml + .dependency_raw_value("by-version-2-strict") + .unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + version: Some("=4.5.61".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::Version(VersionReq::from_version_str("4.5.61").strict()), + ); + + // git + let raw_value = cargo_toml.dependency_raw_value("by-git-commit-1").unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + git: Some("https://github.com/multiversx/repo1".to_owned()), + rev: Some("85c31b9ce730bd5ffe41589c353d935a14baaa96".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::GitCommit(GitCommitReference { + git: "https://github.com/multiversx/repo1".to_owned(), + rev: "85c31b9ce730bd5ffe41589c353d935a14baaa96".to_owned(), + }) + ); + + // git, compact + let raw_value = cargo_toml.dependency_raw_value("by-git-commit-2").unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + git: Some("https://github.com/multiversx/repo2".to_owned()), + rev: Some("e990be823f26d1e7f59c71536d337b7240dc3fa2".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::GitCommit(GitCommitReference { + git: "https://github.com/multiversx/repo2".to_owned(), + rev: "e990be823f26d1e7f59c71536d337b7240dc3fa2".to_owned(), + }) + ); + + // path + let raw_value = cargo_toml.dependency_raw_value("by-path-1").unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + path: Some("a/b/c".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::Path("a/b/c".to_owned()), + ); + + // path, compact + let raw_value = cargo_toml.dependency_raw_value("by-path-2").unwrap(); + assert_eq!( + raw_value, + DependencyRawValue { + path: Some("d/e/f".to_owned()), + ..Default::default() + }, + ); + assert_eq!( + raw_value.interpret(), + DependencyReference::Path("d/e/f".to_owned()), + ); + } } diff --git a/framework/meta-lib/src/cargo_toml/cargo_toml_deps.rs b/framework/meta-lib/src/cargo_toml/cargo_toml_deps.rs new file mode 100644 index 0000000000..442ad6edb9 --- /dev/null +++ b/framework/meta-lib/src/cargo_toml/cargo_toml_deps.rs @@ -0,0 +1,85 @@ +use crate::version::FrameworkVersion; + +use super::{DependencyRawValue, VersionReq}; + +/// A dependency reference to a git commit. We mostly use git commits when referencing git. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct GitCommitReference { + pub git: String, + pub rev: String, +} + +/// A dependency reference to a git branch. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct GitBranchReference { + pub git: String, + pub branch: String, +} + +/// A dependency reference to a git tag. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct GitTagReference { + pub git: String, + pub tag: String, +} + +/// Models how a dependency is expressed in Cargo.toml. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DependencyReference { + Version(VersionReq), + GitCommit(GitCommitReference), + GitBranch(GitBranchReference), + GitTag(GitTagReference), + Path(String), + Unsupported(&'static str), +} + +impl DependencyReference { + pub fn is_framework_version(&self, version: &FrameworkVersion) -> bool { + if let DependencyReference::Version(version_req) = self { + &version_req.semver == version + } else { + false + } + } +} + +impl DependencyRawValue { + /// Interprets the raw dependency value as one of several possible formats. + pub fn interpret(self) -> DependencyReference { + // path is top priority + if let Some(path) = self.path { + return DependencyReference::Path(path); + } + + if let Some(git) = self.git { + return match (self.rev, self.branch, self.tag) { + (Some(rev), None, None) => { + DependencyReference::GitCommit(GitCommitReference { git, rev }) + }, + (None, Some(branch), None) => { + DependencyReference::GitBranch(GitBranchReference { git, branch }) + }, + + (None, None, Some(tag)) => { + DependencyReference::GitTag(GitTagReference { git, tag }) + }, + + (None, None, None) => DependencyReference::Unsupported( + "need at least one of: git commit, git brach, or git tag", + ), + _ => DependencyReference::Unsupported( + "can only have one of: git commit, git brach, or git tag", + ), + }; + } + + // explicit version = "..." + // handled last, because it has the lowest priority, both path and git fields override it + if let Some(version) = self.version { + return DependencyReference::Version(VersionReq::from_version_str(&version)); + } + + DependencyReference::Unsupported("expected at least one of: version, git, path") + } +} diff --git a/framework/meta-lib/src/cargo_toml/cargo_toml_deps_raw.rs b/framework/meta-lib/src/cargo_toml/cargo_toml_deps_raw.rs new file mode 100644 index 0000000000..6d7a581a88 --- /dev/null +++ b/framework/meta-lib/src/cargo_toml/cargo_toml_deps_raw.rs @@ -0,0 +1,77 @@ +#[derive(Default, Debug, Clone, PartialEq, Eq)] +pub struct DependencyRawValue { + pub version: Option, + pub git: Option, + pub rev: Option, + pub branch: Option, + pub tag: Option, + pub path: Option, +} + +impl DependencyRawValue { + pub fn from_version(version: &str) -> Self { + Self { + version: Some(version.to_owned()), + ..Default::default() + } + } + + pub fn parse_toml_value(toml_value: &toml::Value) -> Self { + match toml_value { + toml::Value::String(version) => DependencyRawValue::from_version(version), + toml::Value::Table(table) => { + let mut result = DependencyRawValue::default(); + if let Some(toml::Value::String(version)) = table.get("version") { + result.version = Some(version.to_owned()); + } + if let Some(toml::Value::String(path)) = table.get("path") { + result.path = Some(path.to_owned()); + } + if let Some(toml::Value::String(git)) = table.get("git") { + result.git = Some(git.to_owned()); + } + if let Some(toml::Value::String(rev)) = table.get("rev") { + result.rev = Some(rev.to_owned()); + } + if let Some(toml::Value::String(branch)) = table.get("branch") { + result.branch = Some(branch.to_owned()); + } + if let Some(toml::Value::String(tag)) = table.get("tag") { + result.tag = Some(tag.to_owned()); + } + result + }, + _ => panic!("Unsupported dependency value"), + } + } + + pub fn into_toml_value(self) -> toml::Value { + let mut table = toml::map::Map::new(); + + if let Some(version) = self.version { + table.insert("version".to_string(), toml::Value::String(version)); + } + + if let Some(git) = self.git { + table.insert("git".to_string(), toml::Value::String(git)); + } + + if let Some(rev) = self.rev { + table.insert("rev".to_string(), toml::Value::String(rev)); + } + + if let Some(branch) = self.branch { + table.insert("branch".to_string(), toml::Value::String(branch)); + } + + if let Some(tag) = self.tag { + table.insert("tag".to_string(), toml::Value::String(tag)); + } + + if let Some(path) = self.path { + table.insert("path".to_string(), toml::Value::String(path)); + } + + toml::Value::Table(table) + } +} diff --git a/framework/meta/src/folder_structure/version_req.rs b/framework/meta-lib/src/cargo_toml/version_req.rs similarity index 53% rename from framework/meta/src/folder_structure/version_req.rs rename to framework/meta-lib/src/cargo_toml/version_req.rs index 8d7863920d..1e834dade5 100644 --- a/framework/meta/src/folder_structure/version_req.rs +++ b/framework/meta-lib/src/cargo_toml/version_req.rs @@ -3,34 +3,16 @@ use crate::{ version_history::{find_version_by_str, LAST_VERSION}, }; -/// Models how a dependency is expressed in Cargo.toml. -#[derive(Debug, Clone)] -pub enum DependencyReference { - Version(VersionReq), - Git(GitReference), - Path(String), -} - -impl DependencyReference { - pub fn is_framework_version(&self, version: &FrameworkVersion) -> bool { - if let DependencyReference::Version(version_req) = self { - &version_req.semver == version - } else { - false - } - } -} - /// Crate version requirements, as expressed in Cargo.toml. A very crude version. /// /// TODO: replace with semver::VersionReq at some point. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct VersionReq { pub semver: FrameworkVersion, pub is_strict: bool, } impl VersionReq { - pub fn from_string(raw: String) -> Self { + pub fn from_version_str(raw: &str) -> Self { if let Some(stripped_version) = raw.strip_prefix('=') { VersionReq { semver: find_version_by_str(stripped_version) @@ -40,12 +22,19 @@ impl VersionReq { } } else { VersionReq { - semver: find_version_by_str(&raw).unwrap_or(&LAST_VERSION).clone(), + semver: find_version_by_str(raw).unwrap_or(&LAST_VERSION).clone(), is_strict: false, } } } + pub fn strict(self) -> Self { + Self { + semver: self.semver, + is_strict: true, + } + } + pub fn into_string(self) -> String { if self.is_strict { format!("={}", self.semver) @@ -54,12 +43,3 @@ impl VersionReq { } } } - -/// A dependency reference to a git commit. We mostly use git commits when referencing git. -/// -/// TODO: add support for `branch` and `tag`. -#[derive(Debug, Clone)] -pub struct GitReference { - pub git: String, - pub rev: String, -} diff --git a/framework/meta-lib/src/contract/meta_config.rs b/framework/meta-lib/src/contract/meta_config.rs index 79a0e20c31..3ed6495f53 100644 --- a/framework/meta-lib/src/contract/meta_config.rs +++ b/framework/meta-lib/src/contract/meta_config.rs @@ -3,7 +3,7 @@ use std::fs; use multiversx_sc::abi::ContractAbi; use crate::{ - cargo_toml_contents::CargoTomlContents, cli::BuildArgs, print_util::print_workspace_target_dir, + cargo_toml::CargoTomlContents, cli::BuildArgs, print_util::print_workspace_target_dir, tools::check_tools_installed, tools::find_current_workspace, }; @@ -70,8 +70,9 @@ impl MetaConfig { name: contract.wasm_crate_name.clone(), edition: main_cargo_toml_contents.package_edition(), profile: contract.settings.profile.clone(), - framework_version: main_cargo_toml_contents.dependency_version(FRAMEWORK_NAME_BASE), - framework_path: main_cargo_toml_contents.dependency_path(FRAMEWORK_NAME_BASE), + framework_dependency: main_cargo_toml_contents + .dependency_raw_value(FRAMEWORK_NAME_BASE) + .expect("missing framework dependency in Cargo.toml"), contract_features: contract.settings.features.clone(), contract_default_features: contract.settings.default_features, }; @@ -180,7 +181,7 @@ fn copy_to_wasm_unmanaged_ei() { #[cfg(test)] mod tests { - use crate::contract::sc_config::ContractVariantProfile; + use crate::{cargo_toml::DependencyRawValue, contract::sc_config::ContractVariantProfile}; const EXPECTED_CARGO_TOML_CONTENTS: &str = "# Code generated by the multiversx-sc build system. DO NOT EDIT. @@ -226,8 +227,11 @@ members = [\".\"] name: "test".to_string(), edition: "2021".to_string(), profile: ContractVariantProfile::default(), - framework_version: "x.y.z".to_string(), - framework_path: Option::Some("../../../framework/base".to_string()), + framework_dependency: DependencyRawValue { + version: Some("x.y.z".to_owned()), + path: Option::Some("../../../framework/base".to_owned()), + ..Default::default() + }, contract_features: Vec::::new(), contract_default_features: None, }; diff --git a/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs b/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs index 7a0d651b56..66f48d8e4a 100644 --- a/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs +++ b/framework/meta-lib/src/contract/wasm_cargo_toml_data.rs @@ -1,3 +1,5 @@ +use crate::cargo_toml::DependencyRawValue; + use super::sc_config::ContractVariantProfile; #[derive(Default, Debug, Clone, PartialEq, Eq)] @@ -5,8 +7,7 @@ pub struct WasmCargoTomlData { pub name: String, pub edition: String, pub profile: ContractVariantProfile, - pub framework_version: String, - pub framework_path: Option, + pub framework_dependency: DependencyRawValue, pub contract_features: Vec, pub contract_default_features: Option, } diff --git a/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs b/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs index aadcf1edc0..598ea44ca4 100644 --- a/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs +++ b/framework/meta-lib/src/contract/wasm_cargo_toml_generate.rs @@ -1,7 +1,5 @@ use super::wasm_cargo_toml_data::WasmCargoTomlData; -use crate::{ - cargo_toml_contents::change_from_base_to_adapter_path, cargo_toml_contents::CargoTomlContents, -}; +use crate::cargo_toml::{change_from_base_to_adapter_path, CargoTomlContents, DependencyRawValue}; const WASM_ADAPTER: &str = "multiversx-sc-wasm-adapter"; const CDYLIB_CRATE_TYPE: &str = "cdylib"; @@ -33,8 +31,7 @@ pub fn generate_wasm_cargo_toml( add_wasm_crate_deps( &mut new_cargo, crate_name, - cargo_toml_data.framework_version.as_str(), - &cargo_toml_data.framework_path, + &cargo_toml_data.framework_dependency, ); //check features @@ -54,41 +51,20 @@ pub fn generate_wasm_cargo_toml( fn add_wasm_crate_deps( cargo_toml_contents: &mut CargoTomlContents, crate_name: &str, - adapter_version: &str, - adapter_path: &Option, + framework_dependency: &DependencyRawValue, ) { - let mut crate_deps = toml::map::Map::new(); - crate_deps.insert("path".to_string(), toml::Value::String("..".to_string())); - - let mut adapter_deps = toml::map::Map::new(); - adapter_deps.insert( - "version".to_string(), - toml::Value::String(adapter_version.to_string()), - ); - - if adapter_path.is_some() { - adapter_deps.insert( - "path".to_string(), - toml::Value::String(change_from_base_to_adapter_path( - adapter_path.to_owned().unwrap().as_str(), - )), - ); + let mut wasm_adapter_dep = framework_dependency.clone(); + if let Some(path) = &mut wasm_adapter_dep.path { + *path = change_from_base_to_adapter_path(path); } - let mut toml_table_adapter = toml::map::Map::new(); - toml_table_adapter.insert(WASM_ADAPTER.to_string(), toml::Value::Table(adapter_deps)); - - let mut toml_table_crate = toml::map::Map::new(); - toml_table_crate.insert(crate_name.to_string(), toml::Value::Table(crate_deps)); - - toml_table_crate.extend(toml_table_adapter); + cargo_toml_contents.insert_dependency_raw_value( + crate_name, + DependencyRawValue { + path: Some("..".to_owned()), + ..Default::default() + }, + ); - cargo_toml_contents - .toml_value - .as_table_mut() - .expect("add deps cargo toml error wasm adapter") - .insert( - "dependencies".to_string(), - toml::Value::Table(toml_table_crate), - ); + cargo_toml_contents.insert_dependency_raw_value(WASM_ADAPTER, wasm_adapter_dep); } diff --git a/framework/meta-lib/src/lib.rs b/framework/meta-lib/src/lib.rs index 61125711ca..b01cb48139 100644 --- a/framework/meta-lib/src/lib.rs +++ b/framework/meta-lib/src/lib.rs @@ -1,5 +1,5 @@ pub mod abi_json; -pub mod cargo_toml_contents; +pub mod cargo_toml; pub mod cli; pub mod code_report_json; pub mod contract; diff --git a/framework/meta/src/cmd/local_deps.rs b/framework/meta/src/cmd/local_deps.rs index 7aed31a6d3..bd58036865 100644 --- a/framework/meta/src/cmd/local_deps.rs +++ b/framework/meta/src/cmd/local_deps.rs @@ -5,7 +5,7 @@ use crate::{ }, }; use common_path::common_path_all; -use multiversx_sc_meta_lib::cargo_toml_contents::CargoTomlContents; +use multiversx_sc_meta_lib::cargo_toml::CargoTomlContents; use serde::{Deserialize, Serialize}; use std::{ collections::{BTreeMap, LinkedList}, diff --git a/framework/meta/src/cmd/print_util.rs b/framework/meta/src/cmd/print_util.rs index e93099f348..d9e7a9b636 100644 --- a/framework/meta/src/cmd/print_util.rs +++ b/framework/meta/src/cmd/print_util.rs @@ -1,8 +1,8 @@ use colored::Colorize; -use multiversx_sc_meta_lib::version::FrameworkVersion; +use multiversx_sc_meta_lib::{cargo_toml::DependencyReference, version::FrameworkVersion}; use std::path::Path; -use crate::folder_structure::{DependencyReference, DirectoryType, RelevantDirectory}; +use crate::folder_structure::{DirectoryType, RelevantDirectory}; pub fn print_all_count(num_contract_crates: usize) { println!( @@ -43,7 +43,7 @@ pub fn print_tree_dir_metadata(dir: &RelevantDirectory, last_version: &Framework print!(" {}", version_string.red()); }; }, - DependencyReference::Git(git_reference) => { + DependencyReference::GitCommit(git_reference) => { let git_string = format!( "[git: {} rev: {}]", git_reference.git.truecolor(255, 127, 0), @@ -51,9 +51,29 @@ pub fn print_tree_dir_metadata(dir: &RelevantDirectory, last_version: &Framework ); print!(" {}", git_string.truecolor(255, 198, 0)); }, + DependencyReference::GitBranch(git_reference) => { + let git_string = format!( + "[git: {} branch: {}]", + git_reference.git.truecolor(255, 127, 0), + git_reference.branch.truecolor(255, 127, 0) + ); + print!(" {}", git_string.truecolor(255, 198, 0)); + }, + DependencyReference::GitTag(git_reference) => { + let git_string = format!( + "[git: {} rev: {}]", + git_reference.git.truecolor(255, 127, 0), + git_reference.tag.truecolor(255, 127, 0) + ); + print!(" {}", git_string.truecolor(255, 198, 0)); + }, DependencyReference::Path(path_buf) => { let git_string = format!("[path: {}]", path_buf.truecolor(255, 127, 0)); print!(" {}", git_string.truecolor(255, 198, 0)); }, + DependencyReference::Unsupported(error) => { + let message = format!("dependency error: {error}"); + print!(" {}", message.red()); + }, } } diff --git a/framework/meta/src/cmd/template/template_adjuster.rs b/framework/meta/src/cmd/template/template_adjuster.rs index 2e628a9266..e543d2220a 100644 --- a/framework/meta/src/cmd/template/template_adjuster.rs +++ b/framework/meta/src/cmd/template/template_adjuster.rs @@ -5,7 +5,7 @@ use crate::{ version_history::is_template_with_autogenerated_wasm, }; use convert_case::{Case, Casing}; -use multiversx_sc_meta_lib::cargo_toml_contents::CargoTomlContents; +use multiversx_sc_meta_lib::cargo_toml::CargoTomlContents; use ruplacer::Query; use toml::value::Table; diff --git a/framework/meta/src/cmd/upgrade/upgrade_0_39.rs b/framework/meta/src/cmd/upgrade/upgrade_0_39.rs index 2f04a01610..91907d47f1 100644 --- a/framework/meta/src/cmd/upgrade/upgrade_0_39.rs +++ b/framework/meta/src/cmd/upgrade/upgrade_0_39.rs @@ -7,7 +7,7 @@ use super::{ upgrade_print::*, }; use crate::folder_structure::{DirectoryType, RelevantDirectory}; -use multiversx_sc_meta_lib::cargo_toml_contents::CargoTomlContents; +use multiversx_sc_meta_lib::cargo_toml::CargoTomlContents; use ruplacer::Query; use toml::{value::Table, Value}; diff --git a/framework/meta/src/cmd/upgrade/upgrade_0_45.rs b/framework/meta/src/cmd/upgrade/upgrade_0_45.rs index 7082f92f97..a7ba21dc62 100644 --- a/framework/meta/src/cmd/upgrade/upgrade_0_45.rs +++ b/framework/meta/src/cmd/upgrade/upgrade_0_45.rs @@ -2,7 +2,7 @@ use std::path::Path; use super::upgrade_common::version_bump_in_cargo_toml; use crate::folder_structure::{DirectoryType, RelevantDirectory}; -use multiversx_sc_meta_lib::cargo_toml_contents::CargoTomlContents; +use multiversx_sc_meta_lib::cargo_toml::CargoTomlContents; use toml::Value; /// Migrate `0.44.0` to `0.45.0`, including the version bump. diff --git a/framework/meta/src/cmd/upgrade/upgrade_0_51.rs b/framework/meta/src/cmd/upgrade/upgrade_0_51.rs index d5f4cdb03a..a168cbfa62 100644 --- a/framework/meta/src/cmd/upgrade/upgrade_0_51.rs +++ b/framework/meta/src/cmd/upgrade/upgrade_0_51.rs @@ -1,7 +1,7 @@ use super::upgrade_common::{replace_in_files, version_bump_in_cargo_toml}; use super::upgrade_print::*; use crate::folder_structure::{DirectoryType, RelevantDirectory}; -use multiversx_sc_meta_lib::cargo_toml_contents::CargoTomlContents; +use multiversx_sc_meta_lib::cargo_toml::CargoTomlContents; use ruplacer::Query; use std::path::Path; use toml::Value; diff --git a/framework/meta/src/cmd/upgrade/upgrade_common.rs b/framework/meta/src/cmd/upgrade/upgrade_common.rs index 5d97cbafe6..3678051527 100644 --- a/framework/meta/src/cmd/upgrade/upgrade_common.rs +++ b/framework/meta/src/cmd/upgrade/upgrade_common.rs @@ -2,12 +2,12 @@ use super::{upgrade_print::*, upgrade_settings::UpgradeSettings}; use crate::{ cmd::all::call_contract_meta, folder_structure::{ - DirectoryType, RelevantDirectory, VersionReq, CARGO_TOML_FILE_NAME, FRAMEWORK_CRATE_NAMES, + DirectoryType, RelevantDirectory, CARGO_TOML_FILE_NAME, FRAMEWORK_CRATE_NAMES, }, version::FrameworkVersion, }; -use multiversx_sc_meta_lib::cargo_toml_contents::{ - CargoTomlContents, CARGO_TOML_DEPENDENCIES, CARGO_TOML_DEV_DEPENDENCIES, +use multiversx_sc_meta_lib::cargo_toml::{ + CargoTomlContents, VersionReq, CARGO_TOML_DEPENDENCIES, CARGO_TOML_DEV_DEPENDENCIES, }; use ruplacer::{Console, DirectoryPatcher, Query, Settings}; use std::{ @@ -179,7 +179,7 @@ fn change_version_string( framework_crate_name: &str, ) { let version_string_before = version_string.clone(); - let mut version_spec = VersionReq::from_string(std::mem::take(version_string)); + let mut version_spec = VersionReq::from_version_str(&std::mem::take(version_string)); if version_spec.semver == *from_version { version_spec.semver = to_version.clone(); } diff --git a/framework/meta/src/cmd/upgrade/upgrade_print.rs b/framework/meta/src/cmd/upgrade/upgrade_print.rs index 6c6360c14a..a531d66338 100644 --- a/framework/meta/src/cmd/upgrade/upgrade_print.rs +++ b/framework/meta/src/cmd/upgrade/upgrade_print.rs @@ -1,8 +1,6 @@ -use crate::{ - folder_structure::{DependencyReference, RelevantDirectory}, - version::FrameworkVersion, -}; +use crate::{folder_structure::RelevantDirectory, version::FrameworkVersion}; use colored::Colorize; +use multiversx_sc_meta_lib::cargo_toml::DependencyReference; use std::path::Path; pub fn print_upgrading(dir: &RelevantDirectory) { diff --git a/framework/meta/src/folder_structure.rs b/framework/meta/src/folder_structure.rs index f55ce581ff..8386362bc4 100644 --- a/framework/meta/src/folder_structure.rs +++ b/framework/meta/src/folder_structure.rs @@ -1,7 +1,5 @@ mod pretty_print; mod relevant_directory; -mod version_req; pub use pretty_print::*; pub use relevant_directory::*; -pub use version_req::*; diff --git a/framework/meta/src/folder_structure/relevant_directory.rs b/framework/meta/src/folder_structure/relevant_directory.rs index a42a7dd27a..13badaa006 100644 --- a/framework/meta/src/folder_structure/relevant_directory.rs +++ b/framework/meta/src/folder_structure/relevant_directory.rs @@ -1,12 +1,11 @@ use crate::version::FrameworkVersion; -use multiversx_sc_meta_lib::cargo_toml_contents::CargoTomlContents; +use multiversx_sc_meta_lib::cargo_toml::{CargoTomlContents, DependencyReference}; use std::{ fs::{self, DirEntry}, path::{Path, PathBuf}, }; -use toml::Value; -use super::{version_req::VersionReq, DependencyReference, GitReference}; +// use super::{version_req::VersionReq, DependencyReference, GitReference}; /// Used for retrieving crate versions. pub const FRAMEWORK_CRATE_NAMES: &[&str] = &[ @@ -174,37 +173,6 @@ fn can_continue_recursion(dir_entry: &DirEntry, blacklist: &[String]) -> bool { } } -fn find_framework_toml_dependency( - cargo_toml_contents: &CargoTomlContents, -) -> Option { - for &crate_name in FRAMEWORK_CRATE_NAMES { - if let Some(dep_value) = cargo_toml_contents.dependency(crate_name) { - if let Some(Value::String(s)) = dep_value.get("path") { - return Some(DependencyReference::Path(s.clone())); - } - - if let Some(Value::String(git)) = dep_value.get("git") { - let rev = dep_value - .get("rev") - .and_then(|v| v.as_str()) - .unwrap_or_default(); - return Some(DependencyReference::Git(GitReference { - git: git.clone(), - rev: rev.to_owned(), - })); - } - - if let Some(Value::String(s)) = dep_value.get("version") { - return Some(DependencyReference::Version(VersionReq::from_string( - s.clone(), - ))); - } - } - } - - None -} - fn load_cargo_toml_contents(dir_path: &Path) -> Option { let cargo_toml_path = dir_path.join(CARGO_TOML_FILE_NAME); if cargo_toml_path.is_file() { @@ -223,8 +191,10 @@ impl RelevantDirectory { fn find_framework_dependency(dir_path: &Path) -> Option { if let Some(cargo_toml_contents) = load_cargo_toml_contents(dir_path) { - if let Some(dep_ref) = find_framework_toml_dependency(&cargo_toml_contents) { - return Some(dep_ref); + for &crate_name in FRAMEWORK_CRATE_NAMES { + if let Some(dep_raw) = cargo_toml_contents.dependency_raw_value(crate_name) { + return Some(dep_raw.interpret()); + } } } diff --git a/framework/scenario/src/facade/scenario_world.rs b/framework/scenario/src/facade/scenario_world.rs index 056cbbe7f7..01b07ae211 100644 --- a/framework/scenario/src/facade/scenario_world.rs +++ b/framework/scenario/src/facade/scenario_world.rs @@ -21,7 +21,7 @@ pub struct ScenarioWorld { } pub(crate) enum Backend { - Debugger(DebuggerBackend), + Debugger(Box), VmGoBackend, } @@ -35,10 +35,10 @@ impl ScenarioWorld { pub fn debugger() -> Self { ScenarioWorld { current_dir: std::env::current_dir().unwrap(), - backend: Backend::Debugger(DebuggerBackend { + backend: Backend::Debugger(Box::new(DebuggerBackend { vm_runner: ScenarioVMRunner::new(), trace: None, - }), + })), } }