From 8e020a90b7d2512a30b53b765d4b1578003f088e Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 17 Jun 2025 03:32:31 +0100 Subject: [PATCH] Redraw rust roadmap --- .cursor/rules/content-migration.mdc | 155 + .../content/actix@3Y90v2ysoMcyjDL24H7mC.md | 7 + .../rust/content/arc@yYmV5qkldu0FkDhOhWOXs.md | 7 + .../content/array@2DbdHCjFzGHwCUETakaGh.md | 10 + .../content/async-programming/async-std.md | 7 - .../rust/content/async-programming/tokio.md | 8 - .../async-std@_2uQInXPdOY-DpYTO1Prt.md | 7 + ...nous-programming@yu0f5gALho0e8wzV10yow.md} | 0 ...--memory-barriers@n1Epl_nBuoXW2OE0IKYVR.md | 7 + .../content/axum@duQ1RO1lqq793mfb5w31P.md | 7 + .../content/bevy@uyrGki0jB7DXQ0HJe2-vY.md | 3 + .../binary-heap@jdndHBzmdgI6uYql6bO4W.md | 7 + .../content/boolean@bjwJCGMx5ZfrH7vz3eLS7.md | 9 + ...rences-and-slices@-onH5vPffdcZFjjVcnEpk.md | 8 + .../content/btreemap@LWgaZWTJVWLDes3HzflRh.md | 8 + .../content/btreeset@FsyLYRQP_rs4qL7IAj9Mo.md | 7 + .../content/channels@3nXJg5Y4SUug_dEAj0eQm.md | 7 + ....md => character@dXMJb2wDmmh2jie1AnPoK.md} | 2 +- .../content/clap@AId80IokM7NvGBVutmuGC.md | 3 + .../cli-utilities@2Zyyf9q_CxmOW-z2pipL.md | 3 + ...=> cli-utilities@2Zyyf9q_CxmOW-z2pipL8.md} | 0 .../roadmaps/rust/content/cli-utils/clap.md | 3 - ...tion--namespacing@c_SdccEXEJyh4ymWzvCeX.md | 9 + ...ency--parallelism@pehYc_xLrs6BFUbcpPTiJ.md | 3 + .../atomic-operations.md | 7 - .../concurrency-parallelism/futures.md | 3 - .../content/concurrency-parallelism/index.md | 3 - .../concurrency-parallelism/threads.md | 7 - ...w-and-constructs@u2wlnmE1uLaTqWw35UF0a.md} | 0 ...variant-lifetimes@7yVvMnvCvLbFa51pESx0j.md | 3 + ...d => criterionrs@clQ26LFV_9AdQ4evnaxUK.md} | 0 .../rust/content/cryptography/index.md | 3 - .../cryptography@Rv_Z-rbtELPZ1Nv0PZQmV.md | 3 + ...-types-and-traits@LwqOxYY9E9MUDgz2M40uV.md | 7 + .../database-and-orm@_n7emeqzf5UTxVB5-385G.md | 3 + .../rust/content/database-orm/diesel.md | 10 - .../rust/content/database-orm/index.md | 3 - .../rust/content/database-orm/sqlx.md | 8 - .../roadmaps/rust/content/debugging/index.md | 3 - .../debugging@7YKWYxogJq6X35IAUwcZF.md | 3 + ...-with-macro_rules@AXWXXsww7Xkl3BYgtThNe.md | 8 + ...ive-stack-vs-heap@UdXq0H8599cDTKXaIlPqt.md | 7 + ...gement-with-cargo@PkePVzV-b1pgFJP5xID5_.md | 8 + .../content/diesel@UAXpBK3lfnq0Q4RcBehZ1.md | 10 + ...ting-with-rustdoc@65nbahPj9qAb9y8dF8Jnd.md | 1 + ...ic-languages-dsls@Kb7KF7JCMaWFz-GuaQmQV.md | 7 + ...edded-and-systems@RKXljexmLAceMYwg4D_uP.md | 3 + ... => embedded-hal@LzaO2cpDajXERqEYDjMl_.md} | 0 .../roadmaps/rust/content/embedded/index.md | 3 - ...nums.md => enums@FswpjWqqt8-BzUTsDDjel.md} | 0 .../content/error-handling/custom-error.md | 7 - .../rust/content/error-handling/option.md | 8 - .../content/error-handling/propagating.md | 7 - ...> error-handling@X2gB0m-ZKSC4TJyIcwsMx.md} | 0 ...etime-annotations@R5HIVS-lyCp9b46aXqx2m.md | 3 + .../rust/content/file-parsing/index.md | 3 - .../rust/content/file-parsing/pdf-rs.md | 8 - ...ats.md => floats@rNHHp1GgmRnKIYlZayi59.md} | 0 ...nd-method-syntax@5hKJaMKpeFEUi3S1Hpiyk.md} | 0 ...yncawait-paradigm@kVfBbsOHoixvqb4dYTG3Q.md | 3 + ...yrox.md => fyrox@x9bmK_cLYpX0ebwjZUn4R.md} | 0 .../roadmaps/rust/content/game-dev/bevy.md | 3 - .../roadmaps/rust/content/game-dev/index.md | 3 - .../game-development@uG-EmZVZ-jc3mswOT4-7l.md | 3 + ...level-programming@_hxwo_iAdOwlWBltv7i6i.md | 8 + .../ggez.md => ggez@qquYnrrzUlyd8738jzj1D.md} | 0 ...-rs.md => gtk-rs@2Zp3m3Y7j6R1hK3DIVdkH.md} | 0 .../roadmaps/rust/content/gui-dev/index.md | 3 - .../roadmaps/rust/content/gui-dev/tauri.md | 7 - .../gui-development@T1LlJz5m5wnwBvKAEuGnP.md | 3 + .../content/hashmap@JAgjrf5WDXiorZ6gFRzTc.md | 10 + .../content/hashset@b1iYy4Hvkj47Q13V2HE4i.md | 9 + .../content/hyper@-MiN5ytI43EjgmWV55BhU.md | 8 + ...-rust-toolchains@oyP1ZyOgDC4nYEQXHwdVQ.md} | 0 ...d => impl-blocks@HzWHDQZjA9OgVZEWrmhKf.md} | 0 src/data/roadmaps/rust/content/index.md | 3 - ...g-rust-and-cargo@-IqA02ObYvXPW1ot6t_b9.md} | 0 ...s.md => integers@FHZSxSiOZYNBEz6tu8wuF.md} | 0 .../content/introduction/memory-safety.md | 11 - ... => introduction@4U-HZQGH7kaWCB94Xy8Mh.md} | 0 ....md => json-rust@ZXMKY0f7mqqlsvyH9u-LM.md} | 0 .../language-basics/constructs/index.md | 10 - .../language-basics/data-structures/arc.md | 7 - .../language-basics/data-structures/array.md | 10 - .../data-structures/binary-heap.md | 7 - .../data-structures/boolean.md | 9 - .../data-structures/btree-map.md | 8 - .../data-structures/btree-set.md | 7 - .../data-structures/channels.md | 7 - .../data-structures/hashmap.md | 10 - .../data-structures/hashset.md | 9 - .../language-basics/data-structures/index.md | 11 - .../data-structures/linked-list.md | 8 - .../language-basics/data-structures/mutex.md | 7 - .../language-basics/data-structures/queue.md | 7 - .../language-basics/data-structures/rc.md | 7 - .../language-basics/data-structures/rwlock.md | 7 - .../language-basics/data-structures/stack.md | 7 - .../language-basics/data-structures/string.md | 11 - .../language-basics/data-structures/tuple.md | 9 - .../language-basics/data-structures/vector.md | 11 - .../language-basics/ownership/borrowing.md | 8 - .../language-basics/ownership/index.md | 7 - .../language-basics/ownership/rules.md | 10 - .../language-basics/ownership/stack-heap.md | 13 - .../content/language-basics/syntax/index.md | 7 - ... language-basics@6E4pGifNfSAq6SbzfzFNT.md} | 0 .../content/leptos@n5t3MUqmvrcr36VIIOw0u.md | 1 + ...ime-elision-rules@qJI8GObmsxyc_tTtUEOAd.md | 3 + ...s--borrow-checker@UZ56NKloehcxUFNuSeO19.md | 3 + .../content/lifetimes-borrow/covariant.md | 3 - .../lifetimes-borrow/explicit-lifetime.md | 3 - .../rust/content/lifetimes-borrow/index.md | 3 - .../lifetimes-borrow/lifetime-elision.md | 3 - .../linkedlist@iR0ewc2yURqS7bfMWfoBi.md | 8 + .../content/loco@GnSBtZoN9mAehRf5Eczng.md | 1 + ....md => macroquad@EtKhe3lgK3NoiBOjXRb2O.md} | 0 ...--metaprogramming@eTpZXd8E2jVBmk_aSLZYV.md | 3 + .../rust/content/macros/declarative.md | 8 - .../rust/content/macros/domain-specific.md | 7 - .../roadmaps/rust/content/macros/index.md | 3 - .../rust/content/macros/procedural.md | 7 - ...ty-based-testing@HEqfA6An6ZeT3z4R610en.md} | 0 .../modules--crates@Zpowr_NGd-E2DC3g-oW9h.md | 7 + .../modules-and-crates/code-organization.md | 9 - .../modules-and-crates/dependency-mgmt.md | 8 - .../rust/content/modules-and-crates/index.md | 7 - .../content/modules-and-crates/publishing.md | 7 - .../content/mutex@GbbeV3r27IBEKHyiyLqs6.md | 7 + .../roadmaps/rust/content/networking/hyper.md | 8 - .../roadmaps/rust/content/networking/index.md | 3 - .../rust/content/networking/reqwest.md | 7 - .../networking@3pL0ARqk8uRNimopHSalW.md | 3 + ...al.md => nrf-hal@ETYrk0s5Wn80XyntNG_t1.md} | 0 ...sult-enumerations@wQHkBydWsiGEOZMdKmz40.md | 8 + ...es--memory-safety@2UQ3AuGkDbT0-54l0rOGM.md | 7 + ...g--destructuring@yqp3UePmSlGyOYpxITis4.md} | 0 .../rust/content/perf-profiling/index.md | 3 - ...nce-and-profiling@WduD9VIcYSs_JTnuMNyxk.md | 3 + ...os--custom-derive@bkVM1OIbv4XUpY6FQb8x_.md | 7 + ...ors-and--operator@pTC1ucmErVnMbNFnYLJK7.md | 7 + ...shing-on-cratesio@Op0-bdMV3kE9Be6Ot1aC6.md | 7 + .../content/queue@fq2NMV-QV9ayJl82ZWzov.md | 7 + ...l-rs.md => quinn@LmFog_qXrS9e5ARhV6OD_.md} | 0 ...uinn.md => quinn@qi1pmsY8bPk8nbHiBIGha.md} | 0 .../rust/content/rc@U9Bd-GO0QwYVLvESR4PTb.md | 7 + .../relm.md => relm@QbdGnUoTLgMHO1NCQINIi.md} | 0 .../content/reqwest@TtajUXZpyNx9AmdUawm-8.md | 7 + .../ring.md => ring@w8nxQDxmfoUHkFV66TKiq.md} | 0 .../content/rocket@ApjwY_70OGG_dNIC85oBD.md | 7 + ...ppal.md => rppal@L01rVq2_H4rWzlKygW5kA.md} | 0 ...e.md => rusqlite@a2MLN7f-FvsgdmvP9ixlv.md} | 0 ...d => rust-crypto@f68x7r-qzaQfrzXnjOI2q.md} | 0 ...b.md => rust-gdb@UkHXsAolmbk-MsJFfqObC.md} | 0 ....md => rust-lldb@p1w1iljGABgHoJjIRJYLY.md} | 0 ...-rust-playground@eYCNYtwXBjZwcPUe7QYZ-.md} | 0 src/data/roadmaps/rust/content/rustdoc.md | 7 - .../content/rwlock@WzGl4DkANjUu7VC1AIWI-.md | 7 + .../content/serde@EHErECEYws05oi59OsZpC.md | 8 + ...--deserialization@gcmKSLWfBqx4aPZOmyQsg.md | 3 + .../rust/content/serialization/index.md | 3 - .../rust/content/serialization/serde.md | 8 - .../smol.md => smol@3C9gCBAq3OQVb583S72D4.md} | 0 ...d => sodiumoxide@hzzRFb5cyXkgUdLZxaozB.md} | 0 .../content/sqlx@r2KembNZ2WIzLe87EB91K.md | 8 + .../content/stack@B-S1hE-ofNTutnkc2hJBf.md | 7 + .../content/string@Hu1jf46OpX44nam_UvYqc.md | 11 + ....md => structopt@_43912wPdXgLL8v-IMHX_.md} | 0 ...ts.md => structs@Mi9mQ-8gyDPd8Mbu1zuHt.md} | 0 .../content/tauri@Q71MnFDQBkZF1c2hj13pU.md | 7 + ...on.md => termion@YS0igALDqSanGDWva_vls.md} | 0 .../roadmaps/rust/content/testing/index.md | 9 - .../rust/content/testing/unit-integration.md | 8 - .../content/testing@08qKtgnhJ3tlb5JKfTDf5.md | 9 + ...d-message-passing@pJN260pWQVO0gHxi1-_3U.md | 7 + .../content/tokio@H0mctp3Bj2OYfIGFDWGfz.md | 8 + ...-associated-types@pRDgDtRIVpNM2CdhSOS3Q.md | 3 + ...--implementations@_EicstELZcdesHiXFWJGu.md | 7 + .../traits--generics@zLKbYX0nnbfD5n3P_JRaS.md | 7 + .../traits-generics/advanced-generics.md | 8 - .../rust/content/traits-generics/index.md | 7 - .../content/traits-generics/trait-bounds.md | 3 - .../rust/content/traits-generics/trait-def.md | 7 - ...its.md => traits@SJMuIEuHp8X6nfLb0k0TU.md} | 0 .../content/tuple@81_J7CwtUUjYPvKV_prg3.md | 9 + ...tegration-testing@w9coeW9-crDxu0KC-9gEU.md | 8 + ...es-and-constants@Gw5E21W5zis-RUIgNSEV2.md} | 0 .../content/vector@PskCueCc9pSxfnSzfdX-u.md | 11 + ... => wasm-bindgen@SUtBBqqDeR_yAkr669ZvE.md} | 0 ....md => wasm-pack@TSlj7mMUB5CDTy8uMFzKV.md} | 0 src/data/roadmaps/rust/content/wasm/index.md | 3 - ...mer.md => wasmer@iyFHvZj_ntr_dX6WlL4E1.md} | 0 .../rust/content/web-development/actix.md | 7 - .../rust/content/web-development/axum.md | 7 - .../rust/content/web-development/index.md | 3 - .../rust/content/web-development/leptos.md | 10 - .../rust/content/web-development/poem.md | 11 - .../rust/content/web-development/rocket.md | 7 - .../rust/content/web-development/warp.md | 7 - .../rust/content/web-development/yew.md | 7 - .../web-development@KomYBYxj0FTrJDYB3nU5B.md | 3 + .../webassembly-wasm@fusu4ZHH4-cjoouLr4F9U.md | 3 + ...rs.md => wgpu-rs@6wGShK9WEnXiby_Jm8sTO.md} | 0 ... => what-is-rust@cMfsRtvzvDZZJ0TqeUOxm.md} | 0 ... => why-use-rust@VhSEH_RoWFt1z2lial7xZ.md} | 0 src/data/roadmaps/rust/migration-mapping.json | 120 + src/data/roadmaps/rust/rust.json | 15942 +++++++--------- src/data/roadmaps/rust/rust.md | 3 +- src/lib/resource-progress.ts | 3 +- 209 files changed, 7738 insertions(+), 9494 deletions(-) create mode 100644 .cursor/rules/content-migration.mdc create mode 100644 src/data/roadmaps/rust/content/actix@3Y90v2ysoMcyjDL24H7mC.md create mode 100644 src/data/roadmaps/rust/content/arc@yYmV5qkldu0FkDhOhWOXs.md create mode 100644 src/data/roadmaps/rust/content/array@2DbdHCjFzGHwCUETakaGh.md delete mode 100644 src/data/roadmaps/rust/content/async-programming/async-std.md delete mode 100644 src/data/roadmaps/rust/content/async-programming/tokio.md create mode 100644 src/data/roadmaps/rust/content/async-std@_2uQInXPdOY-DpYTO1Prt.md rename src/data/roadmaps/rust/content/{async-programming/index.md => asynchronous-programming@yu0f5gALho0e8wzV10yow.md} (100%) create mode 100644 src/data/roadmaps/rust/content/atomic-operations--memory-barriers@n1Epl_nBuoXW2OE0IKYVR.md create mode 100644 src/data/roadmaps/rust/content/axum@duQ1RO1lqq793mfb5w31P.md create mode 100644 src/data/roadmaps/rust/content/bevy@uyrGki0jB7DXQ0HJe2-vY.md create mode 100644 src/data/roadmaps/rust/content/binary-heap@jdndHBzmdgI6uYql6bO4W.md create mode 100644 src/data/roadmaps/rust/content/boolean@bjwJCGMx5ZfrH7vz3eLS7.md create mode 100644 src/data/roadmaps/rust/content/borrowing-references-and-slices@-onH5vPffdcZFjjVcnEpk.md create mode 100644 src/data/roadmaps/rust/content/btreemap@LWgaZWTJVWLDes3HzflRh.md create mode 100644 src/data/roadmaps/rust/content/btreeset@FsyLYRQP_rs4qL7IAj9Mo.md create mode 100644 src/data/roadmaps/rust/content/channels@3nXJg5Y4SUug_dEAj0eQm.md rename src/data/roadmaps/rust/content/{language-basics/data-structures/character.md => character@dXMJb2wDmmh2jie1AnPoK.md} (50%) create mode 100644 src/data/roadmaps/rust/content/clap@AId80IokM7NvGBVutmuGC.md create mode 100644 src/data/roadmaps/rust/content/cli-utilities@2Zyyf9q_CxmOW-z2pipL.md rename src/data/roadmaps/rust/content/{cli-utils/index.md => cli-utilities@2Zyyf9q_CxmOW-z2pipL8.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/cli-utils/clap.md create mode 100644 src/data/roadmaps/rust/content/code-organization--namespacing@c_SdccEXEJyh4ymWzvCeX.md create mode 100644 src/data/roadmaps/rust/content/concurrency--parallelism@pehYc_xLrs6BFUbcpPTiJ.md delete mode 100644 src/data/roadmaps/rust/content/concurrency-parallelism/atomic-operations.md delete mode 100644 src/data/roadmaps/rust/content/concurrency-parallelism/futures.md delete mode 100644 src/data/roadmaps/rust/content/concurrency-parallelism/index.md delete mode 100644 src/data/roadmaps/rust/content/concurrency-parallelism/threads.md rename src/data/roadmaps/rust/content/{language-basics/syntax/control-flow.md => control-flow-and-constructs@u2wlnmE1uLaTqWw35UF0a.md} (100%) create mode 100644 src/data/roadmaps/rust/content/covariant--contravariant-lifetimes@7yVvMnvCvLbFa51pESx0j.md rename src/data/roadmaps/rust/content/{perf-profiling/criterion-rs.md => criterionrs@clQ26LFV_9AdQ4evnaxUK.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/cryptography/index.md create mode 100644 src/data/roadmaps/rust/content/cryptography@Rv_Z-rbtELPZ1Nv0PZQmV.md create mode 100644 src/data/roadmaps/rust/content/custom-error-types-and-traits@LwqOxYY9E9MUDgz2M40uV.md create mode 100644 src/data/roadmaps/rust/content/database-and-orm@_n7emeqzf5UTxVB5-385G.md delete mode 100644 src/data/roadmaps/rust/content/database-orm/diesel.md delete mode 100644 src/data/roadmaps/rust/content/database-orm/index.md delete mode 100644 src/data/roadmaps/rust/content/database-orm/sqlx.md delete mode 100644 src/data/roadmaps/rust/content/debugging/index.md create mode 100644 src/data/roadmaps/rust/content/debugging@7YKWYxogJq6X35IAUwcZF.md create mode 100644 src/data/roadmaps/rust/content/declarative-macros-with-macro_rules@AXWXXsww7Xkl3BYgtThNe.md create mode 100644 src/data/roadmaps/rust/content/deep-dive-stack-vs-heap@UdXq0H8599cDTKXaIlPqt.md create mode 100644 src/data/roadmaps/rust/content/dependency-management-with-cargo@PkePVzV-b1pgFJP5xID5_.md create mode 100644 src/data/roadmaps/rust/content/diesel@UAXpBK3lfnq0Q4RcBehZ1.md create mode 100644 src/data/roadmaps/rust/content/documenting-with-rustdoc@65nbahPj9qAb9y8dF8Jnd.md create mode 100644 src/data/roadmaps/rust/content/domain-specific-languages-dsls@Kb7KF7JCMaWFz-GuaQmQV.md create mode 100644 src/data/roadmaps/rust/content/embedded-and-systems@RKXljexmLAceMYwg4D_uP.md rename src/data/roadmaps/rust/content/{embedded/embedded-hal.md => embedded-hal@LzaO2cpDajXERqEYDjMl_.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/embedded/index.md rename src/data/roadmaps/rust/content/{language-basics/constructs/enums.md => enums@FswpjWqqt8-BzUTsDDjel.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/error-handling/custom-error.md delete mode 100644 src/data/roadmaps/rust/content/error-handling/option.md delete mode 100644 src/data/roadmaps/rust/content/error-handling/propagating.md rename src/data/roadmaps/rust/content/{error-handling/index.md => error-handling@X2gB0m-ZKSC4TJyIcwsMx.md} (100%) create mode 100644 src/data/roadmaps/rust/content/explicit-lifetime-annotations@R5HIVS-lyCp9b46aXqx2m.md delete mode 100644 src/data/roadmaps/rust/content/file-parsing/index.md delete mode 100644 src/data/roadmaps/rust/content/file-parsing/pdf-rs.md rename src/data/roadmaps/rust/content/{language-basics/data-structures/floats.md => floats@rNHHp1GgmRnKIYlZayi59.md} (100%) rename src/data/roadmaps/rust/content/{language-basics/syntax/functions.md => functions-and-method-syntax@5hKJaMKpeFEUi3S1Hpiyk.md} (100%) create mode 100644 src/data/roadmaps/rust/content/futures-and-asyncawait-paradigm@kVfBbsOHoixvqb4dYTG3Q.md rename src/data/roadmaps/rust/content/{game-dev/fyrox.md => fyrox@x9bmK_cLYpX0ebwjZUn4R.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/game-dev/bevy.md delete mode 100644 src/data/roadmaps/rust/content/game-dev/index.md create mode 100644 src/data/roadmaps/rust/content/game-development@uG-EmZVZ-jc3mswOT4-7l.md create mode 100644 src/data/roadmaps/rust/content/generics--type-level-programming@_hxwo_iAdOwlWBltv7i6i.md rename src/data/roadmaps/rust/content/{game-dev/ggez.md => ggez@qquYnrrzUlyd8738jzj1D.md} (100%) rename src/data/roadmaps/rust/content/{gui-dev/gtk-rs.md => gtk-rs@2Zp3m3Y7j6R1hK3DIVdkH.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/gui-dev/index.md delete mode 100644 src/data/roadmaps/rust/content/gui-dev/tauri.md create mode 100644 src/data/roadmaps/rust/content/gui-development@T1LlJz5m5wnwBvKAEuGnP.md create mode 100644 src/data/roadmaps/rust/content/hashmap@JAgjrf5WDXiorZ6gFRzTc.md create mode 100644 src/data/roadmaps/rust/content/hashset@b1iYy4Hvkj47Q13V2HE4i.md create mode 100644 src/data/roadmaps/rust/content/hyper@-MiN5ytI43EjgmWV55BhU.md rename src/data/roadmaps/rust/content/{introduction/ides-and-rust.md => ides-and-rust-toolchains@oyP1ZyOgDC4nYEQXHwdVQ.md} (100%) rename src/data/roadmaps/rust/content/{language-basics/constructs/impl-blocks.md => impl-blocks@HzWHDQZjA9OgVZEWrmhKf.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/index.md rename src/data/roadmaps/rust/content/{introduction/installing-rust.md => installing-rust-and-cargo@-IqA02ObYvXPW1ot6t_b9.md} (100%) rename src/data/roadmaps/rust/content/{language-basics/data-structures/integers.md => integers@FHZSxSiOZYNBEz6tu8wuF.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/introduction/memory-safety.md rename src/data/roadmaps/rust/content/{introduction/index.md => introduction@4U-HZQGH7kaWCB94Xy8Mh.md} (100%) rename src/data/roadmaps/rust/content/{serialization/json-rust.md => json-rust@ZXMKY0f7mqqlsvyH9u-LM.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/language-basics/constructs/index.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/arc.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/array.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/binary-heap.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/boolean.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/btree-map.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/btree-set.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/channels.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/hashmap.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/hashset.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/index.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/linked-list.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/mutex.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/queue.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/rc.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/rwlock.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/stack.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/string.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/tuple.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/data-structures/vector.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/ownership/borrowing.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/ownership/index.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/ownership/rules.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/ownership/stack-heap.md delete mode 100644 src/data/roadmaps/rust/content/language-basics/syntax/index.md rename src/data/roadmaps/rust/content/{language-basics/index.md => language-basics@6E4pGifNfSAq6SbzfzFNT.md} (100%) create mode 100644 src/data/roadmaps/rust/content/leptos@n5t3MUqmvrcr36VIIOw0u.md create mode 100644 src/data/roadmaps/rust/content/lifetime-elision-rules@qJI8GObmsxyc_tTtUEOAd.md create mode 100644 src/data/roadmaps/rust/content/lifetimes--borrow-checker@UZ56NKloehcxUFNuSeO19.md delete mode 100644 src/data/roadmaps/rust/content/lifetimes-borrow/covariant.md delete mode 100644 src/data/roadmaps/rust/content/lifetimes-borrow/explicit-lifetime.md delete mode 100644 src/data/roadmaps/rust/content/lifetimes-borrow/index.md delete mode 100644 src/data/roadmaps/rust/content/lifetimes-borrow/lifetime-elision.md create mode 100644 src/data/roadmaps/rust/content/linkedlist@iR0ewc2yURqS7bfMWfoBi.md create mode 100644 src/data/roadmaps/rust/content/loco@GnSBtZoN9mAehRf5Eczng.md rename src/data/roadmaps/rust/content/{game-dev/macroquad.md => macroquad@EtKhe3lgK3NoiBOjXRb2O.md} (100%) create mode 100644 src/data/roadmaps/rust/content/macros--metaprogramming@eTpZXd8E2jVBmk_aSLZYV.md delete mode 100644 src/data/roadmaps/rust/content/macros/declarative.md delete mode 100644 src/data/roadmaps/rust/content/macros/domain-specific.md delete mode 100644 src/data/roadmaps/rust/content/macros/index.md delete mode 100644 src/data/roadmaps/rust/content/macros/procedural.md rename src/data/roadmaps/rust/content/{testing/mocking.md => mocking--property-based-testing@HEqfA6An6ZeT3z4R610en.md} (100%) create mode 100644 src/data/roadmaps/rust/content/modules--crates@Zpowr_NGd-E2DC3g-oW9h.md delete mode 100644 src/data/roadmaps/rust/content/modules-and-crates/code-organization.md delete mode 100644 src/data/roadmaps/rust/content/modules-and-crates/dependency-mgmt.md delete mode 100644 src/data/roadmaps/rust/content/modules-and-crates/index.md delete mode 100644 src/data/roadmaps/rust/content/modules-and-crates/publishing.md create mode 100644 src/data/roadmaps/rust/content/mutex@GbbeV3r27IBEKHyiyLqs6.md delete mode 100644 src/data/roadmaps/rust/content/networking/hyper.md delete mode 100644 src/data/roadmaps/rust/content/networking/index.md delete mode 100644 src/data/roadmaps/rust/content/networking/reqwest.md create mode 100644 src/data/roadmaps/rust/content/networking@3pL0ARqk8uRNimopHSalW.md rename src/data/roadmaps/rust/content/{embedded/nrf-hal.md => nrf-hal@ETYrk0s5Wn80XyntNG_t1.md} (100%) create mode 100644 src/data/roadmaps/rust/content/option-and-result-enumerations@wQHkBydWsiGEOZMdKmz40.md create mode 100644 src/data/roadmaps/rust/content/ownsership-rules--memory-safety@2UQ3AuGkDbT0-54l0rOGM.md rename src/data/roadmaps/rust/content/{language-basics/syntax/pattern-matching.md => pattern-matching--destructuring@yqp3UePmSlGyOYpxITis4.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/perf-profiling/index.md create mode 100644 src/data/roadmaps/rust/content/performance-and-profiling@WduD9VIcYSs_JTnuMNyxk.md create mode 100644 src/data/roadmaps/rust/content/procedural-macros--custom-derive@bkVM1OIbv4XUpY6FQb8x_.md create mode 100644 src/data/roadmaps/rust/content/propagating-errors-and--operator@pTC1ucmErVnMbNFnYLJK7.md create mode 100644 src/data/roadmaps/rust/content/publishing-on-cratesio@Op0-bdMV3kE9Be6Ot1aC6.md create mode 100644 src/data/roadmaps/rust/content/queue@fq2NMV-QV9ayJl82ZWzov.md rename src/data/roadmaps/rust/content/{serialization/toml-rs.md => quinn@LmFog_qXrS9e5ARhV6OD_.md} (100%) rename src/data/roadmaps/rust/content/{networking/quinn.md => quinn@qi1pmsY8bPk8nbHiBIGha.md} (100%) create mode 100644 src/data/roadmaps/rust/content/rc@U9Bd-GO0QwYVLvESR4PTb.md rename src/data/roadmaps/rust/content/{gui-dev/relm.md => relm@QbdGnUoTLgMHO1NCQINIi.md} (100%) create mode 100644 src/data/roadmaps/rust/content/reqwest@TtajUXZpyNx9AmdUawm-8.md rename src/data/roadmaps/rust/content/{cryptography/ring.md => ring@w8nxQDxmfoUHkFV66TKiq.md} (100%) create mode 100644 src/data/roadmaps/rust/content/rocket@ApjwY_70OGG_dNIC85oBD.md rename src/data/roadmaps/rust/content/{embedded/rppal.md => rppal@L01rVq2_H4rWzlKygW5kA.md} (100%) rename src/data/roadmaps/rust/content/{database-orm/rusqlite.md => rusqlite@a2MLN7f-FvsgdmvP9ixlv.md} (100%) rename src/data/roadmaps/rust/content/{cryptography/rust-crypto.md => rust-crypto@f68x7r-qzaQfrzXnjOI2q.md} (100%) rename src/data/roadmaps/rust/content/{debugging/rust-gdb.md => rust-gdb@UkHXsAolmbk-MsJFfqObC.md} (100%) rename src/data/roadmaps/rust/content/{debugging/rust-lldb.md => rust-lldb@p1w1iljGABgHoJjIRJYLY.md} (100%) rename src/data/roadmaps/rust/content/{introduction/rust-repl.md => rust-repl-rust-playground@eYCNYtwXBjZwcPUe7QYZ-.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/rustdoc.md create mode 100644 src/data/roadmaps/rust/content/rwlock@WzGl4DkANjUu7VC1AIWI-.md create mode 100644 src/data/roadmaps/rust/content/serde@EHErECEYws05oi59OsZpC.md create mode 100644 src/data/roadmaps/rust/content/serialization--deserialization@gcmKSLWfBqx4aPZOmyQsg.md delete mode 100644 src/data/roadmaps/rust/content/serialization/index.md delete mode 100644 src/data/roadmaps/rust/content/serialization/serde.md rename src/data/roadmaps/rust/content/{async-programming/smol.md => smol@3C9gCBAq3OQVb583S72D4.md} (100%) rename src/data/roadmaps/rust/content/{cryptography/sodiumoxide.md => sodiumoxide@hzzRFb5cyXkgUdLZxaozB.md} (100%) create mode 100644 src/data/roadmaps/rust/content/sqlx@r2KembNZ2WIzLe87EB91K.md create mode 100644 src/data/roadmaps/rust/content/stack@B-S1hE-ofNTutnkc2hJBf.md create mode 100644 src/data/roadmaps/rust/content/string@Hu1jf46OpX44nam_UvYqc.md rename src/data/roadmaps/rust/content/{cli-utils/structopt.md => structopt@_43912wPdXgLL8v-IMHX_.md} (100%) rename src/data/roadmaps/rust/content/{language-basics/constructs/structs.md => structs@Mi9mQ-8gyDPd8Mbu1zuHt.md} (100%) create mode 100644 src/data/roadmaps/rust/content/tauri@Q71MnFDQBkZF1c2hj13pU.md rename src/data/roadmaps/rust/content/{cli-utils/termion.md => termion@YS0igALDqSanGDWva_vls.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/testing/index.md delete mode 100644 src/data/roadmaps/rust/content/testing/unit-integration.md create mode 100644 src/data/roadmaps/rust/content/testing@08qKtgnhJ3tlb5JKfTDf5.md create mode 100644 src/data/roadmaps/rust/content/threads-channels-and-message-passing@pJN260pWQVO0gHxi1-_3U.md create mode 100644 src/data/roadmaps/rust/content/tokio@H0mctp3Bj2OYfIGFDWGfz.md create mode 100644 src/data/roadmaps/rust/content/trait-bounds-and-associated-types@pRDgDtRIVpNM2CdhSOS3Q.md create mode 100644 src/data/roadmaps/rust/content/trait-definitions--implementations@_EicstELZcdesHiXFWJGu.md create mode 100644 src/data/roadmaps/rust/content/traits--generics@zLKbYX0nnbfD5n3P_JRaS.md delete mode 100644 src/data/roadmaps/rust/content/traits-generics/advanced-generics.md delete mode 100644 src/data/roadmaps/rust/content/traits-generics/index.md delete mode 100644 src/data/roadmaps/rust/content/traits-generics/trait-bounds.md delete mode 100644 src/data/roadmaps/rust/content/traits-generics/trait-def.md rename src/data/roadmaps/rust/content/{language-basics/constructs/traits.md => traits@SJMuIEuHp8X6nfLb0k0TU.md} (100%) create mode 100644 src/data/roadmaps/rust/content/tuple@81_J7CwtUUjYPvKV_prg3.md create mode 100644 src/data/roadmaps/rust/content/unit--integration-testing@w9coeW9-crDxu0KC-9gEU.md rename src/data/roadmaps/rust/content/{language-basics/syntax/variables.md => variables-datatypes-and-constants@Gw5E21W5zis-RUIgNSEV2.md} (100%) create mode 100644 src/data/roadmaps/rust/content/vector@PskCueCc9pSxfnSzfdX-u.md rename src/data/roadmaps/rust/content/{wasm/wasm-bindgen.md => wasm-bindgen@SUtBBqqDeR_yAkr669ZvE.md} (100%) rename src/data/roadmaps/rust/content/{wasm/wasm-pack.md => wasm-pack@TSlj7mMUB5CDTy8uMFzKV.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/wasm/index.md rename src/data/roadmaps/rust/content/{wasm/wasmer.md => wasmer@iyFHvZj_ntr_dX6WlL4E1.md} (100%) delete mode 100644 src/data/roadmaps/rust/content/web-development/actix.md delete mode 100644 src/data/roadmaps/rust/content/web-development/axum.md delete mode 100644 src/data/roadmaps/rust/content/web-development/index.md delete mode 100644 src/data/roadmaps/rust/content/web-development/leptos.md delete mode 100644 src/data/roadmaps/rust/content/web-development/poem.md delete mode 100644 src/data/roadmaps/rust/content/web-development/rocket.md delete mode 100644 src/data/roadmaps/rust/content/web-development/warp.md delete mode 100644 src/data/roadmaps/rust/content/web-development/yew.md create mode 100644 src/data/roadmaps/rust/content/web-development@KomYBYxj0FTrJDYB3nU5B.md create mode 100644 src/data/roadmaps/rust/content/webassembly-wasm@fusu4ZHH4-cjoouLr4F9U.md rename src/data/roadmaps/rust/content/{game-dev/wgpu-rs.md => wgpu-rs@6wGShK9WEnXiby_Jm8sTO.md} (100%) rename src/data/roadmaps/rust/content/{introduction/what-is-rust.md => what-is-rust@cMfsRtvzvDZZJ0TqeUOxm.md} (100%) rename src/data/roadmaps/rust/content/{introduction/why-rust.md => why-use-rust@VhSEH_RoWFt1z2lial7xZ.md} (100%) create mode 100644 src/data/roadmaps/rust/migration-mapping.json diff --git a/.cursor/rules/content-migration.mdc b/.cursor/rules/content-migration.mdc new file mode 100644 index 000000000..7c4e9f682 --- /dev/null +++ b/.cursor/rules/content-migration.mdc @@ -0,0 +1,155 @@ +--- +description: +globs: +alwaysApply: false +--- +# Content Migration Rule + +## Rule Name: content-migration + +## Description +This rule provides a complete process for migrating roadmap content from old structure to new structure using migration mapping files. + +## When to Use +Use this rule when you need to: +- Migrate content from content-old directories to content directories +- Use a migration-mapping.json file to map topic paths to content IDs +- Populate empty content files with existing content from legacy structure + +## Process + +### 1. Prerequisites Check +- Verify the roadmap directory has a `migration-mapping.json` file +- Confirm `content-old/` directory exists with source content +- Confirm `content/` directory exists with target files + +### 2. Migration Script Creation +Create a Node.js script with the following functionality: + +```javascript +const fs = require('fs'); +const path = require('path'); + +// Load the migration mapping +const migrationMapping = JSON.parse(fs.readFileSync('migration-mapping.json', 'utf8')); + +// Function to find old content file based on topic path +function findOldContentFile(topicPath) { + const parts = topicPath.split(':'); + + if (parts.length === 1) { + // Top level file like "introduction" + return path.join('content-old', parts[0], 'index.md'); + } else if (parts.length === 2) { + // Like "introduction:what-is-rust" + const [folder, filename] = parts; + return path.join('content-old', folder, `${filename}.md`); + } else if (parts.length === 3) { + // Like "language-basics:syntax:variables" + const [folder, subfolder, filename] = parts; + return path.join('content-old', folder, subfolder, `${filename}.md`); + } + + return null; +} + +// Function to find new content file based on content ID +function findNewContentFile(contentId) { + const contentDir = 'content'; + const files = fs.readdirSync(contentDir); + + // Find file that ends with the content ID + const matchingFile = files.find(file => file.includes(`@${contentId}.md`)); + + if (matchingFile) { + return path.join(contentDir, matchingFile); + } + + return null; +} + +// Process each mapping +console.log('Starting content migration...\n'); + +let migratedCount = 0; +let skippedCount = 0; + +for (const [topicPath, contentId] of Object.entries(migrationMapping)) { + const oldFilePath = findOldContentFile(topicPath); + const newFilePath = findNewContentFile(contentId); + + if (!oldFilePath) { + console.log(`❌ Could not determine old file path for: ${topicPath}`); + skippedCount++; + continue; + } + + if (!newFilePath) { + console.log(`❌ Could not find new file for content ID: ${contentId} (topic: ${topicPath})`); + skippedCount++; + continue; + } + + if (!fs.existsSync(oldFilePath)) { + console.log(`❌ Old file does not exist: ${oldFilePath} (topic: ${topicPath})`); + skippedCount++; + continue; + } + + try { + // Read old content + const oldContent = fs.readFileSync(oldFilePath, 'utf8'); + + // Write to new file + fs.writeFileSync(newFilePath, oldContent); + + console.log(`✅ Migrated: ${topicPath} -> ${path.basename(newFilePath)}`); + migratedCount++; + } catch (error) { + console.log(`❌ Error migrating ${topicPath}: ${error.message}`); + skippedCount++; + } +} + +console.log(`\n📊 Migration complete:`); +console.log(` Migrated: ${migratedCount} files`); +console.log(` Skipped: ${skippedCount} files`); +console.log(` Total: ${Object.keys(migrationMapping).length} mappings`); +``` + +### 3. Execution Steps +1. Navigate to the roadmap directory (e.g., `src/data/roadmaps/[roadmap-name]`) +2. Create the migration script as `migrate_content.cjs` +3. Run: `node migrate_content.cjs` +4. Review the migration results +5. Clean up the temporary script file + +### 4. Validation +After migration: +- Verify a few migrated files have proper content (not just titles) +- Check that the content structure matches the old content +- Ensure proper markdown formatting is preserved + +## File Structure Expected +``` +roadmap-directory/ +├── migration-mapping.json +├── content/ +│ ├── file1@contentId1.md +│ ├── file2@contentId2.md +│ └── ... +└── content-old/ + ├── section1/ + │ ├── index.md + │ ├── topic1.md + │ └── subsection1/ + │ └── subtopic1.md + └── section2/ + └── ... +``` + +## Notes +- The migration mapping uses colons (`:`) to separate nested paths +- Content files in the new structure use the pattern `filename@contentId.md` +- The script handles 1-3 levels of nesting in the old structure +- Always create the script with `.cjs` extension to avoid ES module issues diff --git a/src/data/roadmaps/rust/content/actix@3Y90v2ysoMcyjDL24H7mC.md b/src/data/roadmaps/rust/content/actix@3Y90v2ysoMcyjDL24H7mC.md new file mode 100644 index 000000000..18b5193d7 --- /dev/null +++ b/src/data/roadmaps/rust/content/actix@3Y90v2ysoMcyjDL24H7mC.md @@ -0,0 +1,7 @@ +# Actix + +Actix is a high-performance, pragmatic web framework for Rust built on the actor model. It features powerful middleware, WebSocket support, and excellent performance benchmarks. Actix provides a flexible, feature-rich API for building web applications, APIs, and microservices with minimal boilerplate. + +Visit the following resources to learn more: + +- [@official@Actix](https://actix.rs/) diff --git a/src/data/roadmaps/rust/content/arc@yYmV5qkldu0FkDhOhWOXs.md b/src/data/roadmaps/rust/content/arc@yYmV5qkldu0FkDhOhWOXs.md new file mode 100644 index 000000000..5c23e180c --- /dev/null +++ b/src/data/roadmaps/rust/content/arc@yYmV5qkldu0FkDhOhWOXs.md @@ -0,0 +1,7 @@ +# Arc + +`Arc` (Atomic Reference Counting) is a thread-safe smart pointer for sharing immutable data across multiple threads. It uses atomic operations to track reference counts, allowing multiple ownership of heap-allocated data. When the reference count reaches zero, the data is automatically cleaned up. + +Learn more from the following links: + +- [@article@Arc](https://doc.rust-lang.org/rust-by-example/std/arc.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/array@2DbdHCjFzGHwCUETakaGh.md b/src/data/roadmaps/rust/content/array@2DbdHCjFzGHwCUETakaGh.md new file mode 100644 index 000000000..be67b7062 --- /dev/null +++ b/src/data/roadmaps/rust/content/array@2DbdHCjFzGHwCUETakaGh.md @@ -0,0 +1,10 @@ +# Array + +Arrays are fixed-size collections of elements of the same type stored consecutively in memory. Size must be known at compile time and cannot change. Syntax: `let arr: [type; size] = [elements];`. Example: `let nums: [i32; 3] = [1, 2, 3];`. Access elements with zero-based indexing: `arr[0]`. + +Learn more from the following links: + +- [@official@Rust - array](https://doc.rust-lang.org/std/primitive.array.html) +- [@article@The Array Type](https://rust-book.cs.brown.edu/ch03-02-data-types.html#the-array-type) +- [@article@Rust Array (With Examples)](https://www.programiz.com/rust/array) +- [@video@Rust Tutorial - Arrays](https://www.youtube.com/watch?v=t047Hseyj_k&t=767s) diff --git a/src/data/roadmaps/rust/content/async-programming/async-std.md b/src/data/roadmaps/rust/content/async-programming/async-std.md deleted file mode 100644 index 64ba9f0be..000000000 --- a/src/data/roadmaps/rust/content/async-programming/async-std.md +++ /dev/null @@ -1,7 +0,0 @@ -# async-std - -`async-std` is a Rust library that provides an asynchronous version of the standard library. With the goal of being a drop-in replacement for Rust's standard library, it brings asynchronous programming directly into Rust's native system library, std. The most essential part inside `async-std` is an asynchronous runtime which includes IO and task scheduling. It lets you write asynchronous code that looks like synchronous code without having to worry about using future combinators or remembering to check if futures are ready. This significantly simplifies Rust's asynchronous programming model. - -Visit the following resources to learn more: - -- [@article@Docs.rs: async-std](https://docs.rs/async-std/latest/async_std/) diff --git a/src/data/roadmaps/rust/content/async-programming/tokio.md b/src/data/roadmaps/rust/content/async-programming/tokio.md deleted file mode 100644 index 30dc10df5..000000000 --- a/src/data/roadmaps/rust/content/async-programming/tokio.md +++ /dev/null @@ -1,8 +0,0 @@ -# Tokio - -Tokio, a Rust framework for developing applications, is used primarily for asynchronous programming that enables you to write asynchronous inputs/output, networking, and other features. Its primary function is to deliver high-performance, reliable, and easy-to-use asynchronous event-driven platform. It is built on the futures library and uses the async/await syntax of Rust for readability purposes. Tokio's 'runtime' provides I/O driver functions, scheduling and timers offering a foundation for asynchronous programming. It is designed to handle a high volume of network connections concurrently, making it ideal for building network applications. - -Visit the following resources to learn more: - -- [@official@Official Website](https://tokio.rs/) -- [@article@Docs.rs: Tokio](https://docs.rs/tokio/latest/tokio/) diff --git a/src/data/roadmaps/rust/content/async-std@_2uQInXPdOY-DpYTO1Prt.md b/src/data/roadmaps/rust/content/async-std@_2uQInXPdOY-DpYTO1Prt.md new file mode 100644 index 000000000..9eeeeda75 --- /dev/null +++ b/src/data/roadmaps/rust/content/async-std@_2uQInXPdOY-DpYTO1Prt.md @@ -0,0 +1,7 @@ +# async-std + +`async-std` provides an asynchronous version of Rust's standard library, offering familiar APIs for async programming. It includes its own runtime, task scheduler, and async I/O primitives, designed as a drop-in replacement for std with async capabilities and intuitive syntax. + +Visit the following resources to learn more: + +- [@article@Docs.rs: async-std](https://docs.rs/async-std/latest/async_std/) diff --git a/src/data/roadmaps/rust/content/async-programming/index.md b/src/data/roadmaps/rust/content/asynchronous-programming@yu0f5gALho0e8wzV10yow.md similarity index 100% rename from src/data/roadmaps/rust/content/async-programming/index.md rename to src/data/roadmaps/rust/content/asynchronous-programming@yu0f5gALho0e8wzV10yow.md diff --git a/src/data/roadmaps/rust/content/atomic-operations--memory-barriers@n1Epl_nBuoXW2OE0IKYVR.md b/src/data/roadmaps/rust/content/atomic-operations--memory-barriers@n1Epl_nBuoXW2OE0IKYVR.md new file mode 100644 index 000000000..d739e37ef --- /dev/null +++ b/src/data/roadmaps/rust/content/atomic-operations--memory-barriers@n1Epl_nBuoXW2OE0IKYVR.md @@ -0,0 +1,7 @@ +# Atomic Operations and Memory Barriers + +Atomic operations provide lock-free concurrency through uninterruptible operations like `load`, `store`, `swap`, and `compare_and_swap`. These low-level primitives enable thread-safe data sharing without locks, forming the foundation for higher-level concurrent abstractions and non-blocking data structures. + +Learn more from the following links: + +- [@article@Rust Atomics and Locks - Low-Level Concurrency in Practice](https://marabos.nl/atomics/) diff --git a/src/data/roadmaps/rust/content/axum@duQ1RO1lqq793mfb5w31P.md b/src/data/roadmaps/rust/content/axum@duQ1RO1lqq793mfb5w31P.md new file mode 100644 index 000000000..7b66f3c6a --- /dev/null +++ b/src/data/roadmaps/rust/content/axum@duQ1RO1lqq793mfb5w31P.md @@ -0,0 +1,7 @@ +# Axum + +Axum is a modern, ergonomic web framework built on hyper and designed for async Rust. It features excellent type safety, powerful extractors, middleware support, and seamless Tokio integration. Axum emphasizes developer experience while maintaining high performance for web services and APIs. + +Visit the following resources to learn more: + +[@official@Axum Documentation](https://docs.rs/axum/latest/axum/) diff --git a/src/data/roadmaps/rust/content/bevy@uyrGki0jB7DXQ0HJe2-vY.md b/src/data/roadmaps/rust/content/bevy@uyrGki0jB7DXQ0HJe2-vY.md new file mode 100644 index 000000000..5bf392ffc --- /dev/null +++ b/src/data/roadmaps/rust/content/bevy@uyrGki0jB7DXQ0HJe2-vY.md @@ -0,0 +1,3 @@ +# bevy + +Bevy is a modern, data-driven game engine built in Rust featuring an ECS (Entity Component System) architecture. It supports both 2D and 3D games with modular design, custom shaders, and high performance. Bevy emphasizes developer ergonomics and provides comprehensive tools for game development. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/binary-heap@jdndHBzmdgI6uYql6bO4W.md b/src/data/roadmaps/rust/content/binary-heap@jdndHBzmdgI6uYql6bO4W.md new file mode 100644 index 000000000..bf24c9514 --- /dev/null +++ b/src/data/roadmaps/rust/content/binary-heap@jdndHBzmdgI6uYql6bO4W.md @@ -0,0 +1,7 @@ +# BinaryHeap + +`BinaryHeap` is a priority queue implemented as a max-heap using a binary tree structure stored in an array. The largest element is always at the root, accessible via `peek()`. Supports O(log n) insertion with `push()` and removal with `pop()`. Useful for priority-based algorithms. + +Learn more from the following links: + +- [@official@BinaryHeap](https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html) diff --git a/src/data/roadmaps/rust/content/boolean@bjwJCGMx5ZfrH7vz3eLS7.md b/src/data/roadmaps/rust/content/boolean@bjwJCGMx5ZfrH7vz3eLS7.md new file mode 100644 index 000000000..43a08ec4d --- /dev/null +++ b/src/data/roadmaps/rust/content/boolean@bjwJCGMx5ZfrH7vz3eLS7.md @@ -0,0 +1,9 @@ +# Boolean + +Rust's `bool` primitive type represents truth values with two possible states: `true` or `false`. Booleans are used in conditional statements and logical operations like `&&` (AND), `||` (OR), and `!` (NOT). When cast to integers, `true` becomes `1` and `false` becomes `0`. Example: `let is_active: bool = true;` + +Learn more from the following links: + +- [@video@Rust Tutorial - Booleans](https://www.youtube.com/watch?v=t047Hseyj_k&t=388s) +- [@article@The Boolean Type](https://rust-book.cs.brown.edu/ch03-02-data-types.html#the-boolean-type) +- [@official@bool - Rust](https://doc.rust-lang.org/std/primitive.bool.html) diff --git a/src/data/roadmaps/rust/content/borrowing-references-and-slices@-onH5vPffdcZFjjVcnEpk.md b/src/data/roadmaps/rust/content/borrowing-references-and-slices@-onH5vPffdcZFjjVcnEpk.md new file mode 100644 index 000000000..47c793e39 --- /dev/null +++ b/src/data/roadmaps/rust/content/borrowing-references-and-slices@-onH5vPffdcZFjjVcnEpk.md @@ -0,0 +1,8 @@ +# Borrowing, References, and Slices + +Borrowing allows accessing data without taking ownership. Immutable borrows (`&T`) permit multiple read-only references, while mutable borrows (`&mut T`) allow one exclusive reference that can modify data. Slices (`&[T]`, `&str`) are references to contiguous sequences, enabling safe access to portions of data. + +Learn more from the following links: + +- [@article@References and Borrowing](https://rust-book.cs.brown.edu/ch04-02-references-and-borrowing.html) +- [@article@The Slice Type](https://rust-book.cs.brown.edu/ch04-04-slices.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/btreemap@LWgaZWTJVWLDes3HzflRh.md b/src/data/roadmaps/rust/content/btreemap@LWgaZWTJVWLDes3HzflRh.md new file mode 100644 index 000000000..883a0dc71 --- /dev/null +++ b/src/data/roadmaps/rust/content/btreemap@LWgaZWTJVWLDes3HzflRh.md @@ -0,0 +1,8 @@ +# BTreeMap + +`BTreeMap` stores key-value pairs in a sorted binary tree structure. Keys must implement `Ord` trait and are automatically kept in sorted order. Provides O(log n) operations for insertion, removal, and lookup. Ideal when you need ordered iteration and range queries. + +Learn more from the following links: + +- [@article@BTreeMap](https://doc.rust-lang.org/std/collections/struct.BTreeMap.html) +- [@article@BTreeMap](https://cglab.ca/~abeinges/blah/rust-btree-case/) diff --git a/src/data/roadmaps/rust/content/btreeset@FsyLYRQP_rs4qL7IAj9Mo.md b/src/data/roadmaps/rust/content/btreeset@FsyLYRQP_rs4qL7IAj9Mo.md new file mode 100644 index 000000000..ecf5e8807 --- /dev/null +++ b/src/data/roadmaps/rust/content/btreeset@FsyLYRQP_rs4qL7IAj9Mo.md @@ -0,0 +1,7 @@ +# BTreeSet + +`BTreeSet` is a sorted set of unique elements implemented using a B-tree. Elements must implement `Ord` trait and are kept in sorted order. Provides O(log n) insertion, removal, and lookup operations. Supports efficient range queries and set operations like union and intersection. + +Learn more from the following links: + +- [@article@Btree Set](https://doc.rust-lang.org/std/collections/struct.BTreeSet.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/channels@3nXJg5Y4SUug_dEAj0eQm.md b/src/data/roadmaps/rust/content/channels@3nXJg5Y4SUug_dEAj0eQm.md new file mode 100644 index 000000000..f8e47ed51 --- /dev/null +++ b/src/data/roadmaps/rust/content/channels@3nXJg5Y4SUug_dEAj0eQm.md @@ -0,0 +1,7 @@ +# Channels + +Channels enable thread communication via message passing from `std::sync::mpsc` (Multiple Producer, Single Consumer). They have `Sender` for sending data and `Receiver` for receiving. This avoids shared state concurrency issues and enables safe communication between threads without data races. + +Learn more from the following links: + +- [@article@Channels](https://doc.rust-lang.org/rust-by-example/std_misc/channels.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/character.md b/src/data/roadmaps/rust/content/character@dXMJb2wDmmh2jie1AnPoK.md similarity index 50% rename from src/data/roadmaps/rust/content/language-basics/data-structures/character.md rename to src/data/roadmaps/rust/content/character@dXMJb2wDmmh2jie1AnPoK.md index 10ec74794..50aa68331 100644 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/character.md +++ b/src/data/roadmaps/rust/content/character@dXMJb2wDmmh2jie1AnPoK.md @@ -1,6 +1,6 @@ # Character -In Rust, the `char` keyword is used to denote a character type. A `char` in Rust represents a **Unicode Scalar Value**, which means it can represent a lot more than just ASCII. Accented letters, Chinese/Japanese/Korean ideographs, emoji, and zero width spaces are all valid `char` Types in Rust. It occupies in memory the same size of `u32` type, that's 4 bytes (or `32bit`) to store a single character. It is defined with single quotes like `let x: char = 'z';`. +Rust's `char` type represents a Unicode Scalar Value, supporting far more than ASCII including emojis, accented letters, and various scripts. Each `char` occupies 4 bytes (32 bits) in memory and is defined using single quotes. Example: `let letter: char = 'z';` or `let emoji: char = '🦀';` Learn more from the following links: diff --git a/src/data/roadmaps/rust/content/clap@AId80IokM7NvGBVutmuGC.md b/src/data/roadmaps/rust/content/clap@AId80IokM7NvGBVutmuGC.md new file mode 100644 index 000000000..4e537be26 --- /dev/null +++ b/src/data/roadmaps/rust/content/clap@AId80IokM7NvGBVutmuGC.md @@ -0,0 +1,3 @@ +# clap + +`clap` is Rust's most popular command-line argument parser library. It provides declarative CLI definition with automatic help generation, subcommands, validation, and error handling. Supports both builder pattern and derive macros for easy CLI app development with comprehensive features. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/cli-utilities@2Zyyf9q_CxmOW-z2pipL.md b/src/data/roadmaps/rust/content/cli-utilities@2Zyyf9q_CxmOW-z2pipL.md new file mode 100644 index 000000000..d15d3e202 --- /dev/null +++ b/src/data/roadmaps/rust/content/cli-utilities@2Zyyf9q_CxmOW-z2pipL.md @@ -0,0 +1,3 @@ +# CLI Utilities + +Rust excels at building fast, reliable command-line tools with memory safety and performance. Popular crates include `clap` for argument parsing, `structopt` for derives, and `termion` for terminal control. Rust's tooling ecosystem makes CLI development efficient and robust. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/cli-utils/index.md b/src/data/roadmaps/rust/content/cli-utilities@2Zyyf9q_CxmOW-z2pipL8.md similarity index 100% rename from src/data/roadmaps/rust/content/cli-utils/index.md rename to src/data/roadmaps/rust/content/cli-utilities@2Zyyf9q_CxmOW-z2pipL8.md diff --git a/src/data/roadmaps/rust/content/cli-utils/clap.md b/src/data/roadmaps/rust/content/cli-utils/clap.md deleted file mode 100644 index be2cae9b4..000000000 --- a/src/data/roadmaps/rust/content/cli-utils/clap.md +++ /dev/null @@ -1,3 +0,0 @@ -# clap - -`clap` is a command line argument parser for Rust. It is used for managing and parsing command line arguments and subcommands for your application. `clap` allows you to set the name, version, author, about info, and other global settings of your application. It also supports auto-generated help messages, custom errors, and is unicode compatible. It is very flexible and highly configurable and allows you to extract the needed values easily with the provided methods. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/code-organization--namespacing@c_SdccEXEJyh4ymWzvCeX.md b/src/data/roadmaps/rust/content/code-organization--namespacing@c_SdccEXEJyh4ymWzvCeX.md new file mode 100644 index 000000000..b0d19fc09 --- /dev/null +++ b/src/data/roadmaps/rust/content/code-organization--namespacing@c_SdccEXEJyh4ymWzvCeX.md @@ -0,0 +1,9 @@ +# Code Organization and Namespacing + +Rust organizes code through modules (`mod`) for grouping related functionality and crates (binary/library projects). Modules provide namespacing and can be nested. Crates are compilation units with a root file (`main.rs` or `lib.rs`) forming the module tree for libraries or executables. + +Visit the following resources to learn more: + +- [@article@Rust by Example: Modules](https://doc.rust-lang.org/rust-by-example/mod.html) +- [@article@The Rust Reference: Namespaces](https://doc.rust-lang.org/reference/names/namespaces.html) +- [@feed@Explore top posts about General Programming](https://app.daily.dev/tags/general-programming?ref=roadmapsh) diff --git a/src/data/roadmaps/rust/content/concurrency--parallelism@pehYc_xLrs6BFUbcpPTiJ.md b/src/data/roadmaps/rust/content/concurrency--parallelism@pehYc_xLrs6BFUbcpPTiJ.md new file mode 100644 index 000000000..b85f954bf --- /dev/null +++ b/src/data/roadmaps/rust/content/concurrency--parallelism@pehYc_xLrs6BFUbcpPTiJ.md @@ -0,0 +1,3 @@ +# Concurrency and Parallelism + +Concurrency allows tasks to run in overlapping time periods (interleaved execution), while parallelism executes multiple tasks simultaneously on different cores. Rust provides safe concurrency primitives like channels, mutexes, and atomic operations without data races, enforced at compile time. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/concurrency-parallelism/atomic-operations.md b/src/data/roadmaps/rust/content/concurrency-parallelism/atomic-operations.md deleted file mode 100644 index f6598acb5..000000000 --- a/src/data/roadmaps/rust/content/concurrency-parallelism/atomic-operations.md +++ /dev/null @@ -1,7 +0,0 @@ -# Atomic Operations and Memory Barriers - -Atomic operations in Rust are low-level types that support lock-free concurrent programming. These operations are atomic because they complete in a single operation rather than being interruptible. In Rust, atomic types provide primitive shared-memory communication between threads, and can also be used for non-blocking data structures and are supported using machine instructions directly. They form the building blocks for other, higher-level concurrency abstractions. It includes variety of atomic operations such as `store`, `load`, `swap`, `fetch_add`, `compare_and_swap` and more, which are operations performed in a single, uninterrupted step. - -Learn more from the following links: - -- [@article@Rust Atomics and Locks - Low-Level Concurrency in Practice](https://marabos.nl/atomics/) diff --git a/src/data/roadmaps/rust/content/concurrency-parallelism/futures.md b/src/data/roadmaps/rust/content/concurrency-parallelism/futures.md deleted file mode 100644 index 0ff87189e..000000000 --- a/src/data/roadmaps/rust/content/concurrency-parallelism/futures.md +++ /dev/null @@ -1,3 +0,0 @@ -# Futures and Async/Await Paradigm - -Futures in Rust represent values that might not have been computed yet. They are a way for the program to describe an operation that will be completed at some point in the future, or will complete asynchronously. They are a cornerstone of many async applications in Rust. A Future is an asynchronous computation that can produce a value (Ok-type) or an error (Err-type). The critical idea behind futures is that they can produce their value at some point in time, that "sometime" can be now, in the future, or never. diff --git a/src/data/roadmaps/rust/content/concurrency-parallelism/index.md b/src/data/roadmaps/rust/content/concurrency-parallelism/index.md deleted file mode 100644 index a27d3a3d4..000000000 --- a/src/data/roadmaps/rust/content/concurrency-parallelism/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Concurrency and Parallelism - -Concurrency and parallelism are two terms related to multitasking. In **concurrency**, tasks have the ability to run in an overlapping manner, which does not necessarily mean they run at the same exact time. It means the start and end times of the tasks intersect. On the other hand, **parallelism** is the process where several tasks are executed simultaneously. In the context of programming, especially in systems such as Rust, these concepts are exceptionally important. Understanding them is crucial to implementing complex algorithms and systems that benefit from the efficient use of resources, and most importantly, time. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/concurrency-parallelism/threads.md b/src/data/roadmaps/rust/content/concurrency-parallelism/threads.md deleted file mode 100644 index 4cde3677d..000000000 --- a/src/data/roadmaps/rust/content/concurrency-parallelism/threads.md +++ /dev/null @@ -1,7 +0,0 @@ -# Threads, Channels, and Message Passing - -Threads are the smallest unit of computing that can be scheduled by an operating system. They live in the context of a process, and each thread within a process shares the process's resources including memory and file handles. In Rust, the `std::thread` module allows you to have direct control over threads. This model of concurrency is known as 1:1, mapping one operating system thread to one language thread. You can write concurrent programs in Rust using threads in a similar way as most other languages. You start threads with `std::thread::spawn` and wait for them to finish with `join`. - -Learn more from the following links: - -- [@article@Rust Atomics and Locks - Low-Level Concurrency in Practice](https://marabos.nl/atomics/) diff --git a/src/data/roadmaps/rust/content/language-basics/syntax/control-flow.md b/src/data/roadmaps/rust/content/control-flow-and-constructs@u2wlnmE1uLaTqWw35UF0a.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/syntax/control-flow.md rename to src/data/roadmaps/rust/content/control-flow-and-constructs@u2wlnmE1uLaTqWw35UF0a.md diff --git a/src/data/roadmaps/rust/content/covariant--contravariant-lifetimes@7yVvMnvCvLbFa51pESx0j.md b/src/data/roadmaps/rust/content/covariant--contravariant-lifetimes@7yVvMnvCvLbFa51pESx0j.md new file mode 100644 index 000000000..c897d29f6 --- /dev/null +++ b/src/data/roadmaps/rust/content/covariant--contravariant-lifetimes@7yVvMnvCvLbFa51pESx0j.md @@ -0,0 +1,3 @@ +# Covariant and Contravariant Lifetimes + +Variance describes how subtyping relationships change when types are nested. Covariant types preserve ordering (`&'long T` is subtype of `&'short T`), contravariant reverses it, invariant requires exact matches. Affects how lifetimes work with references, boxes, and function parameters. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/perf-profiling/criterion-rs.md b/src/data/roadmaps/rust/content/criterionrs@clQ26LFV_9AdQ4evnaxUK.md similarity index 100% rename from src/data/roadmaps/rust/content/perf-profiling/criterion-rs.md rename to src/data/roadmaps/rust/content/criterionrs@clQ26LFV_9AdQ4evnaxUK.md diff --git a/src/data/roadmaps/rust/content/cryptography/index.md b/src/data/roadmaps/rust/content/cryptography/index.md deleted file mode 100644 index 6b8b97d95..000000000 --- a/src/data/roadmaps/rust/content/cryptography/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Cryptography - -Cryptography is a method of storing and transmitting data in a particular form so that only those for whom it is intended can read and process it. This practice is widely used in securing modern communications and protecting data from theft or tampering. It bases itself on the fundamentals of mathematics to transform data into a format that is unreadable without a key. In its simplest form, it involves just two steps: encryption and decryption. Encryption is the process of converting readable data into an unreadable format using an algorithm and a key. Decryption is the reverse of encryption; it turns the unreadable data back into its original form with the use of the matching key. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/cryptography@Rv_Z-rbtELPZ1Nv0PZQmV.md b/src/data/roadmaps/rust/content/cryptography@Rv_Z-rbtELPZ1Nv0PZQmV.md new file mode 100644 index 000000000..81fa88cb7 --- /dev/null +++ b/src/data/roadmaps/rust/content/cryptography@Rv_Z-rbtELPZ1Nv0PZQmV.md @@ -0,0 +1,3 @@ +# Cryptography + +Cryptography involves securing data through encryption (making readable data unreadable) and decryption (reversing the process). Rust offers crypto libraries like `ring`, `sodiumoxide`, and `rust-crypto` for hashing, symmetric/asymmetric encryption, and digital signatures with memory-safe implementations. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/custom-error-types-and-traits@LwqOxYY9E9MUDgz2M40uV.md b/src/data/roadmaps/rust/content/custom-error-types-and-traits@LwqOxYY9E9MUDgz2M40uV.md new file mode 100644 index 000000000..efaa0a9fd --- /dev/null +++ b/src/data/roadmaps/rust/content/custom-error-types-and-traits@LwqOxYY9E9MUDgz2M40uV.md @@ -0,0 +1,7 @@ +# Custom Error Types and Traits + +Custom error types use `enum` to define specific error variants with attached data. Implement `Debug`, `Display`, and optionally `std::error::Error` traits for proper error handling integration. Libraries like `thiserror` provide derive macros to simplify custom error creation and formatting. + +Visit the following resources to learn more: + +- [@article@Rust by Example: Defining an error type](https://doc.rust-lang.org/rust-by-example/error/multiple_error_types/define_error_type.html) diff --git a/src/data/roadmaps/rust/content/database-and-orm@_n7emeqzf5UTxVB5-385G.md b/src/data/roadmaps/rust/content/database-and-orm@_n7emeqzf5UTxVB5-385G.md new file mode 100644 index 000000000..6e4061633 --- /dev/null +++ b/src/data/roadmaps/rust/content/database-and-orm@_n7emeqzf5UTxVB5-385G.md @@ -0,0 +1,3 @@ +# Database and ORM + +ORMs (Object-Relational Mapping) provide abstraction layers between Rust code and SQL databases. Popular Rust ORMs include Diesel (compile-time safety), SQLx (async with compile-time query checking), and Sea-ORM. They eliminate raw SQL writing while maintaining type safety and performance. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/database-orm/diesel.md b/src/data/roadmaps/rust/content/database-orm/diesel.md deleted file mode 100644 index 8ce5fb727..000000000 --- a/src/data/roadmaps/rust/content/database-orm/diesel.md +++ /dev/null @@ -1,10 +0,0 @@ -# Diesel - -Diesel is a safe, extensible ORM (Object-Relational Mapping) and query builder for Rust. Diesel is designed to help you move between database schema, SQL queries, and your data in your application with safety and ease. It provides a high-level API and avoids the need to manage database connections manually. It simplifies SQL interfacing, ensuring type safety and connection handling right from the box. Diesel supports PostgreSQL, SQLite, and MySQL databases. - -Visit the following resources to learn more: - -- [@official@Diesel](https://diesel.rs/) -- [@opensource@Repository](https://github.com/diesel-rs/diesel) -- [@article@Docs.rs: Diesel](https://docs.rs/diesel/latest/diesel/) -- [@video@YouTube](https://www.youtube.com/watch?v=tRC4EIKhMzw) diff --git a/src/data/roadmaps/rust/content/database-orm/index.md b/src/data/roadmaps/rust/content/database-orm/index.md deleted file mode 100644 index 9e06be695..000000000 --- a/src/data/roadmaps/rust/content/database-orm/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Database and ORM - -ORM stands for Object-Relational Mapping. It's a programming technique used to convert data between incompatible type systems using object-oriented programming languages. In Rust, the database ORM provides an abstraction for dealing with SQL queries, where you don't need to write raw SQL queries. Instead, you can create, delete and manipulate database records using Rust's interface. It transforms data from a relational database model (tables, rows, and columns) into objects that can be used in code. Important database ORMs in Rust include Diesel, sqlx, and others. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/database-orm/sqlx.md b/src/data/roadmaps/rust/content/database-orm/sqlx.md deleted file mode 100644 index bbb5d5628..000000000 --- a/src/data/roadmaps/rust/content/database-orm/sqlx.md +++ /dev/null @@ -1,8 +0,0 @@ -# sqlx - -`SQLx` is an extensible, async, pure-Rust SQL toolkit and ORM that provides a suite of macros and builders for interacting with databases. It enables you to interact directly with your database without having to write SQL-statements, but with the strong typing of Rust. SQLx supports PostgreSQL, MySQL, SQLite, and MSSQL and is compatible with the `tokio` and `async-std` async runtimes. SQLx ensures compile-time checking of your SQL queries, which significantly reduces runtime errors due to malformed SQL. - -Visit the following resources to learn more: - -- [@opensource@Repository](https://github.com/launchbadge/sqlx) -- [@article@Docs.rs: sqlx](https://docs.rs/sqlx/latest/sqlx/) diff --git a/src/data/roadmaps/rust/content/debugging/index.md b/src/data/roadmaps/rust/content/debugging/index.md deleted file mode 100644 index 2ec4c581f..000000000 --- a/src/data/roadmaps/rust/content/debugging/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Debugging - -"Debugging" is a critical process in software development that involves identifying, isolating, and fixing (or "debugging") problems or errors in a computer program or software code. In Rust, the Rust compiler plays a big part in this process because of its strictness and propensity for compile-time error checking. Rust also provides various debugging tools such as `rust-gdb` and `rust-lldb`. Moreover, the language comes with standard library macros like `debug!` and `println!` for tracing and debugging. Additionally, for a thorough debugging experience, there are debugging variables that provide a backtrace of a system's state, and tests that can help you ensure that your system works as expected. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/debugging@7YKWYxogJq6X35IAUwcZF.md b/src/data/roadmaps/rust/content/debugging@7YKWYxogJq6X35IAUwcZF.md new file mode 100644 index 000000000..8761f1736 --- /dev/null +++ b/src/data/roadmaps/rust/content/debugging@7YKWYxogJq6X35IAUwcZF.md @@ -0,0 +1,3 @@ +# Debugging + +Rust provides excellent debugging support through `rust-gdb` and `rust-lldb` debuggers, along with built-in macros like `println!`, `dbg!`, and `debug!`. The strict compiler catches many bugs at compile-time, while runtime debugging is enhanced by panic backtraces and comprehensive error messages. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/declarative-macros-with-macro_rules@AXWXXsww7Xkl3BYgtThNe.md b/src/data/roadmaps/rust/content/declarative-macros-with-macro_rules@AXWXXsww7Xkl3BYgtThNe.md new file mode 100644 index 000000000..9faf703dc --- /dev/null +++ b/src/data/roadmaps/rust/content/declarative-macros-with-macro_rules@AXWXXsww7Xkl3BYgtThNe.md @@ -0,0 +1,8 @@ +# Declarative Macros with macro_rules! + +Declarative macros use `macro_rules!` for pattern-based code generation at compile time. They match syntax patterns and expand into replacement code, enabling code reuse without runtime overhead. More limited than procedural macros but simpler to write and understand. + +Visit the following resources to learn more: + +- [@article@Rust Book: Macros](https://doc.rust-lang.org/book/ch19-06-macros.html) +- [@article@Macros by Example](https://doc.rust-lang.org/reference/macros-by-example.html) diff --git a/src/data/roadmaps/rust/content/deep-dive-stack-vs-heap@UdXq0H8599cDTKXaIlPqt.md b/src/data/roadmaps/rust/content/deep-dive-stack-vs-heap@UdXq0H8599cDTKXaIlPqt.md new file mode 100644 index 000000000..c4ce9f2ac --- /dev/null +++ b/src/data/roadmaps/rust/content/deep-dive-stack-vs-heap@UdXq0H8599cDTKXaIlPqt.md @@ -0,0 +1,7 @@ +# Deep Dive: Stack vs Heap + +Stack memory stores fixed-size data with automatic allocation/deallocation following LIFO order - fast but limited. Heap memory stores dynamic-size data with manual management - slower but flexible. Rust's ownership system ensures memory safety across both, with stack being default and heap accessed via smart pointers. + +Learn more from the following links: + +- [@article@The Stack and the Heap](https://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/the-stack-and-the-heap.html) diff --git a/src/data/roadmaps/rust/content/dependency-management-with-cargo@PkePVzV-b1pgFJP5xID5_.md b/src/data/roadmaps/rust/content/dependency-management-with-cargo@PkePVzV-b1pgFJP5xID5_.md new file mode 100644 index 000000000..8c4143630 --- /dev/null +++ b/src/data/roadmaps/rust/content/dependency-management-with-cargo@PkePVzV-b1pgFJP5xID5_.md @@ -0,0 +1,8 @@ +# Dependency Management with Cargo.toml + +Cargo manages Rust projects and dependencies through `Cargo.toml` files. Dependencies are listed in `[dependencies]` sections with crate names and semantic version specifications. Cargo automatically downloads, builds, and manages external libraries (crates) from crates.io or other sources. + +Visit the following resources to learn more: + +- [@article@Rust Blog: Cargo](https://blog.rust-lang.org/2016/05/05/cargo-pillars.html) +- [@article@Rust by Example: Dependencies](https://doc.rust-lang.org/rust-by-example/cargo/deps.html) diff --git a/src/data/roadmaps/rust/content/diesel@UAXpBK3lfnq0Q4RcBehZ1.md b/src/data/roadmaps/rust/content/diesel@UAXpBK3lfnq0Q4RcBehZ1.md new file mode 100644 index 000000000..97a8bf30a --- /dev/null +++ b/src/data/roadmaps/rust/content/diesel@UAXpBK3lfnq0Q4RcBehZ1.md @@ -0,0 +1,10 @@ +# Diesel + +Diesel is a safe, extensible ORM and query builder for Rust that provides compile-time guarantees against SQL injection and type mismatches. It supports PostgreSQL, MySQL, and SQLite with high-level APIs for database operations while maintaining excellent performance and type safety. + +Visit the following resources to learn more: + +- [@official@Diesel](https://diesel.rs/) +- [@opensource@Repository](https://github.com/diesel-rs/diesel) +- [@article@Docs.rs: Diesel](https://docs.rs/diesel/latest/diesel/) +- [@video@YouTube](https://www.youtube.com/watch?v=tRC4EIKhMzw) diff --git a/src/data/roadmaps/rust/content/documenting-with-rustdoc@65nbahPj9qAb9y8dF8Jnd.md b/src/data/roadmaps/rust/content/documenting-with-rustdoc@65nbahPj9qAb9y8dF8Jnd.md new file mode 100644 index 000000000..f751283cd --- /dev/null +++ b/src/data/roadmaps/rust/content/documenting-with-rustdoc@65nbahPj9qAb9y8dF8Jnd.md @@ -0,0 +1 @@ +# Documenting with `rustdoc` \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/domain-specific-languages-dsls@Kb7KF7JCMaWFz-GuaQmQV.md b/src/data/roadmaps/rust/content/domain-specific-languages-dsls@Kb7KF7JCMaWFz-GuaQmQV.md new file mode 100644 index 000000000..23c6a0b3d --- /dev/null +++ b/src/data/roadmaps/rust/content/domain-specific-languages-dsls@Kb7KF7JCMaWFz-GuaQmQV.md @@ -0,0 +1,7 @@ +# Domain-Specific Languages (DSLs) in Rust + +DSLs are specialized programming languages for specific domains. Rust macros enable creating DSLs by manipulating syntax trees and defining custom syntax patterns. This allows extending Rust's language capabilities for specialized applications like game development, configuration, or domain-specific tasks. + +Visit the following resources to learn more: + +- [@article@Rust by Example: Domain Specific Languages (DSLs)](https://doc.rust-lang.org/rust-by-example/macros/dsl.html) diff --git a/src/data/roadmaps/rust/content/embedded-and-systems@RKXljexmLAceMYwg4D_uP.md b/src/data/roadmaps/rust/content/embedded-and-systems@RKXljexmLAceMYwg4D_uP.md new file mode 100644 index 000000000..410442ff8 --- /dev/null +++ b/src/data/roadmaps/rust/content/embedded-and-systems@RKXljexmLAceMYwg4D_uP.md @@ -0,0 +1,3 @@ +# Embedded and Systems + +Rust excels in embedded systems programming for microcontrollers and real-time applications. Its zero-cost abstractions, memory safety, and low-level control make it ideal for resource-constrained environments. Popular for IoT devices, firmware, and system-level programming without garbage collection overhead. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/embedded/embedded-hal.md b/src/data/roadmaps/rust/content/embedded-hal@LzaO2cpDajXERqEYDjMl_.md similarity index 100% rename from src/data/roadmaps/rust/content/embedded/embedded-hal.md rename to src/data/roadmaps/rust/content/embedded-hal@LzaO2cpDajXERqEYDjMl_.md diff --git a/src/data/roadmaps/rust/content/embedded/index.md b/src/data/roadmaps/rust/content/embedded/index.md deleted file mode 100644 index c6023626a..000000000 --- a/src/data/roadmaps/rust/content/embedded/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Embedded and Systems - -"Embedded" in the world of Rust programming refers to the use of Rust in embedded systems. These are computer systems with a dedicated function within a larger mechanical or electrical system, often with real-time computational constraints. They are used in a wide range of applications from appliances to vehicles to vending machines and all sorts of industrial applications. Rust's zero-cost abstractions, high-level ergonomics, and low-level control make it an excellent language to use for embedded systems. By using Rust, developers can write extremely low-level code, such as operating system kernels or microcontroller applications. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/constructs/enums.md b/src/data/roadmaps/rust/content/enums@FswpjWqqt8-BzUTsDDjel.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/constructs/enums.md rename to src/data/roadmaps/rust/content/enums@FswpjWqqt8-BzUTsDDjel.md diff --git a/src/data/roadmaps/rust/content/error-handling/custom-error.md b/src/data/roadmaps/rust/content/error-handling/custom-error.md deleted file mode 100644 index ad42fc3ad..000000000 --- a/src/data/roadmaps/rust/content/error-handling/custom-error.md +++ /dev/null @@ -1,7 +0,0 @@ -# Custom Error Types and Traits - -In Rust, you can define your own types of errors using the `enum` construct. This gives you the ability to specify different types of errors that your code can encounter, and attach additional information to them. To make your custom error type compatible with the rest of Rust's error handling machinery, you need to implement two traits: `std::fmt::Debug` and `std::fmt::Display`. There is also a third trait, `std::error::Error`, which can provide backtraces and the ability to have chained errors or causes. Furthermore, the `thiserror` library provides a convenient way to define custom error types with a simple annotation. - -Visit the following resources to learn more: - -- [@article@Rust by Example: Defining an error type](https://doc.rust-lang.org/rust-by-example/error/multiple_error_types/define_error_type.html) diff --git a/src/data/roadmaps/rust/content/error-handling/option.md b/src/data/roadmaps/rust/content/error-handling/option.md deleted file mode 100644 index a75fab0ef..000000000 --- a/src/data/roadmaps/rust/content/error-handling/option.md +++ /dev/null @@ -1,8 +0,0 @@ -# Option & Result Enumerations - -`Option` is an enumeration, also known as an `enum`, in Rust with two variants: `Some(T)` and `None`. It is a flexible and safe alternative to using `null` values or exceptions for indicating that a value might not be present. If a function may not return a value for all possible input, it should return an `Option` value. `Some(T)` variant contains the valid value of type `T` and `None` variant indicates the absence of a value. You can perform various operations on `Option` values, such as method chaining and pattern matching, to effectively handle both states (value present or absent). The `Option` enum encourages you to consciously deal with the possibility of missing values and helps prevent unforeseen runtime errors. - -Visit the following resources to learn more: - -- [@article@Rust by Example: Option & unwrap](https://doc.rust-lang.org/rust-by-example/error/option_unwrap.html) -- [@article@Rust by Example: Result](https://doc.rust-lang.org/rust-by-example/error/result.html) diff --git a/src/data/roadmaps/rust/content/error-handling/propagating.md b/src/data/roadmaps/rust/content/error-handling/propagating.md deleted file mode 100644 index 1cf2bb0eb..000000000 --- a/src/data/roadmaps/rust/content/error-handling/propagating.md +++ /dev/null @@ -1,7 +0,0 @@ -# Propagating Errors and `?` Operator - -Propagating errors in Rust is about passing the error information from the function that failed to the function that called it. Using the `?` operator is one way to achieve this. This operator can only be used in functions that return `Result` or `Option` or another type that implements `std::ops::Try`. If the value of the `Result` is `Ok`, the value inside the `Ok` will get returned. If the value is `Err`, the `Err` will be returned from the whole function. Consequently, the error gets propagated to the calling function. - -Visit the following resources to learn more: - -- [@article@Rust Book: Recoverable Errors with Result](https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html) diff --git a/src/data/roadmaps/rust/content/error-handling/index.md b/src/data/roadmaps/rust/content/error-handling@X2gB0m-ZKSC4TJyIcwsMx.md similarity index 100% rename from src/data/roadmaps/rust/content/error-handling/index.md rename to src/data/roadmaps/rust/content/error-handling@X2gB0m-ZKSC4TJyIcwsMx.md diff --git a/src/data/roadmaps/rust/content/explicit-lifetime-annotations@R5HIVS-lyCp9b46aXqx2m.md b/src/data/roadmaps/rust/content/explicit-lifetime-annotations@R5HIVS-lyCp9b46aXqx2m.md new file mode 100644 index 000000000..456bfbfdc --- /dev/null +++ b/src/data/roadmaps/rust/content/explicit-lifetime-annotations@R5HIVS-lyCp9b46aXqx2m.md @@ -0,0 +1,3 @@ +# Explicit Lifetime Annotations + +Explicit lifetime annotations use syntax like `'a` to specify relationships between reference lifetimes in function signatures. Required when the compiler can't infer lifetimes automatically. Example: `fn longest<'a>(x: &'a str, y: &'a str) -> &'a str` ensures all references live equally long. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/file-parsing/index.md b/src/data/roadmaps/rust/content/file-parsing/index.md deleted file mode 100644 index a7becfeee..000000000 --- a/src/data/roadmaps/rust/content/file-parsing/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# File Parsing - -Rust can be used to parse files for the purpose of data extraction, reverse engineering and more using libraries such as `nom`, `pdf-rs`, and `html-parser`. In conjunction with networking libraries like `http`, file parsing libraries can be used to make efficient, powerful web scrapers, while libraries like `pdf-rs` can be used to analyze large quantities of files in bulk for data extraction, classification and machine learning. diff --git a/src/data/roadmaps/rust/content/file-parsing/pdf-rs.md b/src/data/roadmaps/rust/content/file-parsing/pdf-rs.md deleted file mode 100644 index 6bb07d7f6..000000000 --- a/src/data/roadmaps/rust/content/file-parsing/pdf-rs.md +++ /dev/null @@ -1,8 +0,0 @@ -# pdf-rs - -pdf-rs is a crate that allows the developer to parse and manipulate data and metadata such as embedded text and images from PDF files using Rust. You can learn more about pdf-rs from the official documentation. - -Learn more from the following resources: - -- [@official@PDF Documentation](https://docs.rs/pdf/latest/pdf/) -- [@opensource@pdf-rs](https://github.com/pdf-rs/pdf) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/floats.md b/src/data/roadmaps/rust/content/floats@rNHHp1GgmRnKIYlZayi59.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/data-structures/floats.md rename to src/data/roadmaps/rust/content/floats@rNHHp1GgmRnKIYlZayi59.md diff --git a/src/data/roadmaps/rust/content/language-basics/syntax/functions.md b/src/data/roadmaps/rust/content/functions-and-method-syntax@5hKJaMKpeFEUi3S1Hpiyk.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/syntax/functions.md rename to src/data/roadmaps/rust/content/functions-and-method-syntax@5hKJaMKpeFEUi3S1Hpiyk.md diff --git a/src/data/roadmaps/rust/content/futures-and-asyncawait-paradigm@kVfBbsOHoixvqb4dYTG3Q.md b/src/data/roadmaps/rust/content/futures-and-asyncawait-paradigm@kVfBbsOHoixvqb4dYTG3Q.md new file mode 100644 index 000000000..456b66a8d --- /dev/null +++ b/src/data/roadmaps/rust/content/futures-and-asyncawait-paradigm@kVfBbsOHoixvqb4dYTG3Q.md @@ -0,0 +1,3 @@ +# Futures and Async/Await Paradigm + +Futures represent asynchronous computations that produce values or errors eventually. The `async/await` syntax provides ergonomic programming over futures, allowing asynchronous code to look synchronous. Futures are lazy and must be polled to make progress, forming the foundation of Rust's async ecosystem. diff --git a/src/data/roadmaps/rust/content/game-dev/fyrox.md b/src/data/roadmaps/rust/content/fyrox@x9bmK_cLYpX0ebwjZUn4R.md similarity index 100% rename from src/data/roadmaps/rust/content/game-dev/fyrox.md rename to src/data/roadmaps/rust/content/fyrox@x9bmK_cLYpX0ebwjZUn4R.md diff --git a/src/data/roadmaps/rust/content/game-dev/bevy.md b/src/data/roadmaps/rust/content/game-dev/bevy.md deleted file mode 100644 index 8cd53122f..000000000 --- a/src/data/roadmaps/rust/content/game-dev/bevy.md +++ /dev/null @@ -1,3 +0,0 @@ -# bevy - -Bevy is a simple, data-driven game engine built in Rust. It emphasizes high performance with its ECS (Entity Component System) architecture and provides the tools needed to build immersive interactive real-time systems. With modern design principles, Bevy enables developers to create rich interactive systems without complex boilerplate. In addition, Bevy provides flexibility with its modular and extensible structure capable of supporting a wide range of different types of games and multimedia applications. It also allows users to build both 2D and 3D games with support for custom shaders and materials. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/game-dev/index.md b/src/data/roadmaps/rust/content/game-dev/index.md deleted file mode 100644 index e02cc3640..000000000 --- a/src/data/roadmaps/rust/content/game-dev/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Game Development - -"Game development" is the process of designing, programming, and testing a video game. It involves various disciplines such as game design, which covers gameplay and story, arts and animation to ensure aesthetics and appeal, and programming for game interactions and mechanics. Game development can be approached using different tools and languages, and "Rust" has emerged as a powerful option thanks to its performance and safety aspects. It can be used to create both 2D and 3D games, and there are several libraries and frameworks in Rust meant specifically for game development, such as Amethyst and ggez. The process usually involves a game engine where most of the game contents are processed and a renderer where the game's visual representation is produced. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/game-development@uG-EmZVZ-jc3mswOT4-7l.md b/src/data/roadmaps/rust/content/game-development@uG-EmZVZ-jc3mswOT4-7l.md new file mode 100644 index 000000000..faf7b5f23 --- /dev/null +++ b/src/data/roadmaps/rust/content/game-development@uG-EmZVZ-jc3mswOT4-7l.md @@ -0,0 +1,3 @@ +# Game Development + +Rust's performance and memory safety make it excellent for game development. Popular engines and frameworks include Bevy (ECS-based), Macroquad, ggez, and Fyrox. Rust handles both 2D and 3D games efficiently, with growing ecosystem support for graphics, audio, and physics. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/generics--type-level-programming@_hxwo_iAdOwlWBltv7i6i.md b/src/data/roadmaps/rust/content/generics--type-level-programming@_hxwo_iAdOwlWBltv7i6i.md new file mode 100644 index 000000000..eb591298f --- /dev/null +++ b/src/data/roadmaps/rust/content/generics--type-level-programming@_hxwo_iAdOwlWBltv7i6i.md @@ -0,0 +1,8 @@ +# Advanced Generics and Type-level Programming + +Advanced generics in Rust include `where` clauses for complex bounds, `?Sized` for unsized types, associated types, and higher-kinded types. These enable sophisticated type-level programming, allowing precise control over generic constraints and enabling powerful abstractions while maintaining zero-cost performance. + +Visit the following resources to learn more: + +- [@article@Book: Generics](https://doc.rust-lang.org/book/ch10-01-syntax.html) +- [@article@Rust by Example: Generics](https://doc.rust-lang.org/rust-by-example/generics.html) diff --git a/src/data/roadmaps/rust/content/game-dev/ggez.md b/src/data/roadmaps/rust/content/ggez@qquYnrrzUlyd8738jzj1D.md similarity index 100% rename from src/data/roadmaps/rust/content/game-dev/ggez.md rename to src/data/roadmaps/rust/content/ggez@qquYnrrzUlyd8738jzj1D.md diff --git a/src/data/roadmaps/rust/content/gui-dev/gtk-rs.md b/src/data/roadmaps/rust/content/gtk-rs@2Zp3m3Y7j6R1hK3DIVdkH.md similarity index 100% rename from src/data/roadmaps/rust/content/gui-dev/gtk-rs.md rename to src/data/roadmaps/rust/content/gtk-rs@2Zp3m3Y7j6R1hK3DIVdkH.md diff --git a/src/data/roadmaps/rust/content/gui-dev/index.md b/src/data/roadmaps/rust/content/gui-dev/index.md deleted file mode 100644 index 150e17538..000000000 --- a/src/data/roadmaps/rust/content/gui-dev/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# GUI Development - -"GUI Dev" or Graphical User Interface Development is a significant aspect of software development which focuses on creating visually engaging and intuitive user interfaces. It includes designing the layout, look, and feel of an application through elements such as buttons, icons, images, input fields, and other widgets. In Rust, GUI Development can be done using numerous libraries like 'conrod', 'druid', or 'iced'. Each of these libraries contains unique ways to deal with user input, event handling, and drawing graphics. Ultimately, good GUI design can lead to an improved user experience by making software easy and enjoyable to interact with. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/gui-dev/tauri.md b/src/data/roadmaps/rust/content/gui-dev/tauri.md deleted file mode 100644 index b8e6f1b75..000000000 --- a/src/data/roadmaps/rust/content/gui-dev/tauri.md +++ /dev/null @@ -1,7 +0,0 @@ -# tauri - -`Tauri` is an open-source framework for building lightweight, secure, and cross-platform desktop applications using web technologies. It allows developers to create native apps with HTML, CSS, and JavaScript while leveraging Rust for the backend and core functionality. Tauri offers smaller bundle sizes compared to Electron, enhanced security features, and deep system integration. It supports Windows, macOS, and Linux, and provides a unified API for accessing native features across different operating systems. Tauri's architecture allows for custom compile-time optimizations and the use of any front-end framework, making it a flexible and efficient choice for desktop app development. - -Learn more from the following resources: - -- [@official@Tauri Website](https://tauri.app) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/gui-development@T1LlJz5m5wnwBvKAEuGnP.md b/src/data/roadmaps/rust/content/gui-development@T1LlJz5m5wnwBvKAEuGnP.md new file mode 100644 index 000000000..63839b7b9 --- /dev/null +++ b/src/data/roadmaps/rust/content/gui-development@T1LlJz5m5wnwBvKAEuGnP.md @@ -0,0 +1,3 @@ +# GUI Development + +Rust offers several GUI frameworks for desktop applications including Tauri (web-based), Iced (inspired by Elm), Druid, GTK-rs, and Egui. These provide cross-platform support for creating native desktop applications with modern UI patterns and performance benefits of Rust. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/hashmap@JAgjrf5WDXiorZ6gFRzTc.md b/src/data/roadmaps/rust/content/hashmap@JAgjrf5WDXiorZ6gFRzTc.md new file mode 100644 index 000000000..1a4899621 --- /dev/null +++ b/src/data/roadmaps/rust/content/hashmap@JAgjrf5WDXiorZ6gFRzTc.md @@ -0,0 +1,10 @@ +# Hashmap + +`HashMap` stores key-value pairs using hashing for fast lookups, insertions, and removals. Keys must be unique; duplicate keys replace old values. Rust uses cryptographically strong hashing for security. Items are unordered. Example: `HashMap::new()` or `HashMap::from([("key", "value")])`. + +Learn more from the following links: + +- [@official@HashMap in std::collections - Rust](https://doc.rust-lang.org/std/collections/struct.HashMap.html) +- [@official@Storing Keys With Associated Values In Hash Maps](https://doc.rust-lang.org/book/ch08-03-hash-maps.html?highlight=hashmap#storing-keys-with-associated-values-in-hash-maps) +- [@article@Hash Table](https://en.wikipedia.org/wiki/Hash_table) +- [@video@HashMaps: key-value stores in Rust](https://www.youtube.com/watch?v=BfmSYuDdg8Q) diff --git a/src/data/roadmaps/rust/content/hashset@b1iYy4Hvkj47Q13V2HE4i.md b/src/data/roadmaps/rust/content/hashset@b1iYy4Hvkj47Q13V2HE4i.md new file mode 100644 index 000000000..6886a6633 --- /dev/null +++ b/src/data/roadmaps/rust/content/hashset@b1iYy4Hvkj47Q13V2HE4i.md @@ -0,0 +1,9 @@ +# Hashset + +`HashSet` is a collection of unique elements using hash-based storage for fast lookups, insertions, and deletions. No duplicates are allowed and elements are unordered. Provides methods like `insert()`, `contains()`, and `remove()`. Example: `let mut set = HashSet::new(); set.insert("value");` + +Learn more from the following links: + +- [@official@HashSet in std::collections - Rust](https://doc.rust-lang.org/std/collections/struct.HashSet.html) +- [@article@Hashset](https://doc.rust-lang.org/rust-by-example/std/hash/hashset.html) +- [@video@Rust HashSet Collection Type](https://www.youtube.com/watch?v=KYw3Lnf0nSY&t=1440s) diff --git a/src/data/roadmaps/rust/content/hyper@-MiN5ytI43EjgmWV55BhU.md b/src/data/roadmaps/rust/content/hyper@-MiN5ytI43EjgmWV55BhU.md new file mode 100644 index 000000000..286ba0029 --- /dev/null +++ b/src/data/roadmaps/rust/content/hyper@-MiN5ytI43EjgmWV55BhU.md @@ -0,0 +1,8 @@ +# hyper + +Hyper is a fast, safe HTTP client/server library for Rust built on Tokio for async I/O. It supports HTTP/1 and HTTP/2 with automatic protocol negotiation. Hyper provides low-level HTTP primitives that power many higher-level web frameworks and serves as the foundation for efficient network programming. + +Visit the following resources to learn more: + +- [@official@Official Website](https://hyper.rs/) +- [@article@Docs.rs: Hyper](https://docs.rs/hyper/latest/hyper/) diff --git a/src/data/roadmaps/rust/content/introduction/ides-and-rust.md b/src/data/roadmaps/rust/content/ides-and-rust-toolchains@oyP1ZyOgDC4nYEQXHwdVQ.md similarity index 100% rename from src/data/roadmaps/rust/content/introduction/ides-and-rust.md rename to src/data/roadmaps/rust/content/ides-and-rust-toolchains@oyP1ZyOgDC4nYEQXHwdVQ.md diff --git a/src/data/roadmaps/rust/content/language-basics/constructs/impl-blocks.md b/src/data/roadmaps/rust/content/impl-blocks@HzWHDQZjA9OgVZEWrmhKf.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/constructs/impl-blocks.md rename to src/data/roadmaps/rust/content/impl-blocks@HzWHDQZjA9OgVZEWrmhKf.md diff --git a/src/data/roadmaps/rust/content/index.md b/src/data/roadmaps/rust/content/index.md deleted file mode 100644 index 8ea65aca5..000000000 --- a/src/data/roadmaps/rust/content/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Rust Developer Roadmap - -Rust is a systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety. This roadmap covers the essential skills and concepts needed to become proficient in Rust development, from basic syntax to advanced topics like async programming, web development, and embedded systems. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/introduction/installing-rust.md b/src/data/roadmaps/rust/content/installing-rust-and-cargo@-IqA02ObYvXPW1ot6t_b9.md similarity index 100% rename from src/data/roadmaps/rust/content/introduction/installing-rust.md rename to src/data/roadmaps/rust/content/installing-rust-and-cargo@-IqA02ObYvXPW1ot6t_b9.md diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/integers.md b/src/data/roadmaps/rust/content/integers@FHZSxSiOZYNBEz6tu8wuF.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/data-structures/integers.md rename to src/data/roadmaps/rust/content/integers@FHZSxSiOZYNBEz6tu8wuF.md diff --git a/src/data/roadmaps/rust/content/introduction/memory-safety.md b/src/data/roadmaps/rust/content/introduction/memory-safety.md deleted file mode 100644 index 93e6586fd..000000000 --- a/src/data/roadmaps/rust/content/introduction/memory-safety.md +++ /dev/null @@ -1,11 +0,0 @@ -# Memory Safety and Zero-Cost Abstractions - -Rust is a system programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety. It is graced with the feature of "memory safety without garbage collection," an attribute that makes Rust one of a kind. "Memory safety" is ensuring that software is not causing any memory leaks or dangling pointers while accessing the system's memory. In Rust, memory safety is accomplished through a system called ownership, with a set of rules that the compiler checks at compile time. This ownership system eliminates the need for garbage collection or manual memory management, thus ensuring swift execution of software and a safer memory environment. Rust's memory management features even support concurrent programming, providing options for shared and mutable state access that ensure thread safety while reducing the risk of thread unsafety. - - - -Zero-cost abstraction is another key concept Rust implements. In general, abstractions in programming languages allow code to be written at a high level (like in Python), while being able to run at a low level (like in C). However, these abstractions often come with a runtime cost. In contrast, Rust aims to provide many useful abstractions, such as iterators and closures, that don't sacrifice runtime performance. This means you can write high-level code in Rust, and the Rust compiler will optimize it to run as fast as manually written low-level code. - -Learn more from the following resources: - -- [@video@This Is How Rust Stops Memory Leaks](https://www.youtube.com/watch?v=DJdUjjOmyx8) diff --git a/src/data/roadmaps/rust/content/introduction/index.md b/src/data/roadmaps/rust/content/introduction@4U-HZQGH7kaWCB94Xy8Mh.md similarity index 100% rename from src/data/roadmaps/rust/content/introduction/index.md rename to src/data/roadmaps/rust/content/introduction@4U-HZQGH7kaWCB94Xy8Mh.md diff --git a/src/data/roadmaps/rust/content/serialization/json-rust.md b/src/data/roadmaps/rust/content/json-rust@ZXMKY0f7mqqlsvyH9u-LM.md similarity index 100% rename from src/data/roadmaps/rust/content/serialization/json-rust.md rename to src/data/roadmaps/rust/content/json-rust@ZXMKY0f7mqqlsvyH9u-LM.md diff --git a/src/data/roadmaps/rust/content/language-basics/constructs/index.md b/src/data/roadmaps/rust/content/language-basics/constructs/index.md deleted file mode 100644 index b950d7949..000000000 --- a/src/data/roadmaps/rust/content/language-basics/constructs/index.md +++ /dev/null @@ -1,10 +0,0 @@ -# Constructs - -In Rust, "constructs" refer to different elements used to build the structure of the program. Constructs includes variables, functions, data types, control flow statements, and more. - -- **Variables** store data, and their immutable or mutable status is determined at their declaration with `let` and `let mut`, respectively. -- **Functions** are reusable blocks of code defined by the `fn` keyword. -- **Data types** in Rust are static and must be declared upfront. These include simple _primitive_ types, like integers, booleans (`bool`), and floats, as well as _complex_ types like arrays, tuples, all the custom types you declare yourself, and many more types you might use from Rust's standard library or community crates you download. -- **Control flow** structures help direct the flow of code execution. These include `if`, `else`, `loop`, `while`, and `for` blocks, to name a few. Exception handling in Rust leverages the `Result` and `Option` enums alongside the `match` construct's ability to perform concise pattern matching. - -As a Rust programmer, you'll utilize many of the language's constructs like the ones above. These pieces come together at your fingertips to structure your program in a safe and efficient manner. diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/arc.md b/src/data/roadmaps/rust/content/language-basics/data-structures/arc.md deleted file mode 100644 index bd1a9d964..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/arc.md +++ /dev/null @@ -1,7 +0,0 @@ -# Arc - -`Arc` in Rust stands for "Atomic Reference Counting". It is a thread-safe reference-counting type used for sharing immutable data between multiple parts of the system. With `Arc`, we can have multiple references to the same data which is useful for concurrent programming. When the last reference to a type is gone, the `Arc` will clean up the underlying data. Unlike `Rc` (Reference Counting), which is single-threaded, `Arc` uses atomic operations for incrementing and decrementing the reference count hence making it safe to share across threads. - -Learn more from the following links: - -- [@article@Arc](https://doc.rust-lang.org/rust-by-example/std/arc.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/array.md b/src/data/roadmaps/rust/content/language-basics/data-structures/array.md deleted file mode 100644 index 4a1617b2c..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/array.md +++ /dev/null @@ -1,10 +0,0 @@ -# Array - -In Rust, an `array` is a collection of elements of the same type, organized consecutively in memory. Unlike some other data structures in Rust, the size of an array must be known at compile time. This gives it a distinct advantage in memory efficiency. The size of the array cannot be changed after it has been declared. The syntax to declare an array in Rust is as follows: `let array_name: [type; size] = [elements];`. Here, `type` represents the data type of the elements, `size` is the number of elements and `elements` are the data held in the array. For example: `let numbers: [i32; 5] = [1, 2, 3, 4, 5];`. Elements in an array can be accessed using their indices, starting from 0. For instance, `numbers[0]` will return the first element `1` in the `numbers` array. - -Learn more from the following links: - -- [@official@Rust - array](https://doc.rust-lang.org/std/primitive.array.html) -- [@article@The Array Type](https://rust-book.cs.brown.edu/ch03-02-data-types.html#the-array-type) -- [@article@Rust Array (With Examples)](https://www.programiz.com/rust/array) -- [@video@Rust Tutorial - Arrays](https://www.youtube.com/watch?v=t047Hseyj_k&t=767s) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/binary-heap.md b/src/data/roadmaps/rust/content/language-basics/data-structures/binary-heap.md deleted file mode 100644 index 27642f4cb..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/binary-heap.md +++ /dev/null @@ -1,7 +0,0 @@ -# BinaryHeap - -A `Binary Heap` is a complete binary tree which is either Min Heap or Max Heap. In a Max Binary Heap, the key at root must be maximum among all other keys present in Binary Heap. The same property must be recursively true for all nodes in Binary Tree. Min Binary Heap is similar to Max Binary Heap. But in a Min Binary Heap, the key at root must be minimum among all other keys present in Binary Heap. This property must be recursively true for all nodes in Binary Tree. Binary Heaps have efficient implementations on arrays. - -Learn more from the following links: - -- [@official@BinaryHeap](https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/boolean.md b/src/data/roadmaps/rust/content/language-basics/data-structures/boolean.md deleted file mode 100644 index 6f5f92192..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/boolean.md +++ /dev/null @@ -1,9 +0,0 @@ -# Boolean - -`Boolean` in Rust is a primitive data type that encapsulates the truth value. It is represented by `bool` keyword and can hold two values either `true` or `false`. If you cast a bool into an integer, `true` will be `1` and `false` will be `0`. Operations like logical `AND (&&)`, logical `OR (||)`, and logical `NOT (!)` can be performed on these types of values. Boolean is primarily used in conditional statements like `if`, `while` etc. For example, `let is_raining: bool = true;` where `is_raining` is a boolean variable holding the value `true`. - -Learn more from the following links: - -- [@video@Rust Tutorial - Booleans](https://www.youtube.com/watch?v=t047Hseyj_k&t=388s) -- [@article@The Boolean Type](https://rust-book.cs.brown.edu/ch03-02-data-types.html#the-boolean-type) -- [@official@bool - Rust](https://doc.rust-lang.org/std/primitive.bool.html) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/btree-map.md b/src/data/roadmaps/rust/content/language-basics/data-structures/btree-map.md deleted file mode 100644 index 84cf72e9b..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/btree-map.md +++ /dev/null @@ -1,8 +0,0 @@ -# BTreeMap - -In Rust, `BTreeMap` is a generic collection that stores data in a sorted tree structure. More specifically, it uses a self-balancing binary search tree (a type of `B+-tree`). `BTreeMap`s implement the `Map` trait, including methods such as `get`, `insert`, `remove`, and many others. The data stored in a `BTreeMap` will be sorted by key, which allows efficient lookup, insertions, and removals. The keys of the `BTreeMap` must implement the `Ord` trait, which means they must be orderable. Because `BTreeMap`s store data in a sorted order, the iteration of keys and values will be in sorted order as well. - -Learn more from the following links: - -- [@article@BTreeMap](https://doc.rust-lang.org/std/collections/struct.BTreeMap.html) -- [@article@BTreeMap](https://cglab.ca/~abeinges/blah/rust-btree-case/) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/btree-set.md b/src/data/roadmaps/rust/content/language-basics/data-structures/btree-set.md deleted file mode 100644 index 904986162..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/btree-set.md +++ /dev/null @@ -1,7 +0,0 @@ -# BTreeSet - -`BTreeSet` in Rust is a data structure that implements a set backed by a BTree. Its functionality is similar to that of other set data structures in that it maintains a collection of unique elements and allows for operations like insertion, removal, and querying. But the elements in a `BTreeSet` are sorted according to an ordering relation, which may be customized by the user. The sorting enables efficient range queries as well as other operations such as finding the minimum or maximum element. - -Learn more from the following links: - -- [@article@Btree Set](https://doc.rust-lang.org/std/collections/struct.BTreeSet.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/channels.md b/src/data/roadmaps/rust/content/language-basics/data-structures/channels.md deleted file mode 100644 index 5c51a4413..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/channels.md +++ /dev/null @@ -1,7 +0,0 @@ -# Channels - -Channels in Rust allow communication between threads. They are a programming paradigm that is part of the message passing concurrency model. Channels are used to send and receive values between threads, ensuring thread safety by avoiding shared state. Rust channels have two parts - `Sender` and `Receiver`. `Sender` is used for sending data, and `Receiver` is used to read the data. This model follows the 'multiple producer, single consumer' rule, meaning it can have multiple sending ends but only one receiving end. Channels in Rust are provided by the `std::sync::mpsc` module, where mpsc stands for Multiple Producer, Single Consumer. - -Learn more from the following links: - -- [@article@Channels](https://doc.rust-lang.org/rust-by-example/std_misc/channels.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/hashmap.md b/src/data/roadmaps/rust/content/language-basics/data-structures/hashmap.md deleted file mode 100644 index 83e2175d1..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/hashmap.md +++ /dev/null @@ -1,10 +0,0 @@ -# Hashmap - -The `HashMap` in Rust is part of the standard library's collections framework and it's a generic collection of key-value pairs. It allows for the quick lookup, insertion, and removal of items using hashing. A `HashMap` holds a mapping of keys of type `K` to values of type `V`. The keys are unique and when a key gets inserted for the second time with a different value, the new value replaces the old value. Rust's `HashMap` uses a cryptographically strong hashing algorithm which can help avoid denial-of-service (DoS) attacks. It is however not ordered, so items may not be in the same order as they were inserted. - -Learn more from the following links: - -- [@official@HashMap in std::collections - Rust](https://doc.rust-lang.org/std/collections/struct.HashMap.html) -- [@official@Storing Keys With Associated Values In Hash Maps](https://doc.rust-lang.org/book/ch08-03-hash-maps.html?highlight=hashmap#storing-keys-with-associated-values-in-hash-maps) -- [@article@Hash Table](https://en.wikipedia.org/wiki/Hash_table) -- [@video@HashMaps: key-value stores in Rust](https://www.youtube.com/watch?v=BfmSYuDdg8Q) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/hashset.md b/src/data/roadmaps/rust/content/language-basics/data-structures/hashset.md deleted file mode 100644 index 1f6517e44..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/hashset.md +++ /dev/null @@ -1,9 +0,0 @@ -# Hashset - -`HashSet` in Rust is a collection of unique elements. It's a data structure which stores details in the form of key and value, and it uses `hashing` to store elements. It's implemented as a `hash table`, as it makes use of a hasher to make the structure more secure against collision attacks. A `HashSet` only contains keys, associating the value portion of the map with a dummy unit. The value of `HashSet` returns an iterator over the elements of the set and these elements are arbitrary and not in any specific order. - -Learn more from the following links: - -- [@official@HashSet in std::collections - Rust](https://doc.rust-lang.org/std/collections/struct.HashSet.html) -- [@article@Hashset](https://doc.rust-lang.org/rust-by-example/std/hash/hashset.html) -- [@video@Rust HashSet Collection Type](https://www.youtube.com/watch?v=KYw3Lnf0nSY&t=1440s) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/index.md b/src/data/roadmaps/rust/content/language-basics/data-structures/index.md deleted file mode 100644 index 43b10b4f8..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Data Structures - -In Rust, there are different types of data structures for organizing and storing data. Some of the primary types include: - -- **Structures (structs)**: These are custom data types that allow you to combine multiple related values of different types. Structs implement methods and can also maintain private fields. Structs come in three types: classic C-style structs, tuple structs, and unit structs. -- **Tuples**: These are a sequence of fixed-size elements of possibly differing types. The elements of a tuple can be accessed using dot notation followed by the index starting from 0. -- **Enums (enumerations)**: These are data structures that allow you to define a type by enumerating its possible variants. Enum variants can be simple values or complex ones with fields. -- **Arrays** and **Vectors**: These are collections of items with the same type. An array is fixed-sized, while a vector can grow or shrink its size. Arrays and vectors store elements in contiguous memory locations. -- **Hash Maps**: A Hash Map keeps track of elements in key-value pairs, similar to a dictionary or a JavaScript object. They are great for quick lookups. - -The Rust language also provides powerful reference and borrowing mechanism to control memory, data read/write access, and mutation to avoid problems like data races in concurrent scenarios. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/linked-list.md b/src/data/roadmaps/rust/content/language-basics/data-structures/linked-list.md deleted file mode 100644 index 124930269..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/linked-list.md +++ /dev/null @@ -1,8 +0,0 @@ -# LinkedList - -The **Linked List** in Rust is a sequence of nodes where each node consists of a value and a pointer/reference to the next node in the sequence. Linked Lists are primarily used for implementing higher level data structures such as stacks, queues and associative arrays. Rust's `std::collections` provides a `LinkedList` struct that is a doubly-linked list with O(1) insertion and removal at both the front and back, but with O(n) indexing. - -Learn more from the following links: - -- [@official@LinkedList in std::collections - Rust](https://doc.rust-lang.org/std/collections/struct.LinkedList.html) -- [@opensource@Too Many Linked Lists](https://rust-unofficial.github.io/too-many-lists/) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/mutex.md b/src/data/roadmaps/rust/content/language-basics/data-structures/mutex.md deleted file mode 100644 index 7d17b8841..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/mutex.md +++ /dev/null @@ -1,7 +0,0 @@ -# Mutex - -`Mutex` or "Mutual Exclusion" in Rust is a concurrency primitive that is used to protect shared data from being concurrently accessed by multiple threads. When one thread starts using a `Mutex`, other threads have to wait until the Mutex is unlocked. When a thread has finished handling the shared data, it should unlock the `Mutex` to allow other threads to access the shared data. If not properly handled, it could lead to a software deadlock or other timing-related issues. Rust's Mutex has a built-in safeguard against these problems – if a thread that is holding a Mutex crashes, Rust will automatically unlock the Mutex. - -Learn more from the following links: - -- [@article@Mutex](https://doc.rust-lang.org/std/sync/struct.Mutex.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/queue.md b/src/data/roadmaps/rust/content/language-basics/data-structures/queue.md deleted file mode 100644 index 8516cfbd9..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/queue.md +++ /dev/null @@ -1,7 +0,0 @@ -# Queue - -In Rust, a Queue is another important linear data structure which follows a particular order in which the operations are performed. The order given to the elements follows the FIFO (First In First Out) approach. There are no direct standard library data structures meant solely to act as a Queue in Rust, but we can obtain queue-like behaviors using other provided data structures. More commonly, the VecDeque structure is used as a Queue. It supports constant time element insertion and removal at both ends. The 'push_back' and 'pop_front' functions essentially form a Queue structure. - -Learn more from the following links: - -- [@official@Queues](https://docs.rs/queues/latest/queues/) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/rc.md b/src/data/roadmaps/rust/content/language-basics/data-structures/rc.md deleted file mode 100644 index 2b3559da3..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/rc.md +++ /dev/null @@ -1,7 +0,0 @@ -# Rc - -`Rc` stands for Reference Counting, a data type in Rust that allows multiple owners for the same data on the heap while keeping track of the number of references to that data. If there are zero references to data, the value can be cleaned up without any references becoming invalid. Avoiding these problems comes at the cost of some memory overhead, because `Rc` keeps track of the total number of references which means it needs to allocate memory to keep the count. - -Learn more from the following links: - -- [@article@rct - The Reference Counted Smart Pointer](https://doc.rust-lang.org/book/ch15-04-rc.html#rct-the-reference-counted-smart-pointer) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/rwlock.md b/src/data/roadmaps/rust/content/language-basics/data-structures/rwlock.md deleted file mode 100644 index a80d85857..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/rwlock.md +++ /dev/null @@ -1,7 +0,0 @@ -# RwLock - -`RwLock` in Rust stands for Read/Write lock, which is a type of synchronization primitive. It is an advanced version of the Mutex data structure. Unlike Mutex, which only allows one thread to access the data, `RwLock` allows multiple threads to read data at the same time but only one thread to write. If a thread is writing, no other thread can read or write. The syntax for declaring `RwLock` is `let lock = RwLock::new(value)`. Please remember that a potential downside of `RwLock` is lock contention, making sure to properly manage read-write access. The appropriate use of `RwLock` can enable better performance for workloads that involve heavy reading. - -Learn more from the following links: - -- [@article@RwLock](https://doc.rust-lang.org/std/sync/struct.RwLock.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/stack.md b/src/data/roadmaps/rust/content/language-basics/data-structures/stack.md deleted file mode 100644 index 5690a0776..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/stack.md +++ /dev/null @@ -1,7 +0,0 @@ -# Stack - -The **Stack** is a fundamental data structure in Rust, which is based on the principle of Last-In-First-Out (LIFO). In other words, elements that are added last are the first ones to be removed. This is functionally similar to a real-world stack, such as a stack of plates. One key aspect of stacks in Rust is that they are bounded to a certain size at compile-time. This implies that stack size does not grow or shrink dynamically. In Rust, function calls are operated using stack with each call pushing a new stack frame to the end, and each return statement popping one off. Stack Overflow occurs when too much of the stack is used. - -Learn more from the following links: - -- [@official@Box, Stack and Heap](https://doc.rust-lang.org/rust-by-example/std/box.html) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/string.md b/src/data/roadmaps/rust/content/language-basics/data-structures/string.md deleted file mode 100644 index ed7a54936..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/string.md +++ /dev/null @@ -1,11 +0,0 @@ -# String - -In Rust, `String` is a growable, mutable, owned, UTF-8 encoded string type. When Rustaceans refer to 'strings' in Rust, they usually mean the `String` and the string slice `str` types, not just one of those types. Both types are UTF-8 encoded. A `String` in Rust is similar to a string in other languages, but is not null-terminated at the end. Creation of a `String` can be done from a literal string with `String::from("Hello, world!")` or by converting a string slice with `"Hello, world!".to_string()`. String concatenations and manipulations are achieved via a multitude of methods such as `push_str()`, `push()`, `+` operator, `format!()` macro, etc. - -Learn more from the following links: - -- [@official@String in std::string - Rust](https://doc.rust-lang.org/std/string/struct.String.html) -- [@official@str - Rust](https://doc.rust-lang.org/std/primitive.str.html) -- [@official@What Is a String?](https://doc.rust-lang.org/book/ch08-02-strings.html?highlight=String#what-is-a-string) -- [@article@Rust String (With Examples)](https://www.programiz.com/rust/string) -- [@video@All Rust string types explained](https://www.youtube.com/watch?v=CpvzeyzgQdw&pp=ygUOc3RyaW5nIGluIHJ1c3Q%3D) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/tuple.md b/src/data/roadmaps/rust/content/language-basics/data-structures/tuple.md deleted file mode 100644 index 0dfa2fb51..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/tuple.md +++ /dev/null @@ -1,9 +0,0 @@ -# Tuple - -In Rust, a **Tuple** is a type of data structure that holds a finite number of elements, each having potentially different types. Elements in a tuple are accessed using a dot (`.`) followed by the index of the value we want to get. For example, to declare a tuple that includes a `32-bit integer`, a `single-byte unsigned integer`, and a `floating point number`, we would write `let my_tuple: (i32, u8, f64) = (500, 2, 20.5);` The index of elements in a tuple start from `0`. So, to access the first element, use `my_tuple.0`, the second element `my_tuple.1`, and so on. Tuples can also be used for multiple declarations and assignments. Tuples are particularly useful when you want to group together items of different types. - -Learn more from the following links: - -- [@official@Tuple - Rust](https://doc.rust-lang.org/std/primitive.tuple.html) -- [@article@The Tuple Type](https://rust-book.cs.brown.edu/ch03-02-data-types.html#the-tuple-type) -- [@video@Rust Tutorial - Tuples](https://www.youtube.com/watch?v=t047Hseyj_k&t=506s) diff --git a/src/data/roadmaps/rust/content/language-basics/data-structures/vector.md b/src/data/roadmaps/rust/content/language-basics/data-structures/vector.md deleted file mode 100644 index c1ce612a4..000000000 --- a/src/data/roadmaps/rust/content/language-basics/data-structures/vector.md +++ /dev/null @@ -1,11 +0,0 @@ -# Vector - -A `Vector` in Rust, often referred to as `Vec`, is a growable, or dynamically-sized, array-like data structure that can store homogeneous types. It stores elements of the same type in a contiguous block of memory, with the count of elements and capacity managed automatically by Rust. Unlike arrays, vectors do not need to have a predetermined size at compile time and their size can be increased or decreased at runtime. The `Vec` holds its data on the heap. It maintains a pointer to the data, a length, and a capacity. The length is the number of elements currently stored in the vector, while the capacity is the total allocation in the memory. The key methods for a `Vec` include `push()`, `pop()`, and `len()`, among others. - -Learn more from the following links: - -- [@official@Vec in std::vec - Rust](https://doc.rust-lang.org/std/vec/struct.Vec.html) -- [@article@Storing Lists of Values with Vectors](https://doc.rust-lang.org/book/ch08-01-vectors.html?highlight=vector#storing-lists-of-values-with-vectors) -- [@article@Rust Vector (With Examples)](https://www.programiz.com/rust/vector) -- [@video@Rust: Vectors](https://www.youtube.com/watch?v=nOKOFYzvvHo&t=97s&pp=ygUMcnVzdCB2ZWN0b3Jz) -- [@video@Common Collections in Rust](https://www.youtube.com/watch?v=Zs-pS-egQSs&t=39s&pp=ygUMcnVzdCB2ZWN0b3Jz) diff --git a/src/data/roadmaps/rust/content/language-basics/ownership/borrowing.md b/src/data/roadmaps/rust/content/language-basics/ownership/borrowing.md deleted file mode 100644 index 2eef90344..000000000 --- a/src/data/roadmaps/rust/content/language-basics/ownership/borrowing.md +++ /dev/null @@ -1,8 +0,0 @@ -# Borrowing, References, and Slices - -In Rust, "borrowing" is a technique which allows you to access the data of a particular value while the owner retains control. There are two types of borrowing: mutable and immutable. Immutable borrowing means an owner can fondly permit several read-only borrows of a value at the same time as long as the value doesn't change. On the other hand, mutable borrowing allows only a single borrower at a time who can potentially modify the value. This practice is essential in maintaining the concept of ownership without violating any of its rules and avoiding the problem of dangling references. - -Learn more from the following links: - -- [@article@References and Borrowing](https://rust-book.cs.brown.edu/ch04-02-references-and-borrowing.html) -- [@article@The Slice Type](https://rust-book.cs.brown.edu/ch04-04-slices.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/language-basics/ownership/index.md b/src/data/roadmaps/rust/content/language-basics/ownership/index.md deleted file mode 100644 index bf76f27de..000000000 --- a/src/data/roadmaps/rust/content/language-basics/ownership/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Ownership System - -In Rust, the concept of **ownership** is a key feature that governs how memory management works. Each value in Rust has its own designated "owner," and there can be only one owner for a value at a time. When the owner goes out of scope, whatever value it owns is automatically _dropped_ from memory. The three main facets of ownership include ownership rules, borrowing, and slices. - -- **Ownership rules** play a key role in system performance and prevention of issues, such as null or dangling references. -- **Borrowing** is a mechanism where we allow something to _reference_ a value without taking _ownership_. -- **Slices** are a data type that does _not_ have ownership. Specifically, slices help in making a reference to a portion of a collection data type, like a `String`, `Array`, or `Vec`. diff --git a/src/data/roadmaps/rust/content/language-basics/ownership/rules.md b/src/data/roadmaps/rust/content/language-basics/ownership/rules.md deleted file mode 100644 index 8231d9a62..000000000 --- a/src/data/roadmaps/rust/content/language-basics/ownership/rules.md +++ /dev/null @@ -1,10 +0,0 @@ -# Ownership Rules and Memory Safety - -In Rust, the concept of ownership is described by three main rules. -1. Each value in Rust has a variable that is called its _owner_. -2. There can only ever be _one owner at a time_. This prevents multiple parts of the code from trying to modify the data at once, potentially causing data races and inconsistencies. -3. _When the owner goes out of scope, the value will be dropped_. This ensures that Rust cleans up the allocated memory and other resources once they're no longer required, thereby avoiding memory leaks. - -Learn more from the following links: - -- [@article@What Is Ownership?](https://rust-book.cs.brown.edu/ch04-01-what-is-ownership.html) diff --git a/src/data/roadmaps/rust/content/language-basics/ownership/stack-heap.md b/src/data/roadmaps/rust/content/language-basics/ownership/stack-heap.md deleted file mode 100644 index 69dd5b029..000000000 --- a/src/data/roadmaps/rust/content/language-basics/ownership/stack-heap.md +++ /dev/null @@ -1,13 +0,0 @@ -# Deep Dive: Stack vs Heap - -In most modern computer systems, memory management is split into two main parts: the stack and the heap. - -- The **stack** is a section of memory that grows and shrinks automatically as functions are called and return. For data to be stored on the stack, it must have a known, fixed size at compile time. - -- The **heap** is a section of memory that is used for data that needs to persist for longer than a single function-call. Data with dynamic size is stored on the heap. - -Rust, like many languages, has facilities for using these two types of memory, allowing developers fine-tuned control over memory usage. - -Learn more from the following links: - -- [@article@The Stack and the Heap](https://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/the-stack-and-the-heap.html) diff --git a/src/data/roadmaps/rust/content/language-basics/syntax/index.md b/src/data/roadmaps/rust/content/language-basics/syntax/index.md deleted file mode 100644 index a3c89c19b..000000000 --- a/src/data/roadmaps/rust/content/language-basics/syntax/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Syntax and Semantics - -Rust's syntax aims for readability and reduced visual clutter. Rust also places a great deal of importance on forward compatibility, even when it occasionally hinders feature additions. - -Most syntax in Rust is built around the same basic principles, so understanding a handful of Rust's core concepts allows for a broad understanding of the structure of most Rust programs. Examples of Rust's most widely-used syntactic components are item declarations and pattern matching. In Rust, you typically declare an item once and then refer to it by its name as long as it's in scope. Pattern matching is a fundamental and powerful part of Rust's syntax: it allows you to branch code based on the structure of its data, not just its value or type. - -It takes time to learn all of Rust's paradigms for constructing the most robust and elegant pattern matching (e.g., by implementing your own data types). However, even complex pattern matching can be intuitive to read and concise, which is what makes it so powerful. diff --git a/src/data/roadmaps/rust/content/language-basics/index.md b/src/data/roadmaps/rust/content/language-basics@6E4pGifNfSAq6SbzfzFNT.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/index.md rename to src/data/roadmaps/rust/content/language-basics@6E4pGifNfSAq6SbzfzFNT.md diff --git a/src/data/roadmaps/rust/content/leptos@n5t3MUqmvrcr36VIIOw0u.md b/src/data/roadmaps/rust/content/leptos@n5t3MUqmvrcr36VIIOw0u.md new file mode 100644 index 000000000..b18a7f8f6 --- /dev/null +++ b/src/data/roadmaps/rust/content/leptos@n5t3MUqmvrcr36VIIOw0u.md @@ -0,0 +1 @@ +# Leptos \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/lifetime-elision-rules@qJI8GObmsxyc_tTtUEOAd.md b/src/data/roadmaps/rust/content/lifetime-elision-rules@qJI8GObmsxyc_tTtUEOAd.md new file mode 100644 index 000000000..d08f4cf11 --- /dev/null +++ b/src/data/roadmaps/rust/content/lifetime-elision-rules@qJI8GObmsxyc_tTtUEOAd.md @@ -0,0 +1,3 @@ +# Lifetime Elision Rules + +Lifetime elision allows the compiler to infer lifetimes in common patterns, reducing explicit annotations. Rules: each reference parameter gets its own lifetime, single input lifetime applies to all outputs, methods with `&self` propagate its lifetime to outputs. Simplifies code while maintaining safety. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/lifetimes--borrow-checker@UZ56NKloehcxUFNuSeO19.md b/src/data/roadmaps/rust/content/lifetimes--borrow-checker@UZ56NKloehcxUFNuSeO19.md new file mode 100644 index 000000000..0d632add9 --- /dev/null +++ b/src/data/roadmaps/rust/content/lifetimes--borrow-checker@UZ56NKloehcxUFNuSeO19.md @@ -0,0 +1,3 @@ +# Lifetimes and Borrow Checker + +Lifetimes define how long references remain valid, preventing dangling references and memory safety issues. The borrow checker enforces these rules at compile time. Lifetime annotations use syntax like `'a` to specify relationships between references in function signatures when the compiler can't infer them automatically. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/lifetimes-borrow/covariant.md b/src/data/roadmaps/rust/content/lifetimes-borrow/covariant.md deleted file mode 100644 index 42413ca1f..000000000 --- a/src/data/roadmaps/rust/content/lifetimes-borrow/covariant.md +++ /dev/null @@ -1,3 +0,0 @@ -# Covariant and Contravariant Lifetimes - -In Rust, lifetime, type, and function parameter types can be covariant, invariant, or contravariant. Specifically, covariant describes the relationship between a complex type and a simpler type when the simpler type varies. Covariant occurs when the ordering of types is preserved, i.e., changing a type T to a subtype T' in a complex type C, changes the complex type to a subtype C. In simpler terms, if type B is a subtype of type A, then a collection of B is a subtype of a collection of A, providing the collection type is covariant. This applies to `&T`, `*const T`, `Box`, `[T]`, `[T; n]`, and `T` when they are function return types in Rust. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/lifetimes-borrow/explicit-lifetime.md b/src/data/roadmaps/rust/content/lifetimes-borrow/explicit-lifetime.md deleted file mode 100644 index 8461c462b..000000000 --- a/src/data/roadmaps/rust/content/lifetimes-borrow/explicit-lifetime.md +++ /dev/null @@ -1,3 +0,0 @@ -# Explicit Lifetime Annotations - -In Rust, lifetimes are explicit and are determined at compile time. An `explicit lifetime` is one where lifetimes are annotated in function signatures. Explicit lifetimes are very important in situations where multiple references exist and Rust's compiler cannot make safe and correct assumptions on its own. They're denoted by a tick mark, followed by a lowercase letter. The most common default names for lifetimes are `'a`, `'b`, `'c`, etc. For example, in a function that borrows two strings, and returns a string, explicit lifetimes are used as: `fn longest<'a>(x: &'a str, y: &'a str) -> &'a str`. This allows the compiler to ensure that the references used in your function will remain valid for the entire time they're being used, preventing "dangling references". \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/lifetimes-borrow/index.md b/src/data/roadmaps/rust/content/lifetimes-borrow/index.md deleted file mode 100644 index 4da513227..000000000 --- a/src/data/roadmaps/rust/content/lifetimes-borrow/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Lifetimes and Borrow Checker - -In Rust, the concept of "lifetimes" is associated with borrowed references. A lifetime is a scope for which that reference is valid. The Rust compiler uses lifetimes to ensure those references are always valid. That is, the referenced object will not get destroyed while references to that object exist. When you are explicitly working with lifetimes in Rust, you are usually dealing with functions that accept references. Rust requires you to annotate the lifetimes when a function has one or more arguments of the borrowed reference type. The annotation is done using a set of angle brackets (<>), and inside these brackets, you declare your lifetime parameters, prefixed with an apostrophe ('). The Rust compiler uses these annotations to reason about how those references relate, and whether they are valid or not. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/lifetimes-borrow/lifetime-elision.md b/src/data/roadmaps/rust/content/lifetimes-borrow/lifetime-elision.md deleted file mode 100644 index 0606efcb2..000000000 --- a/src/data/roadmaps/rust/content/lifetimes-borrow/lifetime-elision.md +++ /dev/null @@ -1,3 +0,0 @@ -# Lifetime Elision Rules - -"Lifetime Elision" in Rust is an implicit annotation of lifetimes where the compiler tries to make an educated guess about the appropriate lifetimes. Rust compiler has a few rules that it applies in case of lifetime elision. Basic rules include that each parameter passed by reference gets its own lifetime and if there's exactly one input lifetime, that lifetime is assigned to all output lifetime parameters. The rules become more complex when dealing with methods. In these cases, there's a distinction between "self" and other parameters. With lifetime elision, the Rust compiler eliminates the necessity to specify lifetimes in every situation, producing cleaner and less cluttered code. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/linkedlist@iR0ewc2yURqS7bfMWfoBi.md b/src/data/roadmaps/rust/content/linkedlist@iR0ewc2yURqS7bfMWfoBi.md new file mode 100644 index 000000000..1715f7cf7 --- /dev/null +++ b/src/data/roadmaps/rust/content/linkedlist@iR0ewc2yURqS7bfMWfoBi.md @@ -0,0 +1,8 @@ +# LinkedList + +`LinkedList` is a doubly-linked list where each node contains a value and pointers to both next and previous nodes. Provides O(1) insertion/removal at both ends but O(n) indexing. Generally slower than `Vec` and rarely needed; `VecDeque` is usually preferred for queue operations. + +Learn more from the following links: + +- [@official@LinkedList in std::collections - Rust](https://doc.rust-lang.org/std/collections/struct.LinkedList.html) +- [@opensource@Too Many Linked Lists](https://rust-unofficial.github.io/too-many-lists/) diff --git a/src/data/roadmaps/rust/content/loco@GnSBtZoN9mAehRf5Eczng.md b/src/data/roadmaps/rust/content/loco@GnSBtZoN9mAehRf5Eczng.md new file mode 100644 index 000000000..d822deac1 --- /dev/null +++ b/src/data/roadmaps/rust/content/loco@GnSBtZoN9mAehRf5Eczng.md @@ -0,0 +1 @@ +# Loco \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/game-dev/macroquad.md b/src/data/roadmaps/rust/content/macroquad@EtKhe3lgK3NoiBOjXRb2O.md similarity index 100% rename from src/data/roadmaps/rust/content/game-dev/macroquad.md rename to src/data/roadmaps/rust/content/macroquad@EtKhe3lgK3NoiBOjXRb2O.md diff --git a/src/data/roadmaps/rust/content/macros--metaprogramming@eTpZXd8E2jVBmk_aSLZYV.md b/src/data/roadmaps/rust/content/macros--metaprogramming@eTpZXd8E2jVBmk_aSLZYV.md new file mode 100644 index 000000000..7888abd15 --- /dev/null +++ b/src/data/roadmaps/rust/content/macros--metaprogramming@eTpZXd8E2jVBmk_aSLZYV.md @@ -0,0 +1,3 @@ +# Macros and Metaprogramming + +Macros are code that writes code, enabling metaprogramming in Rust. Declarative macros use `macro_rules!` for pattern-based code generation, while procedural macros provide custom derives and function-like macros. They're expanded at compile time, offering zero-cost abstractions. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/macros/declarative.md b/src/data/roadmaps/rust/content/macros/declarative.md deleted file mode 100644 index efcbfd79d..000000000 --- a/src/data/roadmaps/rust/content/macros/declarative.md +++ /dev/null @@ -1,8 +0,0 @@ -# Declarative Macros with macro_rules! - -Rust supports two types of macros, one of which is known as "declarative macros" (or simply `macro_rules!`). Declarative macros in Rust allow you to define reusable chunks of code that have some variable parts, without having to write a full function or type out the same code every time. They work a lot like functions, except they operate at the syntax level rather than the semantics. The compiler expands declarative macros at compile-time, in essence, taking the code they define and “pasting” it directly into your source code. They are defined using the `macro_rules!` keyword, followed by a name and a block of code. The name is used to invoke the macro later in your code, and the block of code is the code that will get inserted every time the macro is used. - -Visit the following resources to learn more: - -- [@article@Rust Book: Macros](https://doc.rust-lang.org/book/ch19-06-macros.html) -- [@article@Macros by Example](https://doc.rust-lang.org/reference/macros-by-example.html) diff --git a/src/data/roadmaps/rust/content/macros/domain-specific.md b/src/data/roadmaps/rust/content/macros/domain-specific.md deleted file mode 100644 index 672f49537..000000000 --- a/src/data/roadmaps/rust/content/macros/domain-specific.md +++ /dev/null @@ -1,7 +0,0 @@ -# Domain-Specific Languages (DSLs) in Rust - -Domain Specific Languages (DSLs) are programming languages tailored to solve specific problems or tasks in an efficient manner. They are narrower in application than general-purpose languages because they are optimized for a specific domain or task. In Rust, Macros can be used to create DSLs due to their ability to define reusable syntax patterns and to effectively manipulate Rust syntax trees. This ability has led to a variety of domain-specific languages based on Rust macros, with applications ranging from game development to web application programming. Macros essentially allow Rust programmers to extend the language in ways that are tailor-made for their specific project or domain, hence creating domain-specific languages. - -Visit the following resources to learn more: - -- [@article@Rust by Example: Domain Specific Languages (DSLs)](https://doc.rust-lang.org/rust-by-example/macros/dsl.html) diff --git a/src/data/roadmaps/rust/content/macros/index.md b/src/data/roadmaps/rust/content/macros/index.md deleted file mode 100644 index b4256e61f..000000000 --- a/src/data/roadmaps/rust/content/macros/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Macros and Metaprogramming - -Macros in Rust are a way to define reusable chunks of code. They're similar to functions in that they can accept input and produce output, but macros have a few key differences and advantages. With macros, you can write code that writes other code, which is known as metaprogramming. In comparison to functions, macros are more flexible and can accept a variety of different inputs. Macros are defined using the `macro_rules!` keyword and they use a different syntax than regular Rust functions. When you define a macro, you specify the code that should be inserted at compile time. The compiler then replaces all calls to the macro with the expanded macro code. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/macros/procedural.md b/src/data/roadmaps/rust/content/macros/procedural.md deleted file mode 100644 index 73552ae91..000000000 --- a/src/data/roadmaps/rust/content/macros/procedural.md +++ /dev/null @@ -1,7 +0,0 @@ -# Procedural Macros and Custom Derive - -Procedural macros in Rust allow you to define functions, or procedures, that operate on code at compile time. The input to these macros is a stream of tokens from the program text, and the output is a new stream of tokens that replace the macro invocation. They are defined in their own crates with a special crate type. There are three kinds of procedural macros: custom derive, attribute-like macros, and function-like macros. Custom derive macros let you define new behavior for the `derive` attribute. Attribute-like macros are invoked as item attributes, for example `#[foo(…)]`, and can be applied to any item that accepts attributes. Function-like macros look like function calls, but work with arbitrary tokens as input. - -Visit the following resources to learn more: - -- [@article@Procedural Macros](https://doc.rust-lang.org/reference/procedural-macros.html) diff --git a/src/data/roadmaps/rust/content/testing/mocking.md b/src/data/roadmaps/rust/content/mocking--property-based-testing@HEqfA6An6ZeT3z4R610en.md similarity index 100% rename from src/data/roadmaps/rust/content/testing/mocking.md rename to src/data/roadmaps/rust/content/mocking--property-based-testing@HEqfA6An6ZeT3z4R610en.md diff --git a/src/data/roadmaps/rust/content/modules--crates@Zpowr_NGd-E2DC3g-oW9h.md b/src/data/roadmaps/rust/content/modules--crates@Zpowr_NGd-E2DC3g-oW9h.md new file mode 100644 index 000000000..52646796f --- /dev/null +++ b/src/data/roadmaps/rust/content/modules--crates@Zpowr_NGd-E2DC3g-oW9h.md @@ -0,0 +1,7 @@ +# Modules and Crates + +Modules provide namespacing and encapsulation within a crate, organizing code with `mod` keyword and controlling visibility with `pub`. Crates are compilation units (binaries or libraries) that can depend on other crates. The module system organizes code within crates, while crates enable sharing functionality between projects. + +Visit the following resources to learn more: + +- [@article@Rust Book: Managing Growing Projects with Packages, Crates, and Modules](https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html) diff --git a/src/data/roadmaps/rust/content/modules-and-crates/code-organization.md b/src/data/roadmaps/rust/content/modules-and-crates/code-organization.md deleted file mode 100644 index 99eb48ff6..000000000 --- a/src/data/roadmaps/rust/content/modules-and-crates/code-organization.md +++ /dev/null @@ -1,9 +0,0 @@ -# Code Organization and Namespacing - -In Rust, the fundamental structure for organizing your code is through using a **module** system and **crates**. A module in Rust allows grouping of related function definitions and struct definitions in a named scope. It’s defined using the `mod` keyword. The modules can also be nested and make code more concise, readable, and manageable. On the other hand, a **crate** is a binary or a library project in Rust. It's the largest compilation unit of Rust. It's a tree of modules that produces a library or executable. The crate root is a source file which the Rust compiler starts from and makes up the root module of your crate (e.g. `main.rs` or `lib.rs`). - -Visit the following resources to learn more: - -- [@article@Rust by Example: Modules](https://doc.rust-lang.org/rust-by-example/mod.html) -- [@article@The Rust Reference: Namespaces](https://doc.rust-lang.org/reference/names/namespaces.html) -- [@feed@Explore top posts about General Programming](https://app.daily.dev/tags/general-programming?ref=roadmapsh) diff --git a/src/data/roadmaps/rust/content/modules-and-crates/dependency-mgmt.md b/src/data/roadmaps/rust/content/modules-and-crates/dependency-mgmt.md deleted file mode 100644 index f8556ef61..000000000 --- a/src/data/roadmaps/rust/content/modules-and-crates/dependency-mgmt.md +++ /dev/null @@ -1,8 +0,0 @@ -# Dependency Management with Cargo.toml - -Dependency management in Rust is handled by a tool called Cargo. Cargo helps you manage your Rust projects, providing functionalities for building your code, downloading the libraries your project depends on, and building those libraries. These libraries are called _crates_. A crate is a package of Rust code. In your `Cargo.toml`, you list your dependencies in a [dependencies] section. You list libraries from crates.io by their name and version number. Cargo understands Semantic Versioning, a standard for writing version numbers. - -Visit the following resources to learn more: - -- [@article@Rust Blog: Cargo](https://blog.rust-lang.org/2016/05/05/cargo-pillars.html) -- [@article@Rust by Example: Dependencies](https://doc.rust-lang.org/rust-by-example/cargo/deps.html) diff --git a/src/data/roadmaps/rust/content/modules-and-crates/index.md b/src/data/roadmaps/rust/content/modules-and-crates/index.md deleted file mode 100644 index 52b8a8c9f..000000000 --- a/src/data/roadmaps/rust/content/modules-and-crates/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Modules and Crates - -In Rust, a module is a namespace that contains definitions of functions or types. You can choose to make the definitions visible in other modules or not. This provides a method of encapsulation for your code. On the other hand, a crate is a binary or library. It is the smallest unit of compilation in Rust. A crate can link to other crates, and it is composed of many modules. Therefore, the module system allows for code organization within a crate, and the crate system allows for building and sharing functionality among multiple projects. - -Visit the following resources to learn more: - -- [@article@Rust Book: Managing Growing Projects with Packages, Crates, and Modules](https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html) diff --git a/src/data/roadmaps/rust/content/modules-and-crates/publishing.md b/src/data/roadmaps/rust/content/modules-and-crates/publishing.md deleted file mode 100644 index f84d3c616..000000000 --- a/src/data/roadmaps/rust/content/modules-and-crates/publishing.md +++ /dev/null @@ -1,7 +0,0 @@ -# Publishing on crates.io - -Publishing in Rust involves packaging up your library or executable and making it available for others to use. To publish a crate, you'll need to create an account on [crates.io](https://crates.io/), the Rust package repository. If you haven't already, you'll need to format your project in a specific way, detailing needed information in a `Cargo.toml` file. Then, use the command `cargo publish` to upload your crate to the registry. Updates to your crate can be published with the same command, but be mindful that crates.io does not allow you to delete or overwrite an existing version of a crate. Make sure that everything is in order before you publish! - -Visit the following resources to learn more: - -- [@article@The Cargo Book: Publishing on crates.io](https://doc.rust-lang.org/cargo/reference/publishing.html) diff --git a/src/data/roadmaps/rust/content/mutex@GbbeV3r27IBEKHyiyLqs6.md b/src/data/roadmaps/rust/content/mutex@GbbeV3r27IBEKHyiyLqs6.md new file mode 100644 index 000000000..51c24ed0f --- /dev/null +++ b/src/data/roadmaps/rust/content/mutex@GbbeV3r27IBEKHyiyLqs6.md @@ -0,0 +1,7 @@ +# Mutex + +`Mutex` (Mutual Exclusion) protects shared data from concurrent access by multiple threads. Only one thread can access the protected data at a time through `lock()`. Rust automatically unlocks mutexes when they go out of scope and handles panics to prevent deadlocks. + +Learn more from the following links: + +- [@article@Mutex](https://doc.rust-lang.org/std/sync/struct.Mutex.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/networking/hyper.md b/src/data/roadmaps/rust/content/networking/hyper.md deleted file mode 100644 index 307c14112..000000000 --- a/src/data/roadmaps/rust/content/networking/hyper.md +++ /dev/null @@ -1,8 +0,0 @@ -# hyper - -"Hyper" is a fast, safe and concurrent HTTP client and server written in Rust. It uses a non-blocking I/O model for efficient execution, leverages the Tokio platform for event-driven, asynchronous I/O, and includes support for HTTP/2. It has a modular design, allowing you to choose the features you need. Hyper also features a server-side framework for building your own HTTP applications. For security and speed, it comes with native support for HTTP/1 and HTTP/2, and automatically negotiates these protocols. Most importantly, it is designed from the ground up to take advantage of Rust's memory safety and concurrency features. - -Visit the following resources to learn more: - -- [@official@Official Website](https://hyper.rs/) -- [@article@Docs.rs: Hyper](https://docs.rs/hyper/latest/hyper/) diff --git a/src/data/roadmaps/rust/content/networking/index.md b/src/data/roadmaps/rust/content/networking/index.md deleted file mode 100644 index 264573fd1..000000000 --- a/src/data/roadmaps/rust/content/networking/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Networking - -In Rust, the `std::net` module provides functionality for networking. This includes types that represent IP addresses (`Ipv4Addr` and `Ipv6Addr`), a socket address (`SocketAddr`), and TCP/UDP networking types (`TcpStream`, `TcpListener`, `UdpSocket`). There's also the `TcpStream` type for connection-oriented sockets, `TcpListener` for a TCP socket that's listening for incoming connections, and `UdpSocket` for connection-less sockets. Rust’s networking interface is built around BSD sockets with methods that closely follow the system's system calls. The types in this module encompass low-level network primitives, which can be used to build networking applications. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/networking/reqwest.md b/src/data/roadmaps/rust/content/networking/reqwest.md deleted file mode 100644 index 9436105e7..000000000 --- a/src/data/roadmaps/rust/content/networking/reqwest.md +++ /dev/null @@ -1,7 +0,0 @@ -# reqwest - -`Reqwest` is a Rust library which is designed to make HTTP requests easy and effortless. It offers a mix of convenience methods for both synchronous and asynchronous requests,GET,POST and other HTTP methods. It also supports JSON content and is built on `hyper` for HTTP and `tokio` for asynchronous I/O. This means you can take advantage of the powerful asynchronous features of Rust such as Futures and async/await. Furthermore, `Reqwest` takes care of many tedious aspects of HTTP for you, such as handling cookies and encoding/decoding different formats. - -Visit the following resources to learn more: - -- [@article@Docs.rs: Reqwest](https://docs.rs/reqwest/latest/reqwest/) diff --git a/src/data/roadmaps/rust/content/networking@3pL0ARqk8uRNimopHSalW.md b/src/data/roadmaps/rust/content/networking@3pL0ARqk8uRNimopHSalW.md new file mode 100644 index 000000000..060cdccc8 --- /dev/null +++ b/src/data/roadmaps/rust/content/networking@3pL0ARqk8uRNimopHSalW.md @@ -0,0 +1,3 @@ +# Networking + +Rust's `std::net` module provides networking primitives including `TcpStream`, `TcpListener`, `UdpSocket`, and address types. Built on BSD sockets, it offers low-level network operations for building networking applications. Higher-level crates like Tokio provide async networking capabilities. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/embedded/nrf-hal.md b/src/data/roadmaps/rust/content/nrf-hal@ETYrk0s5Wn80XyntNG_t1.md similarity index 100% rename from src/data/roadmaps/rust/content/embedded/nrf-hal.md rename to src/data/roadmaps/rust/content/nrf-hal@ETYrk0s5Wn80XyntNG_t1.md diff --git a/src/data/roadmaps/rust/content/option-and-result-enumerations@wQHkBydWsiGEOZMdKmz40.md b/src/data/roadmaps/rust/content/option-and-result-enumerations@wQHkBydWsiGEOZMdKmz40.md new file mode 100644 index 000000000..5a0d36a39 --- /dev/null +++ b/src/data/roadmaps/rust/content/option-and-result-enumerations@wQHkBydWsiGEOZMdKmz40.md @@ -0,0 +1,8 @@ +# Option & Result Enumerations + +`Option` handles nullable values with `Some(T)` and `None` variants, replacing null pointers safely. `Result` manages error handling with `Ok(T)` for success and `Err(E)` for failures. Both enums enable safe error handling through pattern matching and method chaining. + +Visit the following resources to learn more: + +- [@article@Rust by Example: Option & unwrap](https://doc.rust-lang.org/rust-by-example/error/option_unwrap.html) +- [@article@Rust by Example: Result](https://doc.rust-lang.org/rust-by-example/error/result.html) diff --git a/src/data/roadmaps/rust/content/ownsership-rules--memory-safety@2UQ3AuGkDbT0-54l0rOGM.md b/src/data/roadmaps/rust/content/ownsership-rules--memory-safety@2UQ3AuGkDbT0-54l0rOGM.md new file mode 100644 index 000000000..d039c0e17 --- /dev/null +++ b/src/data/roadmaps/rust/content/ownsership-rules--memory-safety@2UQ3AuGkDbT0-54l0rOGM.md @@ -0,0 +1,7 @@ +# Ownership Rules and Memory Safety + +Rust's ownership has three key rules: each value has exactly one owner, only one owner exists at a time, and values are dropped when owners go out of scope. This prevents data races, ensures memory safety without garbage collection, and eliminates common bugs like use-after-free and memory leaks. + +Learn more from the following links: + +- [@article@What Is Ownership?](https://rust-book.cs.brown.edu/ch04-01-what-is-ownership.html) diff --git a/src/data/roadmaps/rust/content/language-basics/syntax/pattern-matching.md b/src/data/roadmaps/rust/content/pattern-matching--destructuring@yqp3UePmSlGyOYpxITis4.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/syntax/pattern-matching.md rename to src/data/roadmaps/rust/content/pattern-matching--destructuring@yqp3UePmSlGyOYpxITis4.md diff --git a/src/data/roadmaps/rust/content/perf-profiling/index.md b/src/data/roadmaps/rust/content/perf-profiling/index.md deleted file mode 100644 index 5861fa3a1..000000000 --- a/src/data/roadmaps/rust/content/perf-profiling/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Performance and Profiling - -`Perf profiling` is a type of software performance analysis tool that helps to identify the performance bottlenecks in a program. It is derived from the Linux `perf` tool, and is specifically designed for use with Rust programs. Perf profiling works by collecting statistical data about the running system and software, which can then be analyzed to determine where the most time is being spent in your code. This makes it easier to target optimizations effectively, rather than relying on intuition or guesswork. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/performance-and-profiling@WduD9VIcYSs_JTnuMNyxk.md b/src/data/roadmaps/rust/content/performance-and-profiling@WduD9VIcYSs_JTnuMNyxk.md new file mode 100644 index 000000000..f1023becc --- /dev/null +++ b/src/data/roadmaps/rust/content/performance-and-profiling@WduD9VIcYSs_JTnuMNyxk.md @@ -0,0 +1,3 @@ +# Performance and Profiling + +Performance profiling in Rust identifies bottlenecks using tools like `perf`, `cargo bench`, `criterion`, and `flamegraph`. These tools collect statistical data about runtime performance, helping developers optimize code efficiently by targeting actual problem areas rather than guessing. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/procedural-macros--custom-derive@bkVM1OIbv4XUpY6FQb8x_.md b/src/data/roadmaps/rust/content/procedural-macros--custom-derive@bkVM1OIbv4XUpY6FQb8x_.md new file mode 100644 index 000000000..d6538bc81 --- /dev/null +++ b/src/data/roadmaps/rust/content/procedural-macros--custom-derive@bkVM1OIbv4XUpY6FQb8x_.md @@ -0,0 +1,7 @@ +# Procedural Macros and Custom Derive + +Procedural macros operate on token streams at compile time, generating new code. Three types exist: custom derive (for `#[derive(MyTrait)]`), attribute-like (`#[my_attr]`), and function-like (`my_macro!()`). More powerful than declarative macros but require separate crates with special configuration. + +Visit the following resources to learn more: + +- [@article@Procedural Macros](https://doc.rust-lang.org/reference/procedural-macros.html) diff --git a/src/data/roadmaps/rust/content/propagating-errors-and--operator@pTC1ucmErVnMbNFnYLJK7.md b/src/data/roadmaps/rust/content/propagating-errors-and--operator@pTC1ucmErVnMbNFnYLJK7.md new file mode 100644 index 000000000..25e4eb2f4 --- /dev/null +++ b/src/data/roadmaps/rust/content/propagating-errors-and--operator@pTC1ucmErVnMbNFnYLJK7.md @@ -0,0 +1,7 @@ +# Propagating Errors and `?` Operator + +The `?` operator provides concise error propagation in functions returning `Result` or `Option`. It automatically unwraps `Ok`/`Some` values or early-returns `Err`/`None` to the caller. This eliminates verbose `match` expressions and enables clean, readable error handling patterns. + +Visit the following resources to learn more: + +- [@article@Rust Book: Recoverable Errors with Result](https://doc.rust-lang.org/book/ch09-02-recoverable-errors-with-result.html) diff --git a/src/data/roadmaps/rust/content/publishing-on-cratesio@Op0-bdMV3kE9Be6Ot1aC6.md b/src/data/roadmaps/rust/content/publishing-on-cratesio@Op0-bdMV3kE9Be6Ot1aC6.md new file mode 100644 index 000000000..42bee78a2 --- /dev/null +++ b/src/data/roadmaps/rust/content/publishing-on-cratesio@Op0-bdMV3kE9Be6Ot1aC6.md @@ -0,0 +1,7 @@ +# Publishing on crates.io + +Publishing Rust crates involves creating an account on crates.io, preparing proper `Cargo.toml` metadata, and using `cargo publish`. Once published, versions cannot be deleted or overwritten, ensuring dependency stability. The registry serves as Rust's central package repository for sharing libraries. + +Visit the following resources to learn more: + +- [@article@The Cargo Book: Publishing on crates.io](https://doc.rust-lang.org/cargo/reference/publishing.html) diff --git a/src/data/roadmaps/rust/content/queue@fq2NMV-QV9ayJl82ZWzov.md b/src/data/roadmaps/rust/content/queue@fq2NMV-QV9ayJl82ZWzov.md new file mode 100644 index 000000000..7213f4c8d --- /dev/null +++ b/src/data/roadmaps/rust/content/queue@fq2NMV-QV9ayJl82ZWzov.md @@ -0,0 +1,7 @@ +# Queue + +Queue follows FIFO (First-In-First-Out) ordering where elements are added at one end and removed from the other. Rust doesn't have a built-in queue, but `VecDeque` provides queue functionality with `push_back()` for adding and `pop_front()` for removing elements efficiently. + +Learn more from the following links: + +- [@official@Queues](https://docs.rs/queues/latest/queues/) diff --git a/src/data/roadmaps/rust/content/serialization/toml-rs.md b/src/data/roadmaps/rust/content/quinn@LmFog_qXrS9e5ARhV6OD_.md similarity index 100% rename from src/data/roadmaps/rust/content/serialization/toml-rs.md rename to src/data/roadmaps/rust/content/quinn@LmFog_qXrS9e5ARhV6OD_.md diff --git a/src/data/roadmaps/rust/content/networking/quinn.md b/src/data/roadmaps/rust/content/quinn@qi1pmsY8bPk8nbHiBIGha.md similarity index 100% rename from src/data/roadmaps/rust/content/networking/quinn.md rename to src/data/roadmaps/rust/content/quinn@qi1pmsY8bPk8nbHiBIGha.md diff --git a/src/data/roadmaps/rust/content/rc@U9Bd-GO0QwYVLvESR4PTb.md b/src/data/roadmaps/rust/content/rc@U9Bd-GO0QwYVLvESR4PTb.md new file mode 100644 index 000000000..435179193 --- /dev/null +++ b/src/data/roadmaps/rust/content/rc@U9Bd-GO0QwYVLvESR4PTb.md @@ -0,0 +1,7 @@ +# Rc + +`Rc` (Reference Counting) enables multiple owners of the same heap-allocated data in single-threaded contexts. It tracks the number of references and automatically deallocates data when the count reaches zero. Use `Rc::clone()` to create additional references without deep copying data. + +Learn more from the following links: + +- [@article@rct - The Reference Counted Smart Pointer](https://doc.rust-lang.org/book/ch15-04-rc.html#rct-the-reference-counted-smart-pointer) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/gui-dev/relm.md b/src/data/roadmaps/rust/content/relm@QbdGnUoTLgMHO1NCQINIi.md similarity index 100% rename from src/data/roadmaps/rust/content/gui-dev/relm.md rename to src/data/roadmaps/rust/content/relm@QbdGnUoTLgMHO1NCQINIi.md diff --git a/src/data/roadmaps/rust/content/reqwest@TtajUXZpyNx9AmdUawm-8.md b/src/data/roadmaps/rust/content/reqwest@TtajUXZpyNx9AmdUawm-8.md new file mode 100644 index 000000000..a2151ba6f --- /dev/null +++ b/src/data/roadmaps/rust/content/reqwest@TtajUXZpyNx9AmdUawm-8.md @@ -0,0 +1,7 @@ +# reqwest + +`reqwest` is a popular HTTP client library for Rust that provides both sync and async APIs for making HTTP requests. Built on `hyper` and `tokio`, it supports JSON, forms, cookies, and various authentication methods with an ergonomic, easy-to-use interface for web API interactions. + +Visit the following resources to learn more: + +- [@article@Docs.rs: Reqwest](https://docs.rs/reqwest/latest/reqwest/) diff --git a/src/data/roadmaps/rust/content/cryptography/ring.md b/src/data/roadmaps/rust/content/ring@w8nxQDxmfoUHkFV66TKiq.md similarity index 100% rename from src/data/roadmaps/rust/content/cryptography/ring.md rename to src/data/roadmaps/rust/content/ring@w8nxQDxmfoUHkFV66TKiq.md diff --git a/src/data/roadmaps/rust/content/rocket@ApjwY_70OGG_dNIC85oBD.md b/src/data/roadmaps/rust/content/rocket@ApjwY_70OGG_dNIC85oBD.md new file mode 100644 index 000000000..dbfa3c17b --- /dev/null +++ b/src/data/roadmaps/rust/content/rocket@ApjwY_70OGG_dNIC85oBD.md @@ -0,0 +1,7 @@ +# Rocket + +Rocket is a web framework for Rust emphasizing ease of use, expressiveness, and type safety. It features code generation via procedural macros, built-in templating, request guards, and comprehensive error handling. Rocket prioritizes developer productivity with intuitive APIs and detailed error messages. + +Visit the following resources to learn more: + +- [@official@Rocket](https://rocket.rs/) diff --git a/src/data/roadmaps/rust/content/embedded/rppal.md b/src/data/roadmaps/rust/content/rppal@L01rVq2_H4rWzlKygW5kA.md similarity index 100% rename from src/data/roadmaps/rust/content/embedded/rppal.md rename to src/data/roadmaps/rust/content/rppal@L01rVq2_H4rWzlKygW5kA.md diff --git a/src/data/roadmaps/rust/content/database-orm/rusqlite.md b/src/data/roadmaps/rust/content/rusqlite@a2MLN7f-FvsgdmvP9ixlv.md similarity index 100% rename from src/data/roadmaps/rust/content/database-orm/rusqlite.md rename to src/data/roadmaps/rust/content/rusqlite@a2MLN7f-FvsgdmvP9ixlv.md diff --git a/src/data/roadmaps/rust/content/cryptography/rust-crypto.md b/src/data/roadmaps/rust/content/rust-crypto@f68x7r-qzaQfrzXnjOI2q.md similarity index 100% rename from src/data/roadmaps/rust/content/cryptography/rust-crypto.md rename to src/data/roadmaps/rust/content/rust-crypto@f68x7r-qzaQfrzXnjOI2q.md diff --git a/src/data/roadmaps/rust/content/debugging/rust-gdb.md b/src/data/roadmaps/rust/content/rust-gdb@UkHXsAolmbk-MsJFfqObC.md similarity index 100% rename from src/data/roadmaps/rust/content/debugging/rust-gdb.md rename to src/data/roadmaps/rust/content/rust-gdb@UkHXsAolmbk-MsJFfqObC.md diff --git a/src/data/roadmaps/rust/content/debugging/rust-lldb.md b/src/data/roadmaps/rust/content/rust-lldb@p1w1iljGABgHoJjIRJYLY.md similarity index 100% rename from src/data/roadmaps/rust/content/debugging/rust-lldb.md rename to src/data/roadmaps/rust/content/rust-lldb@p1w1iljGABgHoJjIRJYLY.md diff --git a/src/data/roadmaps/rust/content/introduction/rust-repl.md b/src/data/roadmaps/rust/content/rust-repl-rust-playground@eYCNYtwXBjZwcPUe7QYZ-.md similarity index 100% rename from src/data/roadmaps/rust/content/introduction/rust-repl.md rename to src/data/roadmaps/rust/content/rust-repl-rust-playground@eYCNYtwXBjZwcPUe7QYZ-.md diff --git a/src/data/roadmaps/rust/content/rustdoc.md b/src/data/roadmaps/rust/content/rustdoc.md deleted file mode 100644 index d5f5b5690..000000000 --- a/src/data/roadmaps/rust/content/rustdoc.md +++ /dev/null @@ -1,7 +0,0 @@ -# Documenting with `rustdoc` - -`rustdoc` is Rust's built-in documentation generator that creates comprehensive docs from code comments and source code. It can test code examples in documentation to ensure they stay accurate and up-to-date. The generated docs are viewable in a web browser and rustdoc is the standard tool for all Rust project documentation. - -Visit the following resources to learn more: - -- [@article@How to write documentation](https://doc.rust-lang.org/rustdoc/how-to-write-documentation.html) diff --git a/src/data/roadmaps/rust/content/rwlock@WzGl4DkANjUu7VC1AIWI-.md b/src/data/roadmaps/rust/content/rwlock@WzGl4DkANjUu7VC1AIWI-.md new file mode 100644 index 000000000..bbcfd9622 --- /dev/null +++ b/src/data/roadmaps/rust/content/rwlock@WzGl4DkANjUu7VC1AIWI-.md @@ -0,0 +1,7 @@ +# RwLock + +`RwLock` (Read-Write Lock) allows multiple concurrent readers OR one exclusive writer, unlike Mutex which allows only one accessor. Use `read()` for shared access and `write()` for exclusive access. Ideal for read-heavy workloads where data is frequently read but rarely modified. + +Learn more from the following links: + +- [@article@RwLock](https://doc.rust-lang.org/std/sync/struct.RwLock.html) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/serde@EHErECEYws05oi59OsZpC.md b/src/data/roadmaps/rust/content/serde@EHErECEYws05oi59OsZpC.md new file mode 100644 index 000000000..a356a2d8c --- /dev/null +++ b/src/data/roadmaps/rust/content/serde@EHErECEYws05oi59OsZpC.md @@ -0,0 +1,8 @@ +# Serde + +Serde is Rust's most popular serialization framework for converting data structures to/from formats like JSON, YAML, TOML, and Binary. It provides `Serialize` and `Deserialize` traits with derive macros for automatic implementation. Offers high performance with customizable behavior for complex use cases. + +Visit the following resources to learn more: + +- [@official@Official Website](https://serde.rs/) +- [@article@Docs.rs: Serde](https://docs.rs/serde/latest/serde/) diff --git a/src/data/roadmaps/rust/content/serialization--deserialization@gcmKSLWfBqx4aPZOmyQsg.md b/src/data/roadmaps/rust/content/serialization--deserialization@gcmKSLWfBqx4aPZOmyQsg.md new file mode 100644 index 000000000..404cf5ac9 --- /dev/null +++ b/src/data/roadmaps/rust/content/serialization--deserialization@gcmKSLWfBqx4aPZOmyQsg.md @@ -0,0 +1,3 @@ +# Serialization/Deserialization + +Serialization converts Rust data structures into bytes for storage or transmission, while deserialization reverses the process. Serde is the standard framework with support for JSON, YAML, TOML, Binary, and more formats. Provides efficient, type-safe data conversion. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/serialization/index.md b/src/data/roadmaps/rust/content/serialization/index.md deleted file mode 100644 index d1f0f3b3a..000000000 --- a/src/data/roadmaps/rust/content/serialization/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Serialization/Deserialization - -Serialization in Rust refers to the process of converting complex data types into a byte stream for transport over a network, storing in a file, or simply for use in a program. It provides a mechanism to maintain the state of an object by saving and restoring its state. To accomplish this, Rust has two prevalent crates known as `serde` and `bincode`. `Serde` is a robust framework for serializing and deserializing data, and `bincode` is one example of a serializer/deserializer that Serde can use. With Serde, we can develop efficient, compact, and customizable representations of Rust data structures. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/serialization/serde.md b/src/data/roadmaps/rust/content/serialization/serde.md deleted file mode 100644 index d0ffa73b3..000000000 --- a/src/data/roadmaps/rust/content/serialization/serde.md +++ /dev/null @@ -1,8 +0,0 @@ -# Serde - -"Serde" is a framework in Rust that enables the serialization and deserialization of data structures. It provides a way to convert your data structures from Rust into a format that can be stored or sent over the network, and vice versa, in a flexible and straightforward manner. Despite its convenience, Serde avoids compromising on speed, and it is super-efficient. The library supports a variety of data formats, like JSON, Bincode, TOML, YAML, and more. Serde's design allows you to customize serialization and deserialization in intricate ways if the default behavior doesn't suit your application's needs. - -Visit the following resources to learn more: - -- [@official@Official Website](https://serde.rs/) -- [@article@Docs.rs: Serde](https://docs.rs/serde/latest/serde/) diff --git a/src/data/roadmaps/rust/content/async-programming/smol.md b/src/data/roadmaps/rust/content/smol@3C9gCBAq3OQVb583S72D4.md similarity index 100% rename from src/data/roadmaps/rust/content/async-programming/smol.md rename to src/data/roadmaps/rust/content/smol@3C9gCBAq3OQVb583S72D4.md diff --git a/src/data/roadmaps/rust/content/cryptography/sodiumoxide.md b/src/data/roadmaps/rust/content/sodiumoxide@hzzRFb5cyXkgUdLZxaozB.md similarity index 100% rename from src/data/roadmaps/rust/content/cryptography/sodiumoxide.md rename to src/data/roadmaps/rust/content/sodiumoxide@hzzRFb5cyXkgUdLZxaozB.md diff --git a/src/data/roadmaps/rust/content/sqlx@r2KembNZ2WIzLe87EB91K.md b/src/data/roadmaps/rust/content/sqlx@r2KembNZ2WIzLe87EB91K.md new file mode 100644 index 000000000..f3c338371 --- /dev/null +++ b/src/data/roadmaps/rust/content/sqlx@r2KembNZ2WIzLe87EB91K.md @@ -0,0 +1,8 @@ +# sqlx + +SQLx is an async, pure-Rust SQL toolkit providing compile-time query checking for PostgreSQL, MySQL, SQLite, and MSSQL. It features macro-based query validation, strong typing, and compatibility with Tokio/async-std runtimes. SQLx eliminates runtime SQL errors through compile-time verification. + +Visit the following resources to learn more: + +- [@opensource@Repository](https://github.com/launchbadge/sqlx) +- [@article@Docs.rs: sqlx](https://docs.rs/sqlx/latest/sqlx/) diff --git a/src/data/roadmaps/rust/content/stack@B-S1hE-ofNTutnkc2hJBf.md b/src/data/roadmaps/rust/content/stack@B-S1hE-ofNTutnkc2hJBf.md new file mode 100644 index 000000000..1f0d7a7ff --- /dev/null +++ b/src/data/roadmaps/rust/content/stack@B-S1hE-ofNTutnkc2hJBf.md @@ -0,0 +1,7 @@ +# Stack + +Stack is a LIFO (Last-In-First-Out) data structure where elements are added and removed from the same end. In Rust, the call stack manages function calls, with each call pushing a frame and returns popping it. Stack memory is fast but limited in size, with stack overflow occurring when exceeded. + +Learn more from the following links: + +- [@official@Box, Stack and Heap](https://doc.rust-lang.org/rust-by-example/std/box.html) diff --git a/src/data/roadmaps/rust/content/string@Hu1jf46OpX44nam_UvYqc.md b/src/data/roadmaps/rust/content/string@Hu1jf46OpX44nam_UvYqc.md new file mode 100644 index 000000000..14d78802f --- /dev/null +++ b/src/data/roadmaps/rust/content/string@Hu1jf46OpX44nam_UvYqc.md @@ -0,0 +1,11 @@ +# String + +Rust's `String` is a growable, mutable, UTF-8 encoded string type stored on the heap. Unlike string slices (`&str`), `String` owns its data and can be modified. Create with `String::from("text")` or `"text".to_string()`. Common operations include `push_str()`, `push()`, and concatenation with `+` or `format!()` macro. + +Learn more from the following links: + +- [@official@String in std::string - Rust](https://doc.rust-lang.org/std/string/struct.String.html) +- [@official@str - Rust](https://doc.rust-lang.org/std/primitive.str.html) +- [@official@What Is a String?](https://doc.rust-lang.org/book/ch08-02-strings.html?highlight=String#what-is-a-string) +- [@article@Rust String (With Examples)](https://www.programiz.com/rust/string) +- [@video@All Rust string types explained](https://www.youtube.com/watch?v=CpvzeyzgQdw&pp=ygUOc3RyaW5nIGluIHJ1c3Q%3D) diff --git a/src/data/roadmaps/rust/content/cli-utils/structopt.md b/src/data/roadmaps/rust/content/structopt@_43912wPdXgLL8v-IMHX_.md similarity index 100% rename from src/data/roadmaps/rust/content/cli-utils/structopt.md rename to src/data/roadmaps/rust/content/structopt@_43912wPdXgLL8v-IMHX_.md diff --git a/src/data/roadmaps/rust/content/language-basics/constructs/structs.md b/src/data/roadmaps/rust/content/structs@Mi9mQ-8gyDPd8Mbu1zuHt.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/constructs/structs.md rename to src/data/roadmaps/rust/content/structs@Mi9mQ-8gyDPd8Mbu1zuHt.md diff --git a/src/data/roadmaps/rust/content/tauri@Q71MnFDQBkZF1c2hj13pU.md b/src/data/roadmaps/rust/content/tauri@Q71MnFDQBkZF1c2hj13pU.md new file mode 100644 index 000000000..320a954bc --- /dev/null +++ b/src/data/roadmaps/rust/content/tauri@Q71MnFDQBkZF1c2hj13pU.md @@ -0,0 +1,7 @@ +# tauri + +Tauri is a framework for building lightweight, secure desktop applications using web technologies (HTML, CSS, JS) with a Rust backend. It offers smaller bundle sizes than Electron, enhanced security, and cross-platform support for Windows, macOS, and Linux with native system integration. + +Learn more from the following resources: + +- [@official@Tauri Website](https://tauri.app) \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/cli-utils/termion.md b/src/data/roadmaps/rust/content/termion@YS0igALDqSanGDWva_vls.md similarity index 100% rename from src/data/roadmaps/rust/content/cli-utils/termion.md rename to src/data/roadmaps/rust/content/termion@YS0igALDqSanGDWva_vls.md diff --git a/src/data/roadmaps/rust/content/testing/index.md b/src/data/roadmaps/rust/content/testing/index.md deleted file mode 100644 index 541407e83..000000000 --- a/src/data/roadmaps/rust/content/testing/index.md +++ /dev/null @@ -1,9 +0,0 @@ -# Testing - -"Testing" in Rust is a crucial part of any programming project. This procedure involves creating specific scenarios to determine whether your code functions as expected. Rust has built-in support for this via the `cargo test` command which will run your test functions. These test functions are typically marked with the `#[test]` attribute to signify that they are not regular functions but testing adjuncts. Rust also provides a few macros such as `assert!`, `assert_eq!`, and `assert_ne!` for comparison checks and confirming expected behavior. - -Visit the following resources to learn more: - -- [@article@Rust Book: Writing Automated Tests](https://doc.rust-lang.org/book/ch11-00-testing.html) -- [@video@YouTube](https://www.youtube.com/watch?v=8XaVlL3lObQ) -- [@feed@Explore top posts about Testing](https://app.daily.dev/tags/testing?ref=roadmapsh) diff --git a/src/data/roadmaps/rust/content/testing/unit-integration.md b/src/data/roadmaps/rust/content/testing/unit-integration.md deleted file mode 100644 index 5fc5ce2b6..000000000 --- a/src/data/roadmaps/rust/content/testing/unit-integration.md +++ /dev/null @@ -1,8 +0,0 @@ -# Unit and Integration Testing - -In Rust language, the concept of unit integration encompasses writing tests for individual units of your code, typically a function or method, as well as for multiple units that interact with each other. Unit tests are written in the same files as the code and are used to verify the functionality of a single unit of software in isolation. On the other hand, integration tests are stored in an entirely different directory and are meant to test how multiple components or modules of your application work together. They rely on combining units of code and testing the group, identifying issues that may not be visible when units are tested in isolation. - -Visit the following resources to learn more: - -- [@article@Rust Book: How to Write Tests](https://doc.rust-lang.org/book/ch11-01-writing-tests.html) -- [@article@Rust by Example: Unit testing](https://doc.rust-lang.org/rust-by-example/testing/unit_testing.html) diff --git a/src/data/roadmaps/rust/content/testing@08qKtgnhJ3tlb5JKfTDf5.md b/src/data/roadmaps/rust/content/testing@08qKtgnhJ3tlb5JKfTDf5.md new file mode 100644 index 000000000..e9beb72ab --- /dev/null +++ b/src/data/roadmaps/rust/content/testing@08qKtgnhJ3tlb5JKfTDf5.md @@ -0,0 +1,9 @@ +# Testing + +Rust has built-in testing support through `cargo test` and the `#[test]` attribute. Test functions use assertion macros like `assert!`, `assert_eq!`, and `assert_ne!` to verify expected behavior. Organize tests with unit tests, integration tests, and documentation tests for comprehensive coverage. + +Visit the following resources to learn more: + +- [@article@Rust Book: Writing Automated Tests](https://doc.rust-lang.org/book/ch11-00-testing.html) +- [@video@YouTube](https://www.youtube.com/watch?v=8XaVlL3lObQ) +- [@feed@Explore top posts about Testing](https://app.daily.dev/tags/testing?ref=roadmapsh) diff --git a/src/data/roadmaps/rust/content/threads-channels-and-message-passing@pJN260pWQVO0gHxi1-_3U.md b/src/data/roadmaps/rust/content/threads-channels-and-message-passing@pJN260pWQVO0gHxi1-_3U.md new file mode 100644 index 000000000..03be01239 --- /dev/null +++ b/src/data/roadmaps/rust/content/threads-channels-and-message-passing@pJN260pWQVO0gHxi1-_3U.md @@ -0,0 +1,7 @@ +# Threads, Channels, and Message Passing + +Rust provides native threading with `std::thread::spawn()` and `join()` for 1:1 OS thread mapping. Channels enable safe message passing between threads, avoiding shared state issues. This model promotes concurrent programming without data races through Rust's ownership system. + +Learn more from the following links: + +- [@article@Rust Atomics and Locks - Low-Level Concurrency in Practice](https://marabos.nl/atomics/) diff --git a/src/data/roadmaps/rust/content/tokio@H0mctp3Bj2OYfIGFDWGfz.md b/src/data/roadmaps/rust/content/tokio@H0mctp3Bj2OYfIGFDWGfz.md new file mode 100644 index 000000000..5ad4c927d --- /dev/null +++ b/src/data/roadmaps/rust/content/tokio@H0mctp3Bj2OYfIGFDWGfz.md @@ -0,0 +1,8 @@ +# Tokio + +Tokio is Rust's most popular async runtime for building fast, reliable network applications. It provides an async/await runtime, I/O drivers, timers, and networking primitives. Tokio enables high-performance concurrent applications by efficiently managing thousands of tasks on a small number of threads. + +Visit the following resources to learn more: + +- [@official@Official Website](https://tokio.rs/) +- [@article@Docs.rs: Tokio](https://docs.rs/tokio/latest/tokio/) diff --git a/src/data/roadmaps/rust/content/trait-bounds-and-associated-types@pRDgDtRIVpNM2CdhSOS3Q.md b/src/data/roadmaps/rust/content/trait-bounds-and-associated-types@pRDgDtRIVpNM2CdhSOS3Q.md new file mode 100644 index 000000000..af495265e --- /dev/null +++ b/src/data/roadmaps/rust/content/trait-bounds-and-associated-types@pRDgDtRIVpNM2CdhSOS3Q.md @@ -0,0 +1,3 @@ +# Trait Bounds and Associated Types + +Trait bounds constrain generics by requiring types to implement specific traits (`T: Display`). Associated types define type placeholders within traits that implementors must specify. Together, they enable flexible generic programming with type safety and improved API design patterns. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/trait-definitions--implementations@_EicstELZcdesHiXFWJGu.md b/src/data/roadmaps/rust/content/trait-definitions--implementations@_EicstELZcdesHiXFWJGu.md new file mode 100644 index 000000000..5eaef880e --- /dev/null +++ b/src/data/roadmaps/rust/content/trait-definitions--implementations@_EicstELZcdesHiXFWJGu.md @@ -0,0 +1,7 @@ +# Trait Definitions and Implementations + +Traits define shared behavior as a set of method signatures that types can implement. Define with `trait Name { fn method(&self); }` and implement with `impl TraitName for Type`. Traits enable polymorphism, code reuse, and abstraction while maintaining type safety and zero-cost performance. + +Visit the following resources to learn more: + +- [@article@Rust by Example: Traits](https://doc.rust-lang.org/rust-by-example/trait.html) diff --git a/src/data/roadmaps/rust/content/traits--generics@zLKbYX0nnbfD5n3P_JRaS.md b/src/data/roadmaps/rust/content/traits--generics@zLKbYX0nnbfD5n3P_JRaS.md new file mode 100644 index 000000000..6ca06497a --- /dev/null +++ b/src/data/roadmaps/rust/content/traits--generics@zLKbYX0nnbfD5n3P_JRaS.md @@ -0,0 +1,7 @@ +# Traits and Generics + +Traits define shared behavior that types can implement, while generics enable code reuse with type parameters. Together, they provide trait bounds (`T: Display`) to constrain generic types, ensuring they have required functionality. This enables safe, zero-cost polymorphism and code abstraction. + +Visit the following resources to learn more: + +- [@article@Book: Generic Types, Traits, and Lifetimes](https://doc.rust-lang.org/book/ch10-00-generics.html) diff --git a/src/data/roadmaps/rust/content/traits-generics/advanced-generics.md b/src/data/roadmaps/rust/content/traits-generics/advanced-generics.md deleted file mode 100644 index 2f132a3f7..000000000 --- a/src/data/roadmaps/rust/content/traits-generics/advanced-generics.md +++ /dev/null @@ -1,8 +0,0 @@ -# Advanced Generics and Type-level Programming - -Advanced generics in Rust offer a powerful set of tools for creating reusable and efficient code. The `where` syntax in generics can be used to specify trait and lifetime bounds, creating a more expressive declaration and avoiding numerous `T: Trait` inline annotations. Additionally, the `` syntax allows for using dynamically sized types in generics. Advanced generics also allow for defining methods that apply to a subset of variations of generic types using an associated type. Furthermore, this allows for operator overloading through the use of associated types in traits, enhancing flexibility while retaining strong typing. Another advanced use of generics is 'higher kinded types', allowing a type constructor to take another type constructor as a parameter. This is the system Rust uses for handling `Option`, `Result`, and other similar types. - -Visit the following resources to learn more: - -- [@article@Book: Generics](https://doc.rust-lang.org/book/ch10-01-syntax.html) -- [@article@Rust by Example: Generics](https://doc.rust-lang.org/rust-by-example/generics.html) diff --git a/src/data/roadmaps/rust/content/traits-generics/index.md b/src/data/roadmaps/rust/content/traits-generics/index.md deleted file mode 100644 index f9aafa01b..000000000 --- a/src/data/roadmaps/rust/content/traits-generics/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# Traits and Generics - -Traits generics are a notable feature in Rust that pertain to defining shared behavior across data types. With them, you can specify placeholder types in trait definitions, letting you abstract over a range of possibilities. They're a means for defining shared behavior -- abstracting over functionality that types can have in common. You can apply traits to generics to constrain the types passed to the generic, hence permitting trait methods to be called on those types. You identify a generic parameter's type by the trait it implements, making it possible to use generic types in the trait methods. In essence, Rust achieves polymorphism through utilizing traits on generics. - -Visit the following resources to learn more: - -- [@article@Book: Generic Types, Traits, and Lifetimes](https://doc.rust-lang.org/book/ch10-00-generics.html) diff --git a/src/data/roadmaps/rust/content/traits-generics/trait-bounds.md b/src/data/roadmaps/rust/content/traits-generics/trait-bounds.md deleted file mode 100644 index c2c1be79b..000000000 --- a/src/data/roadmaps/rust/content/traits-generics/trait-bounds.md +++ /dev/null @@ -1,3 +0,0 @@ -# Trait Bounds and Associated Types - -Trait Bounds in Rust is a way of specifying that a generic must satisfy a certain trait. Essentially, a trait bound says something like: "T must support the following behavior". In other words, they allow you to use generic type parameters in your function definitions to specify that the function can accept any type as a parameter, as long as that type implements a certain trait. For instance, `T: Display` would constitute a trait bound, requiring the generic `T` to implement the `Display` trait. These trait bounds add a level of control and safety over the types that are passed as parameters, opening the possibility for a higher level of abstraction and code reuse. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/traits-generics/trait-def.md b/src/data/roadmaps/rust/content/traits-generics/trait-def.md deleted file mode 100644 index 1555d4b2f..000000000 --- a/src/data/roadmaps/rust/content/traits-generics/trait-def.md +++ /dev/null @@ -1,7 +0,0 @@ -# Trait Definitions and Implementations - -A `trait` definition in Rust is a way to define a set of behaviors necessary for a certain type. It is essentially an interface that types can implement. The `trait` def is created using the `trait` keyword followed by its name and the set of methods it includes enclosed in curly brackets. These methods are defined under the trait with their signature but without their implementation. Once a trait is defined, it can be implemented for any data type. Note that the type that this trait applies to is represented by the keyword `Self`. For example, `trait GetName { fn get_name(&self) -> String; }` defines a trait `GetName` with a method `get_name`. This trait can then be implemented for any type that needs the behaviour `get_name`. - -Visit the following resources to learn more: - -- [@article@Rust by Example: Traits](https://doc.rust-lang.org/rust-by-example/trait.html) diff --git a/src/data/roadmaps/rust/content/language-basics/constructs/traits.md b/src/data/roadmaps/rust/content/traits@SJMuIEuHp8X6nfLb0k0TU.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/constructs/traits.md rename to src/data/roadmaps/rust/content/traits@SJMuIEuHp8X6nfLb0k0TU.md diff --git a/src/data/roadmaps/rust/content/tuple@81_J7CwtUUjYPvKV_prg3.md b/src/data/roadmaps/rust/content/tuple@81_J7CwtUUjYPvKV_prg3.md new file mode 100644 index 000000000..104d3a22d --- /dev/null +++ b/src/data/roadmaps/rust/content/tuple@81_J7CwtUUjYPvKV_prg3.md @@ -0,0 +1,9 @@ +# Tuple + +Tuples are fixed-size collections that can hold elements of different types. Access elements using dot notation with zero-based indexing: `tuple.0`, `tuple.1`, etc. Example: `let data: (i32, f64, char) = (42, 3.14, 'x');`. Useful for grouping related values of different types and multiple variable assignments. + +Learn more from the following links: + +- [@official@Tuple - Rust](https://doc.rust-lang.org/std/primitive.tuple.html) +- [@article@The Tuple Type](https://rust-book.cs.brown.edu/ch03-02-data-types.html#the-tuple-type) +- [@video@Rust Tutorial - Tuples](https://www.youtube.com/watch?v=t047Hseyj_k&t=506s) diff --git a/src/data/roadmaps/rust/content/unit--integration-testing@w9coeW9-crDxu0KC-9gEU.md b/src/data/roadmaps/rust/content/unit--integration-testing@w9coeW9-crDxu0KC-9gEU.md new file mode 100644 index 000000000..3b640583c --- /dev/null +++ b/src/data/roadmaps/rust/content/unit--integration-testing@w9coeW9-crDxu0KC-9gEU.md @@ -0,0 +1,8 @@ +# Unit and Integration Testing + +Unit tests verify individual functions using `#[test]` and live alongside code. Integration tests are in separate files/directories and test component interactions. Rust provides `cargo test` to run both types, supporting test organization for comprehensive code verification and quality assurance. + +Visit the following resources to learn more: + +- [@article@Rust Book: How to Write Tests](https://doc.rust-lang.org/book/ch11-01-writing-tests.html) +- [@article@Rust by Example: Unit testing](https://doc.rust-lang.org/rust-by-example/testing/unit_testing.html) diff --git a/src/data/roadmaps/rust/content/language-basics/syntax/variables.md b/src/data/roadmaps/rust/content/variables-datatypes-and-constants@Gw5E21W5zis-RUIgNSEV2.md similarity index 100% rename from src/data/roadmaps/rust/content/language-basics/syntax/variables.md rename to src/data/roadmaps/rust/content/variables-datatypes-and-constants@Gw5E21W5zis-RUIgNSEV2.md diff --git a/src/data/roadmaps/rust/content/vector@PskCueCc9pSxfnSzfdX-u.md b/src/data/roadmaps/rust/content/vector@PskCueCc9pSxfnSzfdX-u.md new file mode 100644 index 000000000..b25d8962d --- /dev/null +++ b/src/data/roadmaps/rust/content/vector@PskCueCc9pSxfnSzfdX-u.md @@ -0,0 +1,11 @@ +# Vector + +`Vec` is Rust's growable, heap-allocated array that stores elements of the same type contiguously. Unlike arrays, vectors can resize at runtime. Key methods include `push()` to add elements, `pop()` to remove the last element, and `len()` for size. Example: `let mut v = vec![1, 2, 3];` + +Learn more from the following links: + +- [@official@Vec in std::vec - Rust](https://doc.rust-lang.org/std/vec/struct.Vec.html) +- [@article@Storing Lists of Values with Vectors](https://doc.rust-lang.org/book/ch08-01-vectors.html?highlight=vector#storing-lists-of-values-with-vectors) +- [@article@Rust Vector (With Examples)](https://www.programiz.com/rust/vector) +- [@video@Rust: Vectors](https://www.youtube.com/watch?v=nOKOFYzvvHo&t=97s&pp=ygUMcnVzdCB2ZWN0b3Jz) +- [@video@Common Collections in Rust](https://www.youtube.com/watch?v=Zs-pS-egQSs&t=39s&pp=ygUMcnVzdCB2ZWN0b3Jz) diff --git a/src/data/roadmaps/rust/content/wasm/wasm-bindgen.md b/src/data/roadmaps/rust/content/wasm-bindgen@SUtBBqqDeR_yAkr669ZvE.md similarity index 100% rename from src/data/roadmaps/rust/content/wasm/wasm-bindgen.md rename to src/data/roadmaps/rust/content/wasm-bindgen@SUtBBqqDeR_yAkr669ZvE.md diff --git a/src/data/roadmaps/rust/content/wasm/wasm-pack.md b/src/data/roadmaps/rust/content/wasm-pack@TSlj7mMUB5CDTy8uMFzKV.md similarity index 100% rename from src/data/roadmaps/rust/content/wasm/wasm-pack.md rename to src/data/roadmaps/rust/content/wasm-pack@TSlj7mMUB5CDTy8uMFzKV.md diff --git a/src/data/roadmaps/rust/content/wasm/index.md b/src/data/roadmaps/rust/content/wasm/index.md deleted file mode 100644 index 49c2a3b54..000000000 --- a/src/data/roadmaps/rust/content/wasm/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# WebAssembly (WASM) - -"Wasm" or WebAssembly is an open standard binary instruction format. It serves as a compact binary format that aims to execute at near-native speed, providing a performance-efficient compilation target for low-level languages like C, C++, and Rust. Wasm was initially developed for efficient execution in web browsers but is designed to be used in other environments as well. WebAssembly aims to maintain a safe, secure, and platform-independent runtime to perform high-performance applications on the web or on other platforms. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/wasm/wasmer.md b/src/data/roadmaps/rust/content/wasmer@iyFHvZj_ntr_dX6WlL4E1.md similarity index 100% rename from src/data/roadmaps/rust/content/wasm/wasmer.md rename to src/data/roadmaps/rust/content/wasmer@iyFHvZj_ntr_dX6WlL4E1.md diff --git a/src/data/roadmaps/rust/content/web-development/actix.md b/src/data/roadmaps/rust/content/web-development/actix.md deleted file mode 100644 index 6d963c6be..000000000 --- a/src/data/roadmaps/rust/content/web-development/actix.md +++ /dev/null @@ -1,7 +0,0 @@ -# Actix - -Actix is a powerful, pragmatic, and extremely fast web framework for Rust. It is based on Actix actor's framework, built around a small and simple API focused on making the creation of web applications straightforward and efficient. Its capable middleware system allows for highly customizable processing of web requests, making it versatile for a wide range of web development tasks. With support for WebSockets and server-sent events included, integration of real-time communication is quite seamless in Actix. Despite its high-level abstractions and ease of use, Actix does not compromise on performance, delivering some of the fastest processing times among Rust web frameworks. - -Visit the following resources to learn more: - -- [@official@Actix](https://actix.rs/) diff --git a/src/data/roadmaps/rust/content/web-development/axum.md b/src/data/roadmaps/rust/content/web-development/axum.md deleted file mode 100644 index 7f9cee400..000000000 --- a/src/data/roadmaps/rust/content/web-development/axum.md +++ /dev/null @@ -1,7 +0,0 @@ -# Axum - -Axum is a web framework for building fast and efficient web services in Rust. It is designed to provide a robust and ergonomic way to create HTTP-based services by leveraging Rust's safety features and performance capabilities. Axum is built on top of the hyper library, which is a fast HTTP implementation, and integrates seamlessly with the Tokio runtime for asynchronous programming. Axum is well-suited for developers who want to build high-performance web applications in Rust, with a focus on safety, concurrency, and scalability. - -Visit the following resources to learn more: - -[@official@Axum Documentation](https://docs.rs/axum/latest/axum/) diff --git a/src/data/roadmaps/rust/content/web-development/index.md b/src/data/roadmaps/rust/content/web-development/index.md deleted file mode 100644 index 928a26c0c..000000000 --- a/src/data/roadmaps/rust/content/web-development/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Web Development - -Web Development in Rust is a growing field, given the programming language's emphasis on safety and performance. In Rust, web development may involve using frameworks like Rocket, Poem, Actix or Tide to build web applications. There are also powerful web servers like Hyper that are built in Rust. Building web applications in Rust can involve facilitating client-server communication, handling HTTP requests, building routing systems, and managing databases among the other general tasks associated with web development. The Rust ecosystem provides tools to manage all these tasks and more. diff --git a/src/data/roadmaps/rust/content/web-development/leptos.md b/src/data/roadmaps/rust/content/web-development/leptos.md deleted file mode 100644 index 3dc68ccee..000000000 --- a/src/data/roadmaps/rust/content/web-development/leptos.md +++ /dev/null @@ -1,10 +0,0 @@ -# Leptos - -Leptos is a full-stack, isomorphic Rust web framework leveraging fine-grained reactivity to build declarative user interfaces. - -Learn more from the following resources: - -- [@official@Website](https://leptos.dev/) -- [@official@Leptos Documentation](https://book.leptos.dev/) -- [@opensource@Leptos](https://github.com/leptos-rs/leptos) -- [@video@YouTube](https://www.youtube.com/watch?v=aQOFJQ2JkvQ&list=PLg4xWRFolJIo0lZawIlEaYr180e1w-ZUH) diff --git a/src/data/roadmaps/rust/content/web-development/poem.md b/src/data/roadmaps/rust/content/web-development/poem.md deleted file mode 100644 index 898bc3e57..000000000 --- a/src/data/roadmaps/rust/content/web-development/poem.md +++ /dev/null @@ -1,11 +0,0 @@ -# Poem - -Poem is a backend web application framework for Rust. - -It supports OpenAPIv3-compliant back-end Application Programming Interfaces (APIs) which make it easy to create APIs and document them automatically with SwaggerUI. - -Learn more from the following resources: - -- [@official@Swagger API](https://github.com/swagger-api/swagger-ui) -- [@official@Poem](https://docs.rs/poem/latest/poem/) -- [@opensource@Poem](https://github.com/poem-web/poem) diff --git a/src/data/roadmaps/rust/content/web-development/rocket.md b/src/data/roadmaps/rust/content/web-development/rocket.md deleted file mode 100644 index 55fd10ff4..000000000 --- a/src/data/roadmaps/rust/content/web-development/rocket.md +++ /dev/null @@ -1,7 +0,0 @@ -# Rocket - -"Rocket" is a web framework for the Rust programming language that makes it simple to write fast, secure web applications without sacrificing flexibility, usability, or type safety. It provides a significant amount of functionality out-of-the-box, such as request routing, template rendering, form validation, and more. Rocket's philosophy revolves around usability and intuitiveness; it emphasizes clear and expressive syntax, detailed error messages, and powerful abstractions. Despite these aids, Rocket doesn't shield you from the complexities of web programming, but instead offers tools and interfaces to make these complexities manageable. - -Visit the following resources to learn more: - -- [@official@Rocket](https://rocket.rs/) diff --git a/src/data/roadmaps/rust/content/web-development/warp.md b/src/data/roadmaps/rust/content/web-development/warp.md deleted file mode 100644 index a4142623a..000000000 --- a/src/data/roadmaps/rust/content/web-development/warp.md +++ /dev/null @@ -1,7 +0,0 @@ -# Warp - -Warp is a web server framework for Rust that focuses on composability and safety. It's built on top of `hyper`, a low-level HTTP library, but Warp adds a user-friendly layer on top of that, allowing developers to build custom routing logic with ease. Warp's primary concept is the "Filter", which can be combined and nested to create complex HTTP servers. Despite this abstraction, it manages to maintain a high level of performance thanks to Rust's zero-cost abstractions. Another feature of Warp is its capability to handle websockets, streaming bodies, and multipart forms. - -Visit the following resources to learn more: - -- [@article@Docs.rs: Warp](https://docs.rs/warp/latest/warp/) diff --git a/src/data/roadmaps/rust/content/web-development/yew.md b/src/data/roadmaps/rust/content/web-development/yew.md deleted file mode 100644 index 909bdddba..000000000 --- a/src/data/roadmaps/rust/content/web-development/yew.md +++ /dev/null @@ -1,7 +0,0 @@ -# Yew - -"Yew" is a modern Rust framework for creating multi-threaded front-end web apps with WebAssembly. It features a component-based framework similar to React and Elm, and supports JavaScript interoperability, allowing the execution of JS code from Rust and vice versa. Yew is able to tap into Rust's powerful ecosystem, providing high-speed rendering and packing a punch when it comes to building rich, high-performing user experiences on the web. - -Visit the following resources to learn more: - -- [@official@Yew](https://yew.rs/) diff --git a/src/data/roadmaps/rust/content/web-development@KomYBYxj0FTrJDYB3nU5B.md b/src/data/roadmaps/rust/content/web-development@KomYBYxj0FTrJDYB3nU5B.md new file mode 100644 index 000000000..33a2c4d1e --- /dev/null +++ b/src/data/roadmaps/rust/content/web-development@KomYBYxj0FTrJDYB3nU5B.md @@ -0,0 +1,3 @@ +# Web Development + +Rust offers excellent web development capabilities with frameworks like Actix, Rocket, Axum, and Warp. These provide HTTP handling, routing, middleware, and database integration. Rust's performance and safety make it ideal for high-performance web services, APIs, and microservices. diff --git a/src/data/roadmaps/rust/content/webassembly-wasm@fusu4ZHH4-cjoouLr4F9U.md b/src/data/roadmaps/rust/content/webassembly-wasm@fusu4ZHH4-cjoouLr4F9U.md new file mode 100644 index 000000000..3c9a75112 --- /dev/null +++ b/src/data/roadmaps/rust/content/webassembly-wasm@fusu4ZHH4-cjoouLr4F9U.md @@ -0,0 +1,3 @@ +# WebAssembly (WASM) + +WebAssembly is a binary instruction format that runs at near-native speed in web browsers and other environments. Rust compiles excellently to WASM with tools like `wasm-pack` and `wasm-bindgen`, enabling high-performance web applications and cross-platform deployment. \ No newline at end of file diff --git a/src/data/roadmaps/rust/content/game-dev/wgpu-rs.md b/src/data/roadmaps/rust/content/wgpu-rs@6wGShK9WEnXiby_Jm8sTO.md similarity index 100% rename from src/data/roadmaps/rust/content/game-dev/wgpu-rs.md rename to src/data/roadmaps/rust/content/wgpu-rs@6wGShK9WEnXiby_Jm8sTO.md diff --git a/src/data/roadmaps/rust/content/introduction/what-is-rust.md b/src/data/roadmaps/rust/content/what-is-rust@cMfsRtvzvDZZJ0TqeUOxm.md similarity index 100% rename from src/data/roadmaps/rust/content/introduction/what-is-rust.md rename to src/data/roadmaps/rust/content/what-is-rust@cMfsRtvzvDZZJ0TqeUOxm.md diff --git a/src/data/roadmaps/rust/content/introduction/why-rust.md b/src/data/roadmaps/rust/content/why-use-rust@VhSEH_RoWFt1z2lial7xZ.md similarity index 100% rename from src/data/roadmaps/rust/content/introduction/why-rust.md rename to src/data/roadmaps/rust/content/why-use-rust@VhSEH_RoWFt1z2lial7xZ.md diff --git a/src/data/roadmaps/rust/migration-mapping.json b/src/data/roadmaps/rust/migration-mapping.json new file mode 100644 index 000000000..41ef2a06e --- /dev/null +++ b/src/data/roadmaps/rust/migration-mapping.json @@ -0,0 +1,120 @@ +{ + "introduction": "4U-HZQGH7kaWCB94Xy8Mh", + "introduction:what-is-rust": "cMfsRtvzvDZZJ0TqeUOxm", + "introduction:why-rust": "VhSEH_RoWFt1z2lial7xZ", + "introduction:installing-rust": "-IqA02ObYvXPW1ot6t_b9", + "introduction:ides-and-rust": "oyP1ZyOgDC4nYEQXHwdVQ", + "introduction:rust-repl": "eYCNYtwXBjZwcPUe7QYZ-", + "language-basics": "6E4pGifNfSAq6SbzfzFNT", + "language-basics:syntax:pattern-matching": "yqp3UePmSlGyOYpxITis4", + "language-basics:syntax:functions": "5hKJaMKpeFEUi3S1Hpiyk", + "language-basics:syntax:control-flow": "u2wlnmE1uLaTqWw35UF0a", + "language-basics:syntax:variables": "Gw5E21W5zis-RUIgNSEV2", + "language-basics:constructs:enums": "FswpjWqqt8-BzUTsDDjel", + "language-basics:constructs:structs": "Mi9mQ-8gyDPd8Mbu1zuHt", + "language-basics:constructs:traits": "SJMuIEuHp8X6nfLb0k0TU", + "language-basics:constructs:impl-blocks": "HzWHDQZjA9OgVZEWrmhKf", + "language-basics:data-structures:integers": "FHZSxSiOZYNBEz6tu8wuF", + "language-basics:data-structures:floats": "rNHHp1GgmRnKIYlZayi59", + "language-basics:data-structures:boolean": "bjwJCGMx5ZfrH7vz3eLS7", + "language-basics:data-structures:character": "dXMJb2wDmmh2jie1AnPoK", + "language-basics:data-structures:tuple": "81_J7CwtUUjYPvKV_prg3", + "language-basics:data-structures:array": "2DbdHCjFzGHwCUETakaGh", + "language-basics:data-structures:vector": "PskCueCc9pSxfnSzfdX-u", + "language-basics:data-structures:string": "Hu1jf46OpX44nam_UvYqc", + "language-basics:data-structures:hashmap": "JAgjrf5WDXiorZ6gFRzTc", + "language-basics:data-structures:hashset": "b1iYy4Hvkj47Q13V2HE4i", + "language-basics:data-structures:linked-list": "iR0ewc2yURqS7bfMWfoBi", + "language-basics:data-structures:binary-heap": "jdndHBzmdgI6uYql6bO4W", + "language-basics:data-structures:stack": "B-S1hE-ofNTutnkc2hJBf", + "language-basics:data-structures:queue": "fq2NMV-QV9ayJl82ZWzov", + "language-basics:data-structures:btree-map": "LWgaZWTJVWLDes3HzflRh", + "language-basics:data-structures:btree-set": "FsyLYRQP_rs4qL7IAj9Mo", + "language-basics:data-structures:rc": "U9Bd-GO0QwYVLvESR4PTb", + "language-basics:data-structures:arc": "yYmV5qkldu0FkDhOhWOXs", + "language-basics:data-structures:mutex": "GbbeV3r27IBEKHyiyLqs6", + "language-basics:data-structures:rwlock": "WzGl4DkANjUu7VC1AIWI-", + "language-basics:data-structures:channels": "3nXJg5Y4SUug_dEAj0eQm", + "language-basics:ownership:rules": "2UQ3AuGkDbT0-54l0rOGM", + "language-basics:ownership:borrowing": "-onH5vPffdcZFjjVcnEpk", + "language-basics:ownership:stack-heap": "UdXq0H8599cDTKXaIlPqt", + "error-handling": "X2gB0m-ZKSC4TJyIcwsMx", + "error-handling:option": "wQHkBydWsiGEOZMdKmz40", + "error-handling:propagating": "pTC1ucmErVnMbNFnYLJK7", + "error-handling:custom-error": "LwqOxYY9E9MUDgz2M40uV", + "modules-and-crates": "Zpowr_NGd-E2DC3g-oW9h", + "modules-and-crates:code-organization": "c_SdccEXEJyh4ymWzvCeX", + "modules-and-crates:dependency-mgmt": "PkePVzV-b1pgFJP5xID5_", + "modules-and-crates:publishing": "Op0-bdMV3kE9Be6Ot1aC6", + "concurrency-parallelism": "pehYc_xLrs6BFUbcpPTiJ", + "concurrency-parallelism:threads": "pJN260pWQVO0gHxi1-_3U", + "concurrency-parallelism:atomic-operations": "n1Epl_nBuoXW2OE0IKYVR", + "concurrency-parallelism:futures": "kVfBbsOHoixvqb4dYTG3Q", + "traits-generics": "zLKbYX0nnbfD5n3P_JRaS", + "traits-generics:trait-def": "_EicstELZcdesHiXFWJGu", + "traits-generics:trait-bounds": "pRDgDtRIVpNM2CdhSOS3Q", + "traits-generics:advanced-generics": "_hxwo_iAdOwlWBltv7i6i", + "lifetimes-borrow": "UZ56NKloehcxUFNuSeO19", + "lifetimes-borrow:explicit-lifetime": "R5HIVS-lyCp9b46aXqx2m", + "lifetimes-borrow:lifetime-elision": "qJI8GObmsxyc_tTtUEOAd", + "lifetimes-borrow:covariant": "7yVvMnvCvLbFa51pESx0j", + "macros": "eTpZXd8E2jVBmk_aSLZYV", + "macros:declarative": "AXWXXsww7Xkl3BYgtThNe", + "macros:procedural": "bkVM1OIbv4XUpY6FQb8x_", + "macros:domain-specific": "Kb7KF7JCMaWFz-GuaQmQV", + "web-development": "KomYBYxj0FTrJDYB3nU5B", + "web-development:rocket": "ApjwY_70OGG_dNIC85oBD", + "web-development:axum": "duQ1RO1lqq793mfb5w31P", + "web-development:actix": "3Y90v2ysoMcyjDL24H7mC", + "async-programming": "yu0f5gALho0e8wzV10yow", + "async-programming:tokio": "H0mctp3Bj2OYfIGFDWGfz", + "async-programming:async-std": "_2uQInXPdOY-DpYTO1Prt", + "async-programming:smol": "3C9gCBAq3OQVb583S72D4", + "networking": "3pL0ARqk8uRNimopHSalW", + "networking:reqwest": "TtajUXZpyNx9AmdUawm-8", + "networking:hyper": "-MiN5ytI43EjgmWV55BhU", + "networking:quinn": "qi1pmsY8bPk8nbHiBIGha", + "serialization": "gcmKSLWfBqx4aPZOmyQsg", + "serialization:serde": "EHErECEYws05oi59OsZpC", + "serialization:json-rust": "ZXMKY0f7mqqlsvyH9u-LM", + "database-orm": "_n7emeqzf5UTxVB5-385G", + "database-orm:diesel": "UAXpBK3lfnq0Q4RcBehZ1", + "database-orm:sqlx": "r2KembNZ2WIzLe87EB91K", + "database-orm:rusqlite": "a2MLN7f-FvsgdmvP9ixlv", + "cryptography": "Rv_Z-rbtELPZ1Nv0PZQmV", + "cryptography:ring": "w8nxQDxmfoUHkFV66TKiq", + "cryptography:rust-crypto": "f68x7r-qzaQfrzXnjOI2q", + "cryptography:sodiumoxide": "hzzRFb5cyXkgUdLZxaozB", + "cli-utils": "2Zyyf9q_CxmOW-z2pipL8", + "cli-utils:clap": "AId80IokM7NvGBVutmuGC", + "cli-utils:structopt": "_43912wPdXgLL8v-IMHX_", + "cli-utils:termion": "YS0igALDqSanGDWva_vls", + "game-dev": "uG-EmZVZ-jc3mswOT4-7l", + "game-dev:bevy": "uyrGki0jB7DXQ0HJe2-vY", + "game-dev:fyrox": "x9bmK_cLYpX0ebwjZUn4R", + "game-dev:ggez": "qquYnrrzUlyd8738jzj1D", + "game-dev:macroquad": "EtKhe3lgK3NoiBOjXRb2O", + "game-dev:wgpu-rs": "6wGShK9WEnXiby_Jm8sTO", + "gui-dev": "T1LlJz5m5wnwBvKAEuGnP", + "gui-dev:tauri": "Q71MnFDQBkZF1c2hj13pU", + "gui-dev:gtk-rs": "2Zp3m3Y7j6R1hK3DIVdkH", + "gui-dev:relm": "QbdGnUoTLgMHO1NCQINIi", + "embedded": "RKXljexmLAceMYwg4D_uP", + "embedded:embedded-hal": "LzaO2cpDajXERqEYDjMl_", + "embedded:rppal": "L01rVq2_H4rWzlKygW5kA", + "embedded:nrf-hal": "ETYrk0s5Wn80XyntNG_t1", + "wasm": "fusu4ZHH4-cjoouLr4F9U", + "wasm:wasm-bindgen": "SUtBBqqDeR_yAkr669ZvE", + "wasm:wasm-pack": "TSlj7mMUB5CDTy8uMFzKV", + "wasm:wasmer": "iyFHvZj_ntr_dX6WlL4E1", + "testing": "08qKtgnhJ3tlb5JKfTDf5", + "testing:unit-integration": "w9coeW9-crDxu0KC-9gEU", + "testing:mocking": "HEqfA6An6ZeT3z4R610en", + "debugging": "7YKWYxogJq6X35IAUwcZF", + "debugging:rust-gdb": "UkHXsAolmbk-MsJFfqObC", + "debugging:rust-lldb": "p1w1iljGABgHoJjIRJYLY", + "rustdoc": "65nbahPj9qAb9y8dF8Jnd", + "perf-profiling": "WduD9VIcYSs_JTnuMNyxk", + "perf-profiling:criterion-rs": "clQ26LFV_9AdQ4evnaxUK", + "serialization:toml-rs": "LmFog_qXrS9e5ARhV6OD_" +} diff --git a/src/data/roadmaps/rust/rust.json b/src/data/roadmaps/rust/rust.json index c34a14eca..4aa70ad9a 100644 --- a/src/data/roadmaps/rust/rust.json +++ b/src/data/roadmaps/rust/rust.json @@ -1,8939 +1,7011 @@ { - "mockup": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "84", - "measuredW": "67", - "measuredH": "40", - "x": "776", - "y": "324", - "properties": { - "size": "32", - "text": "Rust" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "85", - "measuredW": "373", - "measuredH": "151", - "w": "373", - "h": "151", - "x": "1069", - "y": "216", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "373", - "h": "151", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "333", - "measuredH": "26", - "x": "18", - "y": "19", - "properties": { - "text": "Find the detailed version of this roadmap", - "size": "18" - } - }, - { - "ID": "3", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "339", - "measuredH": "47", - "w": "339", - "h": "47", - "x": "18", - "y": "88", - "properties": { - "controlName": "ext_link:roadmap.sh" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "339", - "h": "47", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0", - "properties": { - "borderColor": "4273622", - "color": "4273622" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "26", - "x": "92", - "y": "11", - "properties": { - "color": "16777215", - "text": "https://roadmap.sh", - "size": "18" - } - } - ] - } - } - }, - { - "ID": "5", - "typeID": "Label", - "zOrder": "3", - "measuredW": "337", - "measuredH": "26", - "x": "18", - "y": "48", - "properties": { - "size": "18", - "text": "Along with resources and more roadmaps" - } - } - ] - } - } - }, - { - "ID": "2", - "typeID": "Arrow", - "zOrder": "86", - "w": "1", - "h": "74", - "measuredW": "150", - "measuredH": "100", - "x": "805", - "y": "233", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549725, - "y": -0.00008403832147459165 - }, - "p2": { - "x": 0, - "y": 74.15918378573792 - }, - "stroke": "dotted" - } - }, - { - "ID": "3", - "typeID": "Arrow", - "zOrder": "87", - "w": "1", - "h": "164", - "measuredW": "150", - "measuredH": "100", - "x": "805", - "y": "385", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459165 - }, - "p2": { - "x": 0, - "y": 164.11821056548797 - } - } - }, - { - "ID": "5", - "typeID": "Arrow", - "zOrder": "88", - "w": "101", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "754", - "y": "169", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "16777215", - "p0": { - "x": 100.57841492806233, - "y": 0.15918378573792324 - }, - "p1": { - "x": 0.4438624012549726, - "y": -0.00008403832147459165 - }, - "p2": { - "x": 0, - "y": 0.15918378573792324 - } - } - }, - { - "ID": "17", - "typeID": "Arrow", - "zOrder": "83", - "w": "197", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "893", - "y": "551", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 197, - "y": 0.15918378573792324 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459165 - }, - "p2": { - "x": 0.33333333333337123, - "y": 0.15918378573792324 - } - } - }, - { - "ID": "18", - "typeID": "Arrow", - "zOrder": "82", - "w": "179", - "h": "41", - "measuredW": "150", - "measuredH": "100", - "x": "893", - "y": "494", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 178.33333333333326, - "y": 0 - }, - "p1": { - "x": 0.432199336489445, - "y": 0.06731985877495898 - }, - "p2": { - "x": -0.33333333333337123, - "y": 41.33333333333337 - } - } - }, - { - "ID": "23", - "typeID": "Arrow", - "zOrder": "81", - "w": "197", - "h": "44", - "measuredW": "150", - "measuredH": "100", - "x": "877", - "y": "562", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 197, - "y": 44 - }, - "p1": { - "x": 0.385595616057061, - "y": -0.06267124777106091 - }, - "p2": { - "x": -0.33333333333337123, - "y": 0 - } - } - }, - { - "ID": "26", - "typeID": "Arrow", - "zOrder": "80", - "w": "240", - "h": "207", - "measuredW": "150", - "measuredH": "100", - "x": "490", - "y": "546", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.32905999288510657, - "y": 206.95337847572125 - }, - "p1": { - "x": 0.45941041169891733, - "y": 0.25917406993184083 - }, - "p2": { - "x": 240.40115168079626, - "y": 0.3458813867310937 - } - } - }, - { - "ID": "35", - "typeID": "Arrow", - "zOrder": "79", - "w": "1", - "h": "224", - "measuredW": "150", - "measuredH": "100", - "x": "383", - "y": "659", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 223.44680974980668 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459861 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "318", - "typeID": "TextArea", - "zOrder": "92", - "w": "370", - "h": "189", - "measuredW": "200", - "measuredH": "140", - "x": "1063", - "y": "584" - }, - { - "ID": "334", - "typeID": "Label", - "zOrder": "95", - "measuredW": "146", - "measuredH": "25", - "x": "1183", - "y": "597", - "properties": { - "size": "17", - "text": "Environment Setup" - } - }, - { - "ID": "371", - "typeID": "TextArea", - "zOrder": "112", - "w": "353", - "h": "130", - "measuredW": "200", - "measuredH": "140", - "x": "616", - "y": "1010" - }, - { - "ID": "372", - "typeID": "Label", - "zOrder": "113", - "measuredW": "76", - "measuredH": "25", - "x": "634", - "y": "1026", - "properties": { - "size": "17", - "text": "Advanced" - } - }, - { - "ID": "414", - "typeID": "Arrow", - "zOrder": "74", - "w": "132", - "h": "24", - "measuredW": "150", - "measuredH": "100", - "x": "494", - "y": "739", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.24895255476468492, - "y": 23.446809749806675 - }, - "p1": { - "x": 0.5575040182177255, - "y": -0.06911872824527829 - }, - "p2": { - "x": 132.53323103265757, - "y": 0.19291874734653902 - } - } - }, - { - "ID": "426", - "typeID": "Arrow", - "zOrder": "73", - "w": "121", - "h": "22", - "measuredW": "150", - "measuredH": "100", - "x": "504", - "y": "780", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.24895255476468492, - "y": 0.4468097498066754 - }, - "p1": { - "x": 0.4947817519115979, - "y": 0.0539510853409226 - }, - "p2": { - "x": 121.07955764279063, - "y": 21.70087451162567 - } - } - }, - { - "ID": "427", - "typeID": "Arrow", - "zOrder": "72", - "w": "1", - "h": "345", - "measuredW": "150", - "measuredH": "100", - "x": "492", - "y": "788", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459159 - }, - "p2": { - "x": 0, - "y": 345.13840740129126 - } - } - }, - { - "ID": "436", - "typeID": "Arrow", - "zOrder": "71", - "w": "1", - "h": "111", - "measuredW": "150", - "measuredH": "100", - "x": "382", - "y": "1137", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 110.97860520078075 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459834 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "437", - "typeID": "Arrow", - "zOrder": "70", - "w": "197", - "h": "163", - "measuredW": "150", - "measuredH": "100", - "x": "494", - "y": "1152", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": -0.4778841401688396, - "y": 0.03616146956164812 - }, - "p1": { - "x": 0.4871417361689739, - "y": -0.2098902254544283 - }, - "p2": { - "x": 196.49486018680352, - "y": 162.8475811346607 - } - } - }, - { - "ID": "446", - "typeID": "Arrow", - "zOrder": "69", - "w": "1", - "h": "111", - "measuredW": "150", - "measuredH": "100", - "x": "796", - "y": "1317", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 110.97860520078075 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459834 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "456", - "typeID": "Arrow", - "zOrder": "68", - "w": "1", - "h": "111", - "measuredW": "150", - "measuredH": "100", - "x": "1189", - "y": "983", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 110.97860520078075 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459834 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "458", - "typeID": "Arrow", - "zOrder": "67", - "w": "249", - "h": "219", - "measuredW": "150", - "measuredH": "100", - "x": "905", - "y": "1094", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 249.32162480478883, - "y": -0.315385594950385 - }, - "p1": { - "x": 0.476956488587886, - "y": 0.24646723290179923 - }, - "p2": { - "x": 0, - "y": 218.13840740129126 - } - } - }, - { - "ID": "460", - "typeID": "Arrow", - "zOrder": "66", - "w": "1", - "h": "485", - "measuredW": "150", - "measuredH": "100", - "x": "1189", - "y": "1100", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459157 - }, - "p2": { - "x": 0, - "y": 484.6965034956197 - } - } - }, - { - "ID": "469", - "typeID": "Arrow", - "zOrder": "65", - "w": "1", - "h": "111", - "measuredW": "150", - "measuredH": "100", - "x": "1189", - "y": "1585", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 110.97860520078075 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459834 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "470", - "typeID": "Arrow", - "zOrder": "64", - "w": "492", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "675", - "y": "1592", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.08040012395417762, - "y": 0 - }, - "p1": { - "x": 0.5, - "y": 0 - }, - "p2": { - "x": 492, - "y": 0 - } - } - }, - { - "ID": "479", - "typeID": "Arrow", - "zOrder": "63", - "w": "1", - "h": "106", - "measuredW": "150", - "measuredH": "100", - "x": "795", - "y": "1596", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.211151520721387, - "y": 105.8446807219259 - }, - "p1": { - "x": 0.4438624012549726, - "y": -0.00008403832147459821 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "489", - "typeID": "Arrow", - "zOrder": "62", - "w": "213", - "h": "107", - "measuredW": "150", - "measuredH": "100", - "x": "486", - "y": "1590", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.17425353750144268, - "y": 107.48097641238269 - }, - "p1": { - "x": 0.37043013046626244, - "y": 0.2220567186365373 - }, - "p2": { - "x": 213, - "y": 2 - } - } - }, - { - "ID": "490", - "typeID": "Arrow", - "zOrder": "61", - "w": "1", - "h": "135", - "measuredW": "150", - "measuredH": "100", - "x": "380", - "y": "1557", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 134.6627039996581 - }, - "p1": { - "x": 0.4438624012549726, - "y": -0.00008403832147459805 - }, - "p2": { - "x": -0.21115152072133014, - "y": -0.1510751141287301 - } - } - }, - { - "ID": "491", - "typeID": "Arrow", - "zOrder": "60", - "w": "1", - "h": "283", - "measuredW": "150", - "measuredH": "100", - "x": "490", - "y": "1711", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459159 - }, - "p2": { - "x": 0, - "y": 282.91031929587234 - } - } - }, - { - "ID": "492", - "typeID": "Arrow", - "zOrder": "157", - "w": "349", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "150", - "y": "1806", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 349.10198439749036, - "y": 0.16578208707346676 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147455506 - }, - "p2": { - "x": 0.3604503075575849, - "y": 0.16578208707346676 - } - } - }, - { - "ID": "493", - "typeID": "Arrow", - "zOrder": "158", - "w": "29", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "470", - "y": "1810", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 29.101984397490355, - "y": 0.16578208707346676 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147455411 - }, - "p2": { - "x": -0.13539456394892113, - "y": 0.16578208707346676 - } - } - }, - { - "ID": "494", - "typeID": "Arrow", - "zOrder": "159", - "w": "29", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "470", - "y": "1813", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 29.101984397490355, - "y": 0.16578208707346676 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147455411 - }, - "p2": { - "x": -0.13539456394892113, - "y": 0.16578208707346676 - } - } - }, - { - "ID": "495", - "typeID": "Label", - "zOrder": "160", - "measuredW": "223", - "measuredH": "28", - "x": "219", - "y": "1819", - "properties": { - "size": "20", - "text": "Ecosystem and Libraries" - } - }, - { - "ID": "506", - "typeID": "Arrow", - "zOrder": "59", - "w": "142", - "h": "37", - "measuredW": "150", - "measuredH": "100", - "x": "216", - "y": "1947", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 141.92324584081643, - "y": 35.10160448561237 - }, - "p1": { - "x": 0.4888238423607003, - "y": 0.09385637554562963 - }, - "p2": { - "x": 0, - "y": 0 - } - } - }, - { - "ID": "507", - "typeID": "Arrow", - "zOrder": "58", - "w": "142", - "h": "2", - "measuredW": "150", - "measuredH": "100", - "x": "212", - "y": "1999", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 142, - "y": 0 - }, - "p1": { - "x": 0.43673145577151923, - "y": 0.007933359777865925 - }, - "p2": { - "x": 0, - "y": 2 - } - } - }, - { - "ID": "508", - "typeID": "Arrow", - "zOrder": "57", - "w": "133", - "h": "50", - "measuredW": "150", - "measuredH": "100", - "x": "220", - "y": "2013", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 133.02018767861347, - "y": 0.1543061795646281 - }, - "p1": { - "x": 0.48580984496508817, - "y": -0.061152098125993315 - }, - "p2": { - "x": 0, - "y": 50 - } - } - }, - { - "ID": "509", - "typeID": "Arrow", - "zOrder": "56", - "w": "142", - "h": "101", - "measuredW": "150", - "measuredH": "100", - "x": "216", - "y": "2020", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 141.92324584081643, - "y": -0.30828293749846125 - }, - "p1": { - "x": 0.563637896635444, - "y": -0.1131258384491665 - }, - "p2": { - "x": 0, - "y": 101 - } - } - }, - { - "ID": "510", - "typeID": "Arrow", - "zOrder": "55", - "w": "581", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "507", - "y": "1999", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 580.6617356486911, - "y": -0.09227918998158202 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459161 - }, - "p2": { - "x": 0, - "y": -0.09227918998158202 - } - } - }, - { - "ID": "525", - "typeID": "Arrow", - "zOrder": "54", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "675", - "y": "1909", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "526", - "typeID": "Arrow", - "zOrder": "53", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "783", - "y": "1909", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "527", - "typeID": "Arrow", - "zOrder": "52", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "877", - "y": "1909", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "536", - "typeID": "Arrow", - "zOrder": "50", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1157", - "y": "1909", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "537", - "typeID": "Arrow", - "zOrder": "51", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1062", - "y": "1913", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "538", - "typeID": "Arrow", - "zOrder": "49", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1247", - "y": "1906", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "539", - "typeID": "Arrow", - "zOrder": "48", - "w": "128", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1259", - "y": "1999", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.08040012395417762, - "y": 0 - }, - "p1": { - "x": 0.5, - "y": 0 - }, - "p2": { - "x": 127.74828354307192, - "y": 0 - } - } - }, - { - "ID": "542", - "typeID": "Arrow", - "zOrder": "175", - "w": "1", - "h": "172", - "measuredW": "150", - "measuredH": "100", - "x": "1386", - "y": "1999", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.08040012395417762, - "y": 0 - }, - "p1": { - "x": 0.4999999999999999, - "y": 0 - }, - "p2": { - "x": -0.08040012395417762, - "y": 172.23758949554622 - } - } - }, - { - "ID": "543", - "typeID": "Arrow", - "zOrder": "47", - "w": "903", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "484", - "y": "2173", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.2315946626408163, - "y": 0 - }, - "p1": { - "x": 0.4999999999999999, - "y": 0 - }, - "p2": { - "x": 902.7482835430719, - "y": 0 - } - } - }, - { - "ID": "550", - "typeID": "Arrow", - "zOrder": "46", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1052", - "y": "2174", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "551", - "typeID": "Arrow", - "zOrder": "44", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1145", - "y": "2172", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "552", - "typeID": "Arrow", - "zOrder": "45", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1242", - "y": "2178", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "555", - "typeID": "Arrow", - "zOrder": "38", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "776", - "y": "2172", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "556", - "typeID": "Arrow", - "zOrder": "39", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "866", - "y": "2178", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "557", - "typeID": "Arrow", - "zOrder": "40", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "686", - "y": "2174", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "572", - "typeID": "Arrow", - "zOrder": "37", - "w": "110", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "246", - "y": "2173", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.49988962694184125, - "y": 0 - }, - "p2": { - "x": 110, - "y": 0 - }, - "stroke": "dotted" - } - }, - { - "ID": "573", - "typeID": "Arrow", - "zOrder": "36", - "w": "103", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "247", - "y": "2188", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.21273916911744095, - "y": 45.34299288345028 - }, - "p1": { - "x": 0.5373835310182236, - "y": 0.09908460035431385 - }, - "p2": { - "x": 102.75148223714478, - "y": -0.41888329711082406 - } - } - }, - { - "ID": "574", - "typeID": "Arrow", - "zOrder": "35", - "w": "141", - "h": "93", - "measuredW": "150", - "measuredH": "100", - "x": "250", - "y": "2192", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": 0.0559662723511849, - "y": 93.64227994694875 - }, - "p1": { - "x": 0.4586269254089054, - "y": 0.1240568294915703 - }, - "p2": { - "x": 140.61030025550286, - "y": 0.48417486509242735 - } - } - }, - { - "ID": "575", - "typeID": "Arrow", - "zOrder": "34", - "w": "1", - "h": "283", - "measuredW": "150", - "measuredH": "100", - "x": "490", - "y": "2172", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459159 - }, - "p2": { - "x": 0, - "y": 282.91031929587234 - } - } - }, - { - "ID": "590", - "typeID": "Arrow", - "zOrder": "33", - "w": "110", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "247", - "y": "2439", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.49988962694184125, - "y": 0 - }, - "p2": { - "x": 110, - "y": 0 - }, - "stroke": "dotted" - } - }, - { - "ID": "591", - "typeID": "Arrow", - "zOrder": "32", - "w": "113", - "h": "41", - "measuredW": "150", - "measuredH": "100", - "x": "247", - "y": "2384", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.21273916911744095, - "y": -0.2965568089921362 - }, - "p1": { - "x": 0.4469574548884744, - "y": -0.10632047047599992 - }, - "p2": { - "x": 112.55759856155072, - "y": 40.56226120936617 - } - } - }, - { - "ID": "592", - "typeID": "Arrow", - "zOrder": "31", - "w": "111", - "h": "51", - "measuredW": "150", - "measuredH": "100", - "x": "247", - "y": "2452", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "stroke": "dotted", - "p0": { - "x": -0.21273916911744095, - "y": 51.011191804613645 - }, - "p1": { - "x": 0.3958302309548188, - "y": 0.10460609338599246 - }, - "p2": { - "x": 110.92324584081643, - "y": -0.01938981741614043 - } - } - }, - { - "ID": "593", - "typeID": "Arrow", - "zOrder": "30", - "w": "903", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "499", - "y": "2440", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.2315946626408163, - "y": 0 - }, - "p1": { - "x": 0.4999999999999999, - "y": 0 - }, - "p2": { - "x": 902.7482835430719, - "y": 0 - } - } - }, - { - "ID": "606", - "typeID": "Arrow", - "zOrder": "27", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "775", - "y": "2364", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "607", - "typeID": "Arrow", - "zOrder": "28", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "865", - "y": "2361", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "608", - "typeID": "Arrow", - "zOrder": "29", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "685", - "y": "2357", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "609", - "typeID": "Arrow", - "zOrder": "26", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "706", - "y": "2441", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "610", - "typeID": "Arrow", - "zOrder": "25", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "839", - "y": "2445", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "613", - "typeID": "Arrow", - "zOrder": "19", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1145", - "y": "2362", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "614", - "typeID": "Arrow", - "zOrder": "20", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1235", - "y": "2359", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "615", - "typeID": "Arrow", - "zOrder": "21", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1055", - "y": "2355", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "624", - "typeID": "Arrow", - "zOrder": "195", - "w": "1", - "h": "196", - "measuredW": "150", - "measuredH": "100", - "x": "1403", - "y": "2440", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": -0.08040012395417762, - "y": 0 - }, - "p1": { - "x": 0.49999999999999994, - "y": 0 - }, - "p2": { - "x": -0.08040012395417762, - "y": 196 - } - } - }, - { - "ID": "627", - "typeID": "Arrow", - "zOrder": "18", - "w": "560", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "841", - "y": "2636", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0.25442776906936615, - "y": 0 - }, - "p1": { - "x": 0.4999999999999999, - "y": 0 - }, - "p2": { - "x": 560.7482835430719, - "y": 0 - } - } - }, - { - "ID": "634", - "typeID": "Arrow", - "zOrder": "17", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1112", - "y": "2547", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "635", - "typeID": "Arrow", - "zOrder": "16", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1212", - "y": "2547", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "636", - "typeID": "Arrow", - "zOrder": "15", - "w": "1", - "h": "89", - "measuredW": "150", - "measuredH": "100", - "x": "1288", - "y": "2547", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": -0.21115152072133014, - "y": 88.6627039996581 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459767 - }, - "p2": { - "x": -0.211151520721387, - "y": -0.2503842718381293 - } - } - }, - { - "ID": "645", - "typeID": "Arrow", - "zOrder": "14", - "w": "149", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "498", - "y": "2640", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 149.11879059159185, - "y": -0.3372960003416665 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459798 - }, - "p2": { - "x": 0.43647605231535636, - "y": -0.3372960003416665 - } - } - }, - { - "ID": "646", - "typeID": "Arrow", - "zOrder": "13", - "w": "111", - "h": "39", - "measuredW": "150", - "measuredH": "100", - "x": "525", - "y": "2585", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 111.58429865172877, - "y": 37.58356560593711 - }, - "p1": { - "x": 0.4167802882873299, - "y": 0.08803553433262563 - }, - "p2": { - "x": 0.43647605231535636, - "y": -0.3372960003416665 - } - } - }, - { - "ID": "647", - "typeID": "Arrow", - "zOrder": "12", - "w": "110", - "h": "41", - "measuredW": "150", - "measuredH": "100", - "x": "525", - "y": "2653", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 110.07937123174827, - "y": -0.317885994453718 - }, - "p1": { - "x": 0.4256646028559527, - "y": -0.07878450113435448 - }, - "p2": { - "x": 0.43647605231535636, - "y": 40.66270399965833 - } - } - }, - { - "ID": "648", - "typeID": "Arrow", - "zOrder": "11", - "w": "1", - "h": "117", - "measuredW": "150", - "measuredH": "100", - "x": "756", - "y": "2633", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459161 - }, - "p2": { - "x": 0, - "y": 116.7794971141675 - } - } - }, - { - "ID": "657", - "typeID": "Arrow", - "zOrder": "10", - "w": "142", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "966", - "y": "2759", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.1634036274464279, - "y": 0.28442453414800184 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459793 - }, - "p2": { - "x": 142.5402181279353, - "y": -0.3372960003416665 - } - } - }, - { - "ID": "658", - "typeID": "Arrow", - "zOrder": "9", - "w": "129", - "h": "46", - "measuredW": "150", - "measuredH": "100", - "x": "963", - "y": "2773", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.15354878748553347, - "y": 1.3336987339525876 - }, - "p1": { - "x": 0.4304540139626095, - "y": 0.09558239666808163 - }, - "p2": { - "x": 129.57730690580388, - "y": 46.48152133336589 - } - } - }, - { - "ID": "659", - "typeID": "Arrow", - "zOrder": "8", - "w": "141", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "758", - "y": "2750", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0.25442776906936615, - "y": 0 - }, - "p1": { - "x": 0.4999999999999999, - "y": 0 - }, - "p2": { - "x": 141.015581028033, - "y": 0 - } - } - }, - { - "ID": "660", - "typeID": "Arrow", - "zOrder": "7", - "w": "364", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "521", - "y": "2768", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0.4573510232245326, - "y": 0 - }, - "p1": { - "x": 0.4999999999999999, - "y": 0 - }, - "p2": { - "x": 364.015581028033, - "y": 0 - } - } - }, - { - "ID": "667", - "typeID": "Arrow", - "zOrder": "6", - "w": "118", - "h": "5", - "measuredW": "150", - "measuredH": "100", - "x": "290", - "y": "2764", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 117.3564720416407, - "y": -0.200793205910486 - }, - "p1": { - "x": 0.44386240125497256, - "y": -0.00008403832147459404 - }, - "p2": { - "x": -0.4933747769709953, - "y": 4.6627039996583335 - } - } - }, - { - "ID": "668", - "typeID": "Arrow", - "zOrder": "5", - "w": "110", - "h": "42", - "measuredW": "150", - "measuredH": "100", - "x": "293", - "y": "2780", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 109.84168978169942, - "y": 0.3534084138741491 - }, - "p1": { - "x": 0.47104569195055057, - "y": -0.0920191932119486 - }, - "p2": { - "x": -0.018011876873174515, - "y": 42.4913761733269 - } - } - }, - { - "ID": "669", - "typeID": "Arrow", - "zOrder": "4", - "w": "1", - "h": "117", - "measuredW": "150", - "measuredH": "100", - "x": "462", - "y": "2772", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459161 - }, - "p2": { - "x": 0, - "y": 116.7794971141675 - } - } - }, - { - "ID": "674", - "typeID": "Arrow", - "zOrder": "3", - "w": "193", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "462", - "y": "2888", - "properties": { - "leftArrow": "false", - "rightArrow": "false", - "color": "10027263", - "p0": { - "x": 0.4573510232245326, - "y": 0 - }, - "p1": { - "x": 0.4999999999999998, - "y": 0 - }, - "p2": { - "x": 193.3019545368494, - "y": 0 - } - } - }, - { - "ID": "675", - "typeID": "Arrow", - "zOrder": "2", - "w": "142", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "856", - "y": "2939", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 0.1634036274464279, - "y": 0.28442453414800184 - }, - "p1": { - "x": 0.44386240125497245, - "y": -0.00008403832147459793 - }, - "p2": { - "x": 142.5402181279353, - "y": -0.3372960003416665 - } - } - }, - { - "ID": "679", - "typeID": "Arrow", - "zOrder": "1", - "w": "1", - "h": "117", - "measuredW": "150", - "measuredH": "100", - "x": "754", - "y": "2940", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459161 - }, - "p2": { - "x": 0, - "y": 116.7794971141675 - } - } - }, - { - "ID": "680", - "typeID": "Label", - "zOrder": "213", - "measuredW": "187", - "measuredH": "36", - "x": "669", - "y": "3075", - "properties": { - "size": "28", - "text": "Keep Learning" - } - }, - { - "ID": "681", - "typeID": "Arrow", - "zOrder": "214", - "w": "1", - "h": "84", - "measuredW": "150", - "measuredH": "100", - "x": "754", - "y": "3128", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.4438624012549724, - "y": -0.00008403832147459163 - }, - "p2": { - "x": 0, - "y": 83.7885919892492 - }, - "stroke": "dotted" - } - }, - { - "ID": "682", - "typeID": "__group__", - "zOrder": "215", - "measuredW": "423", - "measuredH": "200", - "w": "423", - "h": "200", - "x": "128", - "y": "185", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Canvas", - "zOrder": "0", - "w": "423", - "h": "200", - "measuredW": "100", - "measuredH": "70", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "189", - "measuredH": "27", - "w": "189", - "h": "27", - "x": "28", - "y": "77", - "properties": { - "controlName": "ext_link:roadmap.sh/backend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "156", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "Backend Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "2", - "typeID": "__group__", - "zOrder": "2", - "measuredW": "183", - "measuredH": "27", - "w": "183", - "h": "27", - "x": "28", - "y": "113", - "properties": { - "controlName": "ext_link:roadmap.sh/devops" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "150", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "DevOps Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "3", - "typeID": "Label", - "zOrder": "3", - "measuredW": "209", - "measuredH": "32", - "x": "28", - "y": "29", - "properties": { - "size": "24", - "text": "Related Roadmaps" - } - }, - { - "ID": "4", - "typeID": "__group__", - "zOrder": "4", - "measuredW": "141", - "measuredH": "27", - "w": "141", - "h": "27", - "x": "28", - "y": "151", - "properties": { - "controlName": "ext_link:roadmap.sh/golang" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "108", - "measuredH": "26", - "x": "33", - "y": "0", - "properties": { - "size": "18", - "text": "Go Roadmap" - } - }, - { - "ID": "1", - "typeID": "__group__", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "w": "24", - "h": "24", - "x": "0", - "y": "3", - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Icon", - "zOrder": "0", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "16777215", - "icon": { - "ID": "circle", - "size": "small" - } - } - }, - { - "ID": "1", - "typeID": "Icon", - "zOrder": "1", - "measuredW": "24", - "measuredH": "24", - "x": "0", - "y": "0", - "properties": { - "color": "10066329", - "icon": { - "ID": "check-circle", - "size": "small" - } - } - } - ] - } - } - } - ] - } - } - } - ] - } - } - }, - { - "ID": "683", - "typeID": "__group__", - "zOrder": "89", - "measuredW": "204", - "measuredH": "50", - "w": "204", - "h": "50", - "x": "703", - "y": "523", - "properties": { - "controlName": "100-introduction" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "204", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "93", - "measuredH": "25", - "x": "60", - "y": "13", - "properties": { - "size": "17", - "text": "Introduction" - } - } - ] - } - } - }, - { - "ID": "686", - "typeID": "__group__", - "zOrder": "93", - "measuredW": "243", - "measuredH": "50", - "w": "243", - "h": "50", - "x": "272", - "y": "745", - "properties": { - "controlName": "101-language-basics" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "243", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "134", - "measuredH": "25", - "x": "55", - "y": "13", - "properties": { - "size": "17", - "text": "Language Basics" - } - } - ] - } - } - }, - { - "ID": "687", - "typeID": "__group__", - "zOrder": "133", - "measuredW": "243", - "measuredH": "50", - "w": "243", - "h": "50", - "x": "272", - "y": "1114", - "properties": { - "controlName": "102-error-handling" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "243", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "113", - "measuredH": "25", - "x": "65", - "y": "13", - "properties": { - "size": "17", - "text": "Error Handling" - } - } - ] - } - } - }, - { - "ID": "688", - "typeID": "__group__", - "zOrder": "137", - "measuredW": "243", - "measuredH": "50", - "w": "243", - "h": "50", - "x": "675", - "y": "1287", - "properties": { - "controlName": "103-modules-and-crates" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "243", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "155", - "measuredH": "25", - "x": "52", - "y": "13", - "properties": { - "size": "17", - "text": "Modules and Crates" - } - } - ] - } - } - }, - { - "ID": "689", - "typeID": "__group__", - "zOrder": "141", - "measuredW": "280", - "measuredH": "50", - "w": "280", - "h": "50", - "x": "1105", - "y": "1061", - "properties": { - "controlName": "104-concurrency-parallelism" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "280", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "218", - "measuredH": "25", - "x": "31", - "y": "13", - "properties": { - "size": "17", - "text": "Concurrency and Parallelism" - } - } - ] - } - } - }, - { - "ID": "690", - "typeID": "__group__", - "zOrder": "145", - "measuredW": "280", - "measuredH": "50", - "w": "280", - "h": "50", - "x": "1145", - "y": "1566", - "properties": { - "controlName": "105-traits-generics" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "280", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "151", - "measuredH": "25", - "x": "64", - "y": "13", - "properties": { - "size": "17", - "text": "Traits and Generics" - } - } - ] - } - } - }, - { - "ID": "691", - "typeID": "__group__", - "zOrder": "149", - "measuredW": "280", - "measuredH": "50", - "w": "280", - "h": "50", - "x": "657", - "y": "1567", - "properties": { - "controlName": "106-lifetimes-borrow" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "280", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "232", - "measuredH": "25", - "x": "24", - "y": "13", - "properties": { - "size": "17", - "text": "Lifetimes and Borrow Checker" - } - } - ] - } - } - }, - { - "ID": "692", - "typeID": "__group__", - "zOrder": "153", - "measuredW": "280", - "measuredH": "50", - "w": "280", - "h": "50", - "x": "254", - "y": "1673", - "properties": { - "controlName": "107-macros" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "280", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "237", - "measuredH": "25", - "x": "21", - "y": "13", - "properties": { - "size": "17", - "text": "Macros and Metaprogramming" - } - } - ] - } - } - }, - { - "ID": "693", - "typeID": "__group__", - "zOrder": "161", - "measuredW": "196", - "measuredH": "50", - "w": "196", - "h": "50", - "x": "338", - "y": "1974", - "properties": { - "controlName": "108-web-development" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "196", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "142", - "measuredH": "25", - "x": "27", - "y": "13", - "properties": { - "size": "17", - "text": "Web Development" - } - } - ] - } - } - }, - { - "ID": "694", - "typeID": "__group__", - "zOrder": "166", - "measuredW": "281", - "measuredH": "50", - "w": "281", - "h": "50", - "x": "633", - "y": "1975", - "properties": { - "controlName": "109-async-programming" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "281", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "215", - "measuredH": "25", - "x": "33", - "y": "12", - "properties": { - "size": "17", - "text": "Asynchronous Programming" - } - } - ] - } - } - }, - { - "ID": "695", - "typeID": "__group__", - "zOrder": "170", - "measuredW": "273", - "measuredH": "50", - "w": "273", - "h": "50", - "x": "1010", - "y": "1975", - "properties": { - "controlName": "110-networking" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "87", - "measuredH": "25", - "x": "97", - "y": "12", - "properties": { - "size": "17", - "text": "Networking" - } - } - ] - } - } - }, - { - "ID": "696", - "typeID": "__group__", - "zOrder": "174", - "measuredW": "273", - "measuredH": "50", - "w": "273", - "h": "50", - "x": "1009", - "y": "2148", - "properties": { - "controlName": "111-serialization" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "216", - "measuredH": "25", - "x": "34", - "y": "12", - "properties": { - "size": "17", - "text": "Serialization/Deserialization" - } - } - ] - } - } - }, - { - "ID": "697", - "typeID": "__group__", - "zOrder": "179", - "measuredW": "273", - "measuredH": "50", - "w": "273", - "h": "50", - "x": "640", - "y": "2148", - "properties": { - "controlName": "112-database-orm" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "152", - "measuredH": "25", - "x": "61", - "y": "12", - "properties": { - "size": "17", - "text": "Database and ORM" - } - } - ] - } - } - }, - { - "ID": "698", - "typeID": "__group__", - "zOrder": "180", - "measuredW": "196", - "measuredH": "50", - "w": "196", - "h": "50", - "x": "338", - "y": "2148", - "properties": { - "controlName": "113-cryptography" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "196", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "103", - "measuredH": "25", - "x": "46", - "y": "12", - "properties": { - "size": "17", - "text": "Cryptography" - } - } - ] - } - } - }, - { - "ID": "699", - "typeID": "__group__", - "zOrder": "184", - "measuredW": "196", - "measuredH": "50", - "w": "196", - "h": "50", - "x": "338", - "y": "2415", - "properties": { - "controlName": "114-cli-utils" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "196", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "89", - "measuredH": "25", - "x": "46", - "y": "12", - "properties": { - "size": "17", - "text": "CLI Utilities" - } - } - ] - } - } - }, - { - "ID": "700", - "typeID": "__group__", - "zOrder": "188", - "measuredW": "273", - "measuredH": "50", - "w": "273", - "h": "50", - "x": "640", - "y": "2415", - "properties": { - "controlName": "115-game-dev" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "154", - "measuredH": "25", - "x": "61", - "y": "12", - "properties": { - "size": "17", - "text": "Game Development" - } - } - ] - } - } - }, - { - "ID": "701", - "typeID": "__group__", - "zOrder": "194", - "measuredW": "273", - "measuredH": "50", - "w": "273", - "h": "50", - "x": "1009", - "y": "2415", - "properties": { - "controlName": "116-gui-dev" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "273", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "138", - "measuredH": "25", - "x": "67", - "y": "12", - "properties": { - "size": "17", - "text": "GUI Development" - } - } - ] - } - } - }, - { - "ID": "702", - "typeID": "__group__", - "zOrder": "196", - "measuredW": "297", - "measuredH": "50", - "w": "297", - "h": "50", - "x": "1031", - "y": "2612", - "properties": { - "controlName": "117-embedded" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "297", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "187", - "measuredH": "25", - "x": "55", - "y": "12", - "properties": { - "size": "17", - "text": "Embedded and Systems" - } - } - ] - } - } - }, - { - "ID": "703", - "typeID": "__group__", - "zOrder": "200", - "measuredW": "297", - "measuredH": "50", - "w": "297", - "h": "50", - "x": "627", - "y": "2612", - "properties": { - "controlName": "118-wasm" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "297", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "172", - "measuredH": "25", - "x": "54", - "y": "12", - "properties": { - "size": "17", - "text": "WebAssembly (WASM)" - } - } - ] - } - } - }, - { - "ID": "704", - "typeID": "__group__", - "zOrder": "204", - "measuredW": "130", - "measuredH": "50", - "w": "130", - "h": "50", - "x": "852", - "y": "2735", - "properties": { - "controlName": "119-testing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "130", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "56", - "measuredH": "25", - "x": "37", - "y": "12", - "properties": { - "size": "17", - "text": "Testing" - } - } - ] - } - } - }, - { - "ID": "705", - "typeID": "__group__", - "zOrder": "208", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "391", - "y": "2744", - "properties": { - "controlName": "120-debugging" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "29", - "y": "12", - "properties": { - "size": "17", - "text": "Debugging" - } - } - ] - } - } - }, - { - "ID": "706", - "typeID": "__group__", - "zOrder": "211", - "measuredW": "264", - "measuredH": "50", - "w": "264", - "h": "50", - "x": "642", - "y": "2861", - "properties": { - "controlName": "121-rustdoc" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "264", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "206", - "measuredH": "25", - "x": "29", - "y": "12", - "properties": { - "size": "17", - "text": "Documenting with `rustdoc`" - } - } - ] - } - } - }, - { - "ID": "707", - "typeID": "__group__", - "zOrder": "212", - "measuredW": "264", - "measuredH": "50", - "w": "264", - "h": "50", - "x": "643", - "y": "2915", - "properties": { - "controlName": "122-perf-profiling" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "264", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16776960" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "199", - "measuredH": "25", - "x": "31", - "y": "12", - "properties": { - "size": "17", - "text": "Performance and Profiling" - } - } - ] - } - } - }, - { - "ID": "708", - "typeID": "__group__", - "zOrder": "90", - "measuredW": "180", - "measuredH": "50", - "w": "180", - "h": "50", - "x": "1063", - "y": "471", - "properties": { - "controlName": "100-introduction:what-is-rust" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "180", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "105", - "measuredH": "25", - "x": "37", - "y": "13", - "properties": { - "size": "17", - "text": "What is Rust?" - } - } - ] - } - } - }, - { - "ID": "709", - "typeID": "__group__", - "zOrder": "94", - "measuredW": "184", - "measuredH": "50", - "w": "184", - "h": "50", - "x": "1249", - "y": "471", - "properties": { - "controlName": "101-introduction:why-rust" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "184", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "112", - "measuredH": "25", - "x": "36", - "y": "13", - "properties": { - "size": "17", - "text": "Why use Rust?" - } - } - ] - } - } - }, - { - "ID": "710", - "typeID": "__group__", - "zOrder": "91", - "measuredW": "370", - "measuredH": "50", - "w": "370", - "h": "50", - "x": "1063", - "y": "527", - "properties": { - "controlName": "102-introduction:memory-safety" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "370", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "328", - "measuredH": "25", - "x": "21", - "y": "12", - "properties": { - "size": "17", - "text": "Memory Safety and Zero-Cost Abstractions" - } - } - ] - } - } - }, - { - "ID": "711", - "typeID": "__group__", - "zOrder": "96", - "measuredW": "370", - "measuredH": "50", - "w": "370", - "h": "50", - "x": "1063", - "y": "632", - "properties": { - "controlName": "103-introduction:installing-rust" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "370", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "194", - "measuredH": "25", - "x": "88", - "y": "12", - "properties": { - "size": "17", - "text": "Installing Rust and Cargo" - } - } - ] - } - } - }, - { - "ID": "713", - "typeID": "__group__", - "zOrder": "97", - "measuredW": "370", - "measuredH": "50", - "w": "370", - "h": "50", - "x": "1063", - "y": "679", - "properties": { - "controlName": "104-introduction:ides-and-rust" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "370", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "197", - "measuredH": "25", - "x": "86", - "y": "12", - "properties": { - "size": "17", - "text": "IDEs and Rust Toolchains" - } - } - ] - } - } - }, - { - "ID": "714", - "typeID": "__group__", - "zOrder": "98", - "measuredW": "370", - "measuredH": "50", - "w": "370", - "h": "50", - "x": "1063", - "y": "726", - "properties": { - "controlName": "105-introduction:rust-repl" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "370", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "226", - "measuredH": "25", - "x": "86", - "y": "12", - "properties": { - "size": "17", - "text": "Rust REPL (Rust Playground)" - } - } - ] - } - } - }, - { - "ID": "715", - "typeID": "__group__", - "zOrder": "99", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "650", - "properties": { - "controlName": "100-language-basics:syntax" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "169", - "measuredH": "25", - "x": "76", - "y": "13", - "properties": { - "size": "17", - "text": "Syntax and Semantics" - } - } - ] - } - } - }, - { - "ID": "716", - "typeID": "__group__", - "zOrder": "103", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "844", - "properties": { - "controlName": "101-language-basics:ownership" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "152", - "measuredH": "25", - "x": "85", - "y": "13", - "properties": { - "size": "17", - "text": "Ownership System" - } - } - ] - } - } - }, - { - "ID": "717", - "typeID": "__group__", - "zOrder": "132", - "measuredW": "351", - "measuredH": "50", - "w": "351", - "h": "50", - "x": "617", - "y": "713", - "properties": { - "controlName": "102-language-basics:constructs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "351", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "84", - "measuredH": "25", - "x": "134", - "y": "13", - "properties": { - "size": "17", - "text": "Constructs" - } - } - ] - } - } - }, - { - "ID": "718", - "typeID": "__group__", - "zOrder": "108", - "measuredW": "352", - "measuredH": "50", - "w": "352", - "h": "50", - "x": "616", - "y": "778", - "properties": { - "controlName": "103-language-basics:data-structures" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "352", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "120", - "measuredH": "25", - "x": "101", - "y": "13", - "properties": { - "size": "17", - "text": "Data Structures" - } - } - ] - } - } - }, - { - "ID": "719", - "typeID": "__group__", - "zOrder": "100", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "603", - "properties": { - "controlName": "101-language-basics:syntax:variables" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "282", - "measuredH": "25", - "x": "20", - "y": "13", - "properties": { - "size": "17", - "text": "Variables, Constants, and Data Types" - } - } - ] - } - } - }, - { - "ID": "720", - "typeID": "__group__", - "zOrder": "101", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "556", - "properties": { - "controlName": "102-language-basics:syntax:control-flow" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "183", - "measuredH": "25", - "x": "69", - "y": "13", - "properties": { - "size": "17", - "text": "Control Flow Constructs" - } - } - ] - } - } - }, - { - "ID": "721", - "typeID": "__group__", - "zOrder": "102", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "511", - "properties": { - "controlName": "103-language-basics:syntax:functions" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "227", - "measuredH": "25", - "x": "47", - "y": "13", - "properties": { - "size": "17", - "text": "Functions and Method Syntax" - } - } - ] - } - } - }, - { - "ID": "722", - "typeID": "__group__", - "zOrder": "107", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "465", - "properties": { - "controlName": "104-language-basics:syntax:pattern-matching" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "275", - "measuredH": "25", - "x": "23", - "y": "13", - "properties": { - "size": "17", - "text": "Pattern Matching and Destructuring" - } - } - ] - } - } - }, - { - "ID": "723", - "typeID": "__group__", - "zOrder": "104", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "891", - "properties": { - "controlName": "100-language-basics:ownership:rules" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "282", - "measuredH": "25", - "x": "20", - "y": "13", - "properties": { - "size": "17", - "text": "Ownership Rules and Memory Safety" - } - } - ] - } - } - }, - { - "ID": "724", - "typeID": "__group__", - "zOrder": "105", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "938", - "properties": { - "controlName": "101-language-basics:ownership:borrowing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "262", - "measuredH": "25", - "x": "30", - "y": "13", - "properties": { - "size": "17", - "text": "Borrowing, References, and Slices" - } - } - ] - } - } - }, - { - "ID": "725", - "typeID": "__group__", - "zOrder": "106", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "131", - "y": "985", - "properties": { - "controlName": "102-language-basics:ownership:stack-heap" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "199", - "measuredH": "25", - "x": "61", - "y": "13", - "properties": { - "size": "17", - "text": "Deep Dive: Stack vs Heap" - } - } - ] - } - } - }, - { - "ID": "726", - "typeID": "__group__", - "zOrder": "128", - "measuredW": "84", - "measuredH": "50", - "w": "84", - "h": "50", - "x": "617", - "y": "666", - "properties": { - "controlName": "100-language-basics:constructs:enums" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "84", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "53", - "measuredH": "25", - "x": "15", - "y": "12", - "properties": { - "size": "17", - "text": "Enums" - } - } - ] - } - } - }, - { - "ID": "727", - "typeID": "__group__", - "zOrder": "129", - "measuredW": "83", - "measuredH": "50", - "w": "83", - "h": "50", - "x": "696", - "y": "666", - "properties": { - "controlName": "101-language-basics:constructs:structs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "83", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "54", - "measuredH": "25", - "x": "15", - "y": "12", - "properties": { - "size": "17", - "text": "Structs" - } - } - ] - } - } - }, - { - "ID": "728", - "typeID": "__group__", - "zOrder": "130", - "measuredW": "78", - "measuredH": "50", - "w": "78", - "h": "50", - "x": "774", - "y": "666", - "properties": { - "controlName": "102-language-basics:constructs:traits" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "78", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "43", - "measuredH": "25", - "x": "19", - "y": "12", - "properties": { - "size": "17", - "text": "Traits" - } - } - ] - } - } - }, - { - "ID": "732", - "typeID": "__group__", - "zOrder": "75", - "measuredW": "95", - "measuredH": "50", - "w": "95", - "h": "50", - "x": "616", - "y": "824", - "properties": { - "controlName": "100-language-basics:data-structures:integers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "95", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "65", - "measuredH": "25", - "x": "15", - "y": "12", - "properties": { - "size": "17", - "text": "Integers" - } - } - ] - } - } - }, - { - "ID": "733", - "typeID": "__group__", - "zOrder": "76", - "measuredW": "80", - "measuredH": "50", - "w": "80", - "h": "50", - "x": "707", - "y": "824", - "properties": { - "controlName": "101-language-basics:data-structures:floats" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "80", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "47", - "measuredH": "25", - "x": "16", - "y": "12", - "properties": { - "size": "17", - "text": "Floats" - } - } - ] - } - } - }, - { - "ID": "734", - "typeID": "__group__", - "zOrder": "77", - "measuredW": "89", - "measuredH": "50", - "w": "89", - "h": "50", - "x": "782", - "y": "824", - "properties": { - "controlName": "102-language-basics:data-structures:boolean" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "89", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "64", - "measuredH": "25", - "x": "13", - "y": "12", - "properties": { - "size": "17", - "text": "Boolean" - } - } - ] - } - } - }, - { - "ID": "736", - "typeID": "__group__", - "zOrder": "78", - "measuredW": "101", - "measuredH": "50", - "w": "101", - "h": "50", - "x": "867", - "y": "824", - "properties": { - "controlName": "103-language-basics:data-structures:character" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "101", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "77", - "measuredH": "25", - "x": "13", - "y": "12", - "properties": { - "size": "17", - "text": "Character" - } - } - ] - } - } - }, - { - "ID": "737", - "typeID": "__group__", - "zOrder": "109", - "measuredW": "171", - "measuredH": "50", - "w": "171", - "h": "50", - "x": "616", - "y": "870", - "properties": { - "controlName": "104-language-basics:data-structures:tuple" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "171", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "43", - "measuredH": "25", - "x": "64", - "y": "12", - "properties": { - "size": "17", - "text": "Tuple" - } - } - ] - } - } - }, - { - "ID": "738", - "typeID": "__group__", - "zOrder": "110", - "measuredW": "184", - "measuredH": "50", - "w": "184", - "h": "50", - "x": "784", - "y": "871", - "properties": { - "controlName": "105-language-basics:data-structures:array" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "184", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "40", - "measuredH": "25", - "x": "59", - "y": "11", - "properties": { - "size": "17", - "text": "Array" - } - } - ] - } - } - }, - { - "ID": "739", - "typeID": "__group__", - "zOrder": "114", - "measuredW": "79", - "measuredH": "50", - "w": "79", - "h": "50", - "x": "616", - "y": "916", - "properties": { - "controlName": "106-language-basics:data-structures:vector" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "79", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "50", - "measuredH": "25", - "x": "15", - "y": "12", - "properties": { - "size": "17", - "text": "Vector" - } - } - ] - } - } - }, - { - "ID": "740", - "typeID": "__group__", - "zOrder": "115", - "measuredW": "81", - "measuredH": "50", - "w": "81", - "h": "50", - "x": "692", - "y": "916", - "properties": { - "controlName": "107-language-basics:data-structures:string" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "81", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "46", - "measuredH": "25", - "x": "18", - "y": "12", - "properties": { - "size": "17", - "text": "String" - } - } - ] - } - } - }, - { - "ID": "741", - "typeID": "__group__", - "zOrder": "116", - "measuredW": "104", - "measuredH": "50", - "w": "104", - "h": "50", - "x": "767", - "y": "916", - "properties": { - "controlName": "108-language-basics:data-structures:hashmap" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "104", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "74", - "measuredH": "25", - "x": "17", - "y": "12", - "properties": { - "size": "17", - "text": "Hashmap" - } - } - ] - } - } - }, - { - "ID": "742", - "typeID": "__group__", - "zOrder": "117", - "measuredW": "101", - "measuredH": "50", - "w": "101", - "h": "50", - "x": "867", - "y": "916", - "properties": { - "controlName": "109-language-basics:data-structures:hashset" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "101", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "64", - "measuredH": "25", - "x": "17", - "y": "12", - "properties": { - "size": "17", - "text": "Hashset" - } - } - ] - } - } - }, - { - "ID": "743", - "typeID": "__group__", - "zOrder": "118", - "measuredW": "110", - "measuredH": "50", - "w": "110", - "h": "50", - "x": "616", - "y": "963", - "properties": { - "controlName": "110-language-basics:data-structures:linked-list" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "110", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "79", - "measuredH": "25", - "x": "12", - "y": "12", - "properties": { - "size": "17", - "text": "LinkedList" - } - } - ] - } - } - }, - { - "ID": "744", - "typeID": "__group__", - "zOrder": "119", - "measuredW": "110", - "measuredH": "50", - "w": "110", - "h": "50", - "x": "713", - "y": "963", - "properties": { - "controlName": "111-language-basics:data-structures:binary-heap" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "110", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "91", - "measuredH": "25", - "x": "10", - "y": "12", - "properties": { - "size": "17", - "text": "BinaryHeap" - } - } - ] - } - } - }, - { - "ID": "746", - "typeID": "__group__", - "zOrder": "111", - "measuredW": "77", - "measuredH": "50", - "w": "77", - "h": "50", - "x": "820", - "y": "963", - "properties": { - "controlName": "112-language-basics:data-structures:stack" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "77", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "43", - "measuredH": "25", - "x": "16", - "y": "12", - "properties": { - "size": "17", - "text": "Stack" - } - } - ] - } - } - }, - { - "ID": "747", - "typeID": "__group__", - "zOrder": "120", - "measuredW": "77", - "measuredH": "50", - "w": "77", - "h": "50", - "x": "892", - "y": "963", - "properties": { - "controlName": "113-language-basics:data-structures:queue" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "77", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "53", - "measuredH": "25", - "x": "13", - "y": "12", - "properties": { - "size": "17", - "text": "Queue" - } - } - ] - } - } - }, - { - "ID": "748", - "typeID": "__group__", - "zOrder": "121", - "measuredW": "135", - "measuredH": "50", - "w": "135", - "h": "50", - "x": "616", - "y": "1061", - "properties": { - "controlName": "114-language-basics:data-structures:btree-map" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "135", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "82", - "measuredH": "25", - "x": "27", - "y": "12", - "properties": { - "size": "17", - "text": "BTreeMap" - } - } - ] - } - } - }, - { - "ID": "749", - "typeID": "__group__", - "zOrder": "122", - "measuredW": "112", - "measuredH": "50", - "w": "112", - "h": "50", - "x": "747", - "y": "1061", - "properties": { - "controlName": "115-language-basics:data-structures:btree-set" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "112", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "73", - "measuredH": "25", - "x": "19", - "y": "12", - "properties": { - "size": "17", - "text": "BTreeSet" - } - } - ] - } - } - }, - { - "ID": "750", - "typeID": "__group__", - "zOrder": "123", - "measuredW": "113", - "measuredH": "50", - "w": "113", - "h": "50", - "x": "856", - "y": "1061", - "properties": { - "controlName": "116-language-basics:data-structures:rc" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "113", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "22", - "measuredH": "25", - "x": "46", - "y": "12", - "properties": { - "size": "17", - "text": "Rc" - } - } - ] - } - } - }, - { - "ID": "751", - "typeID": "__group__", - "zOrder": "124", - "measuredW": "60", - "measuredH": "50", - "w": "60", - "h": "50", - "x": "616", - "y": "1107", - "properties": { - "controlName": "117-language-basics:data-structures:arc" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "60", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "26", - "measuredH": "25", - "x": "17", - "y": "12", - "properties": { - "size": "17", - "text": "Arc" - } - } - ] - } - } - }, - { - "ID": "752", - "typeID": "__group__", - "zOrder": "127", - "measuredW": "78", - "measuredH": "50", - "w": "78", - "h": "50", - "x": "673", - "y": "1107", - "properties": { - "controlName": "118-language-basics:data-structures:mutex" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "78", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "48", - "measuredH": "25", - "x": "15", - "y": "12", - "properties": { - "size": "17", - "text": "Mutex" - } - } - ] - } - } - }, - { - "ID": "753", - "typeID": "__group__", - "zOrder": "125", - "measuredW": "110", - "measuredH": "50", - "w": "110", - "h": "50", - "x": "748", - "y": "1107", - "properties": { - "controlName": "119-language-basics:data-structures:rwlock" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "110", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "60", - "measuredH": "25", - "x": "23", - "y": "12", - "properties": { - "size": "17", - "text": "RwLock" - } - } - ] - } - } - }, - { - "ID": "754", - "typeID": "__group__", - "zOrder": "126", - "measuredW": "115", - "measuredH": "50", - "w": "115", - "h": "50", - "x": "854", - "y": "1107", - "properties": { - "controlName": "120-language-basics:data-structures:channels" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "115", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "73", - "measuredH": "25", - "x": "21", - "y": "12", - "properties": { - "size": "17", - "text": "Channels" - } - } - ] - } - } - }, - { - "ID": "755", - "typeID": "__group__", - "zOrder": "144", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "1064", - "y": "964", - "properties": { - "controlName": "100-concurrency-parallelism:futures" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "266", - "measuredH": "25", - "x": "48", - "y": "13", - "properties": { - "size": "17", - "text": "Futures and Async/Await Paradigm" - } - } - ] - } - } - }, - { - "ID": "756", - "typeID": "__group__", - "zOrder": "143", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "1064", - "y": "911", - "properties": { - "controlName": "101-concurrency-parallelism:atomic-operations" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "309", - "measuredH": "25", - "x": "26", - "y": "13", - "properties": { - "size": "17", - "text": "Atomic Operations and Memory Barriers" - } - } - ] - } - } - }, - { - "ID": "757", - "typeID": "__group__", - "zOrder": "142", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "1064", - "y": "857", - "properties": { - "controlName": "102-concurrency-parallelism:threads" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "320", - "measuredH": "25", - "x": "21", - "y": "13", - "properties": { - "size": "17", - "text": "Threads, Channels, and Message Passing" - } - } - ] - } - } - }, - { - "ID": "759", - "typeID": "__group__", - "zOrder": "138", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "616", - "y": "1375", - "properties": { - "controlName": "100-modules-and-crates:code-organization" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "289", - "measuredH": "25", - "x": "36", - "y": "13", - "properties": { - "size": "17", - "text": "Code Organization and Namespacing" - } - } - ] - } - } - }, - { - "ID": "760", - "typeID": "__group__", - "zOrder": "139", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "616", - "y": "1422", - "properties": { - "controlName": "101-modules-and-crates:dependency-mgmt" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "326", - "measuredH": "25", - "x": "18", - "y": "13", - "properties": { - "size": "17", - "text": "Dependency Management with Cargo.toml" - } - } - ] - } - } - }, - { - "ID": "761", - "typeID": "__group__", - "zOrder": "140", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "616", - "y": "1469", - "properties": { - "controlName": "102-modules-and-crates:publishing" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "168", - "measuredH": "25", - "x": "97", - "y": "13", - "properties": { - "size": "17", - "text": "Publishing on crates.io" - } - } - ] - } - } - }, - { - "ID": "762", - "typeID": "__group__", - "zOrder": "146", - "measuredW": "416", - "measuredH": "50", - "w": "416", - "h": "50", - "x": "1010", - "y": "1672", - "properties": { - "controlName": "100-traits-generics:trait-def" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "416", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "286", - "measuredH": "25", - "x": "65", - "y": "13", - "properties": { - "size": "17", - "text": "Trait Definitions and Implementations" - } - } - ] - } - } - }, - { - "ID": "763", - "typeID": "__group__", - "zOrder": "147", - "measuredW": "416", - "measuredH": "50", - "w": "416", - "h": "50", - "x": "1010", - "y": "1726", - "properties": { - "controlName": "101-traits-generics:trait-bounds" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "416", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "268", - "measuredH": "25", - "x": "74", - "y": "13", - "properties": { - "size": "17", - "text": "Trait Bounds and Associated Types" - } - } - ] - } - } - }, - { - "ID": "764", - "typeID": "__group__", - "zOrder": "148", - "measuredW": "416", - "measuredH": "50", - "w": "416", - "h": "50", - "x": "1010", - "y": "1779", - "properties": { - "controlName": "102-traits-generics:advanced-generics" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "416", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "374", - "measuredH": "25", - "x": "21", - "y": "13", - "properties": { - "size": "17", - "text": "Advanced Generics and Type-level Programming" - } - } - ] - } - } - }, - { - "ID": "765", - "typeID": "__group__", - "zOrder": "150", - "measuredW": "331", - "measuredH": "50", - "w": "331", - "h": "50", - "x": "635", - "y": "1672", - "properties": { - "controlName": "100-lifetimes-borrow:explicit-lifetime" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "331", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "217", - "measuredH": "25", - "x": "56", - "y": "13", - "properties": { - "size": "17", - "text": "Explicit Lifetime Annotations" - } - } - ] - } - } - }, - { - "ID": "766", - "typeID": "__group__", - "zOrder": "151", - "measuredW": "331", - "measuredH": "50", - "w": "331", - "h": "50", - "x": "635", - "y": "1726", - "properties": { - "controlName": "101-lifetimes-borrow:lifetime-elision" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "331", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "166", - "measuredH": "25", - "x": "82", - "y": "13", - "properties": { - "size": "17", - "text": "Lifetime Elision Rules" - } - } - ] - } - } - }, - { - "ID": "767", - "typeID": "__group__", - "zOrder": "152", - "measuredW": "331", - "measuredH": "50", - "w": "331", - "h": "50", - "x": "635", - "y": "1780", - "properties": { - "controlName": "102-lifetimes-borrow:covariant" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "331", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "291", - "measuredH": "25", - "x": "19", - "y": "13", - "properties": { - "size": "17", - "text": "Covariant and Contravariant Lifetimes" - } - } - ] - } - } - }, - { - "ID": "769", - "typeID": "__group__", - "zOrder": "134", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "129", - "y": "1223", - "properties": { - "controlName": "100-error-handling:option" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "232", - "measuredH": "25", - "x": "45", - "y": "13", - "properties": { - "size": "17", - "text": "Option & Result Enumerations" - } - } - ] - } - } - }, - { - "ID": "770", - "typeID": "__group__", - "zOrder": "135", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "129", - "y": "1277", - "properties": { - "controlName": "101-error-handling:propagating" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "273", - "measuredH": "25", - "x": "24", - "y": "13", - "properties": { - "size": "17", - "text": "Propagating Errors and `?` Operator" - } - } - ] - } - } - }, - { - "ID": "771", - "typeID": "__group__", - "zOrder": "136", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "129", - "y": "1331", - "properties": { - "controlName": "102-error-handling:custom-error" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "232", - "measuredH": "25", - "x": "45", - "y": "13", - "properties": { - "size": "17", - "text": "Custom Error Types and Traits" - } - } - ] - } - } - }, - { - "ID": "772", - "typeID": "__group__", - "zOrder": "154", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "128", - "y": "1427", - "properties": { - "controlName": "100-macros:declarative" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "288", - "measuredH": "25", - "x": "37", - "y": "13", - "properties": { - "size": "17", - "text": "Declarative Macros with macro_rules!" - } - } - ] - } - } - }, - { - "ID": "773", - "typeID": "__group__", - "zOrder": "155", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "128", - "y": "1481", - "properties": { - "controlName": "101-macros:procedural" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "297", - "measuredH": "25", - "x": "32", - "y": "13", - "properties": { - "size": "17", - "text": "Procedural Macros and Custom Derive" - } - } - ] - } - } - }, - { - "ID": "774", - "typeID": "__group__", - "zOrder": "156", - "measuredW": "362", - "measuredH": "50", - "w": "362", - "h": "50", - "x": "128", - "y": "1535", - "properties": { - "controlName": "102-macros:domain-specific" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "362", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "332", - "measuredH": "25", - "x": "15", - "y": "13", - "properties": { - "size": "17", - "text": "Domain-Specific Languages (DSLs) in Rust" - } - } - ] - } - } - }, - { - "ID": "775", - "typeID": "__group__", - "zOrder": "162", - "measuredW": "98", - "measuredH": "50", - "w": "98", - "h": "50", - "x": "128", - "y": "1868", - "properties": { - "controlName": "100-web-development:rocket" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "98", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "55", - "measuredH": "25", - "x": "21", - "y": "13", - "properties": { - "size": "17", - "text": "Rocket" - } - } - ] - } - } - }, - { - "ID": "776", - "typeID": "__group__", - "zOrder": "163", - "measuredW": "98", - "measuredH": "50", - "w": "98", - "h": "50", - "x": "128", - "y": "1923", - "properties": { - "controlName": "101-web-development:warp" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "98", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "41", - "measuredH": "25", - "x": "28", - "y": "13", - "properties": { - "size": "17", - "text": "Warp" - } - } - ] - } - } - }, - { - "ID": "777", - "typeID": "__group__", - "zOrder": "164", - "measuredW": "98", - "measuredH": "50", - "w": "98", - "h": "50", - "x": "128", - "y": "1978", - "properties": { - "controlName": "102-web-development:actix" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "98", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "37", - "measuredH": "25", - "x": "30", - "y": "13", - "properties": { - "size": "17", - "text": "Actix" - } - } - ] - } - } - }, - { - "ID": "778", - "typeID": "__group__", - "zOrder": "165", - "measuredW": "98", - "measuredH": "50", - "w": "98", - "h": "50", - "x": "128", - "y": "2033", - "properties": { - "controlName": "103-web-development:yew" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "98", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "30", - "measuredH": "25", - "x": "34", - "y": "13", - "properties": { - "size": "17", - "text": "Yew" - } - } - ] - } - } - }, - { - "ID": "779", - "typeID": "__group__", - "zOrder": "167", - "measuredW": "81", - "measuredH": "50", - "w": "81", - "h": "50", - "x": "634", - "y": "1899", - "properties": { - "controlName": "100-async-programming:tokio" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "81", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "41", - "measuredH": "25", - "x": "21", - "y": "12", - "properties": { - "size": "17", - "text": "Tokio" - } - } - ] - } - } - }, - { - "ID": "780", - "typeID": "__group__", - "zOrder": "168", - "measuredW": "110", - "measuredH": "50", - "w": "110", - "h": "50", - "x": "723", - "y": "1899", - "properties": { - "controlName": "101-async-programming:async-std" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "110", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "74", - "measuredH": "25", - "x": "18", - "y": "12", - "properties": { - "size": "17", - "text": "async-std" - } - } - ] - } - } - }, - { - "ID": "781", - "typeID": "__group__", - "zOrder": "169", - "measuredW": "75", - "measuredH": "50", - "w": "75", - "h": "50", - "x": "839", - "y": "1899", - "properties": { - "controlName": "102-async-programming:smol" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "75", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "36", - "measuredH": "25", - "x": "18", - "y": "12", - "properties": { - "size": "17", - "text": "smol" - } - } - ] - } - } - }, - { - "ID": "782", - "typeID": "__group__", - "zOrder": "171", - "measuredW": "101", - "measuredH": "50", - "w": "101", - "h": "50", - "x": "1009", - "y": "1896", - "properties": { - "controlName": "100-networking:reqwest" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "101", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "61", - "measuredH": "25", - "x": "20", - "y": "12", - "properties": { - "size": "17", - "text": "reqwest" - } - } - ] - } - } - }, - { - "ID": "783", - "typeID": "__group__", - "zOrder": "172", - "measuredW": "78", - "measuredH": "50", - "w": "78", - "h": "50", - "x": "1119", - "y": "1896", - "properties": { - "controlName": "101-networking:hyper" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "78", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "44", - "measuredH": "25", - "x": "17", - "y": "12", - "properties": { - "size": "17", - "text": "hyper" - } - } - ] - } - } - }, - { - "ID": "784", - "typeID": "__group__", - "zOrder": "173", - "measuredW": "75", - "measuredH": "50", - "w": "75", - "h": "50", - "x": "1208", - "y": "1896", - "properties": { - "controlName": "102-networking:quinn" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "75", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "43", - "measuredH": "25", - "x": "18", - "y": "12", - "properties": { - "size": "17", - "text": "quinn" - } - } - ] - } - } - }, - { - "ID": "787", - "typeID": "__group__", - "zOrder": "176", - "measuredW": "79", - "measuredH": "50", - "w": "79", - "h": "50", - "x": "1009", - "y": "2224", - "properties": { - "controlName": "100-serialization:serde" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "79", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "46", - "measuredH": "25", - "x": "17", - "y": "12", - "properties": { - "size": "17", - "text": "Serde" - } - } - ] - } - } - }, - { - "ID": "788", - "typeID": "__group__", - "zOrder": "177", - "measuredW": "100", - "measuredH": "50", - "w": "100", - "h": "50", - "x": "1096", - "y": "2224", - "properties": { - "controlName": "101-serialization:json-rust" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "100", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "68", - "measuredH": "25", - "x": "16", - "y": "12", - "properties": { - "size": "17", - "text": "json-rust" - } - } - ] - } - } - }, - { - "ID": "789", - "typeID": "__group__", - "zOrder": "178", - "measuredW": "80", - "measuredH": "50", - "w": "80", - "h": "50", - "x": "1203", - "y": "2224", - "properties": { - "controlName": "102-serialization:toml-rs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "80", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "54", - "measuredH": "25", - "x": "13", - "y": "12", - "properties": { - "size": "17", - "text": "toml-rs" - } - } - ] - } - } - }, - { - "ID": "791", - "typeID": "__group__", - "zOrder": "41", - "measuredW": "94", - "measuredH": "50", - "w": "94", - "h": "50", - "x": "640", - "y": "2224", - "properties": { - "controlName": "100-database-orm:diesel" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "94", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "49", - "measuredH": "25", - "x": "22", - "y": "12", - "properties": { - "size": "17", - "text": "Diesel" - } - } - ] - } - } - }, - { - "ID": "792", - "typeID": "__group__", - "zOrder": "42", - "measuredW": "69", - "measuredH": "50", - "w": "69", - "h": "50", - "x": "740", - "y": "2224", - "properties": { - "controlName": "101-database-orm:sqlx" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "69", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "31", - "measuredH": "25", - "x": "21", - "y": "12", - "properties": { - "size": "17", - "text": "sqlx" - } - } - ] - } - } - }, - { - "ID": "793", - "typeID": "__group__", - "zOrder": "43", - "measuredW": "95", - "measuredH": "50", - "w": "95", - "h": "50", - "x": "819", - "y": "2224", - "properties": { - "controlName": "102-database-orm:rusqlite" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "95", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "57", - "measuredH": "25", - "x": "19", - "y": "12", - "properties": { - "size": "17", - "text": "rusqlite" - } - } - ] - } - } - }, - { - "ID": "795", - "typeID": "__group__", - "zOrder": "181", - "measuredW": "132", - "measuredH": "50", - "w": "132", - "h": "50", - "x": "128", - "y": "2150", - "properties": { - "controlName": "100-cryptography:ring" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "132", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "30", - "measuredH": "25", - "x": "51", - "y": "13", - "properties": { - "size": "17", - "text": "ring" - } - } - ] - } - } - }, - { - "ID": "796", - "typeID": "__group__", - "zOrder": "182", - "measuredW": "132", - "measuredH": "50", - "w": "132", - "h": "50", - "x": "128", - "y": "2205", - "properties": { - "controlName": "101-cryptography:rust-crypto" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "132", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "84", - "measuredH": "25", - "x": "24", - "y": "13", - "properties": { - "size": "17", - "text": "rust-crypto" - } - } - ] - } - } - }, - { - "ID": "797", - "typeID": "__group__", - "zOrder": "183", - "measuredW": "132", - "measuredH": "50", - "w": "132", - "h": "50", - "x": "128", - "y": "2260", - "properties": { - "controlName": "102-cryptography:sodiumoxide" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "132", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "97", - "measuredH": "25", - "x": "17", - "y": "13", - "properties": { - "size": "17", - "text": "sodiumoxide" - } - } - ] - } - } - }, - { - "ID": "799", - "typeID": "__group__", - "zOrder": "185", - "measuredW": "106", - "measuredH": "50", - "w": "106", - "h": "50", - "x": "150", - "y": "2360", - "properties": { - "controlName": "100-cli-utils:clap" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "106", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "33", - "measuredH": "25", - "x": "37", - "y": "13", - "properties": { - "size": "17", - "text": "clap" - } - } - ] - } - } - }, - { - "ID": "800", - "typeID": "__group__", - "zOrder": "186", - "measuredW": "106", - "measuredH": "50", - "w": "106", - "h": "50", - "x": "150", - "y": "2415", - "properties": { - "controlName": "101-cli-utils:structopt" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "106", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "68", - "measuredH": "25", - "x": "20", - "y": "13", - "properties": { - "size": "17", - "text": "structopt" - } - } - ] - } - } - }, - { - "ID": "801", - "typeID": "__group__", - "zOrder": "187", - "measuredW": "106", - "measuredH": "50", - "w": "106", - "h": "50", - "x": "150", - "y": "2470", - "properties": { - "controlName": "102-cli-utils:termion" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "106", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "59", - "measuredH": "25", - "x": "24", - "y": "13", - "properties": { - "size": "17", - "text": "termion" - } - } - ] - } - } - }, - { - "ID": "802", - "typeID": "__group__", - "zOrder": "189", - "measuredW": "87", - "measuredH": "50", - "w": "87", - "h": "50", - "x": "640", - "y": "2334", - "properties": { - "controlName": "100-game-dev:bevy" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "87", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "36", - "measuredH": "25", - "x": "26", - "y": "13", - "properties": { - "size": "17", - "text": "bevy" - } - } - ] - } - } - }, - { - "ID": "803", - "typeID": "__group__", - "zOrder": "190", - "measuredW": "89", - "measuredH": "50", - "w": "89", - "h": "50", - "x": "731", - "y": "2335", - "properties": { - "controlName": "101-game-dev:fyrox" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "89", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "36", - "measuredH": "25", - "x": "27", - "y": "13", - "properties": { - "size": "17", - "text": "fyrox" - } - } - ] - } - } - }, - { - "ID": "804", - "typeID": "__group__", - "zOrder": "191", - "measuredW": "86", - "measuredH": "50", - "w": "86", - "h": "50", - "x": "825", - "y": "2335", - "properties": { - "controlName": "102-game-dev:ggez" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "86", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "38", - "measuredH": "25", - "x": "24", - "y": "13", - "properties": { - "size": "17", - "text": "ggez" - } - } - ] - } - } - }, - { - "ID": "805", - "typeID": "__group__", - "zOrder": "192", - "measuredW": "133", - "measuredH": "50", - "w": "133", - "h": "50", - "x": "640", - "y": "2508", - "properties": { - "controlName": "103-game-dev:macroquad" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "133", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "87", - "measuredH": "25", - "x": "23", - "y": "13", - "properties": { - "size": "17", - "text": "macroquad" - } - } - ] - } - } - }, - { - "ID": "806", - "typeID": "__group__", - "zOrder": "193", - "measuredW": "130", - "measuredH": "50", - "w": "130", - "h": "50", - "x": "781", - "y": "2509", - "properties": { - "controlName": "104-game-dev:wgpu-rs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "130", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "62", - "measuredH": "25", - "x": "34", - "y": "13", - "properties": { - "size": "17", - "text": "wgpu-rs" - } - } - ] - } - } - }, - { - "ID": "808", - "typeID": "__group__", - "zOrder": "22", - "measuredW": "87", - "measuredH": "50", - "w": "87", - "h": "50", - "x": "1010", - "y": "2332", - "properties": { - "controlName": "100-gui-dev:tauri" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "87", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "40", - "measuredH": "25", - "x": "26", - "y": "13", - "properties": { - "size": "17", - "text": "tauri" - } - } - ] - } - } - }, - { - "ID": "809", - "typeID": "__group__", - "zOrder": "23", - "measuredW": "89", - "measuredH": "50", - "w": "89", - "h": "50", - "x": "1101", - "y": "2333", - "properties": { - "controlName": "101-gui-dev:gtk-rs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "89", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "45", - "measuredH": "25", - "x": "23", - "y": "13", - "properties": { - "size": "17", - "text": "gtk-rs" - } - } - ] - } - } - }, - { - "ID": "810", - "typeID": "__group__", - "zOrder": "24", - "measuredW": "86", - "measuredH": "50", - "w": "86", - "h": "50", - "x": "1195", - "y": "2333", - "properties": { - "controlName": "102-gui-dev:relm" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "86", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "34", - "measuredH": "25", - "x": "25", - "y": "13", - "properties": { - "size": "17", - "text": "relm" - } - } - ] - } - } - }, - { - "ID": "811", - "typeID": "__group__", - "zOrder": "197", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "1031", - "y": "2522", - "properties": { - "controlName": "100-embedded:embedded-hal" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "113", - "measuredH": "25", - "x": "15", - "y": "13", - "properties": { - "size": "17", - "text": "embedded-hal" - } - } - ] - } - } - }, - { - "ID": "812", - "typeID": "__group__", - "zOrder": "198", - "measuredW": "66", - "measuredH": "50", - "w": "66", - "h": "50", - "x": "1180", - "y": "2523", - "properties": { - "controlName": "101-embedded:rppal" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "66", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "40", - "measuredH": "25", - "x": "13", - "y": "13", - "properties": { - "size": "17", - "text": "rppal" - } - } - ] - } - } - }, - { - "ID": "813", - "typeID": "__group__", - "zOrder": "199", - "measuredW": "77", - "measuredH": "50", - "w": "77", - "h": "50", - "x": "1251", - "y": "2524", - "properties": { - "controlName": "102-embedded:nrf-hal" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "77", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "51", - "measuredH": "25", - "x": "13", - "y": "13", - "properties": { - "size": "17", - "text": "nrf-hal" - } - } - ] - } - } - }, - { - "ID": "814", - "typeID": "__group__", - "zOrder": "201", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "391", - "y": "2559", - "properties": { - "controlName": "100-wasm:wasm-bindgen" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "112", - "measuredH": "25", - "x": "16", - "y": "13", - "properties": { - "size": "17", - "text": "wasm-bindgen" - } - } - ] - } - } - }, - { - "ID": "815", - "typeID": "__group__", - "zOrder": "202", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "391", - "y": "2614", - "properties": { - "controlName": "101-wasm:wasm-pack" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "87", - "measuredH": "25", - "x": "28", - "y": "13", - "properties": { - "size": "17", - "text": "wasm-pack" - } - } - ] - } - } - }, - { - "ID": "816", - "typeID": "__group__", - "zOrder": "203", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "391", - "y": "2668", - "properties": { - "controlName": "102-wasm:wasmer" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "60", - "measuredH": "25", - "x": "42", - "y": "13", - "properties": { - "size": "17", - "text": "wasmer" - } - } - ] - } - } - }, - { - "ID": "817", - "typeID": "__group__", - "zOrder": "205", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "1081", - "y": "2734", - "properties": { - "controlName": "100-testing:unit-integration" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "213", - "measuredH": "25", - "x": "54", - "y": "13", - "properties": { - "size": "17", - "text": "Unit and Integration Testing" - } - } - ] - } - } - }, - { - "ID": "818", - "typeID": "__group__", - "zOrder": "206", - "measuredW": "321", - "measuredH": "50", - "w": "321", - "h": "50", - "x": "1081", - "y": "2788", - "properties": { - "controlName": "101-testing:mocking" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "321", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "282", - "measuredH": "25", - "x": "20", - "y": "13", - "properties": { - "size": "17", - "text": "Mocking and Property-based Testing" - } - } - ] - } - } - }, - { - "ID": "821", - "typeID": "__group__", - "zOrder": "207", - "measuredW": "134", - "measuredH": "50", - "w": "134", - "h": "50", - "x": "959", - "y": "2915", - "properties": { - "controlName": "100-perf-profiling:criterion-rs" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "134", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "85", - "measuredH": "25", - "x": "20", - "y": "13", - "properties": { - "size": "17", - "text": "Criterion.rs" - } - } - ] - } - } - }, - { - "ID": "822", - "typeID": "__group__", - "zOrder": "209", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "157", - "y": "2744", - "properties": { - "controlName": "100-debugging:rust-gdb" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "65", - "measuredH": "25", - "x": "42", - "y": "13", - "properties": { - "size": "17", - "text": "rust-gdb" - } - } - ] - } - } - }, - { - "ID": "823", - "typeID": "__group__", - "zOrder": "210", - "measuredW": "144", - "measuredH": "50", - "w": "144", - "h": "50", - "x": "157", - "y": "2798", - "properties": { - "controlName": "101-debugging:rust-lldb" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "144", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "63", - "measuredH": "25", - "x": "42", - "y": "13", - "properties": { - "size": "17", - "text": "rust-lldb" - } - } - ] - } - } - }, - { - "ID": "834", - "typeID": "__group__", - "zOrder": "131", - "measuredW": "119", - "measuredH": "50", - "w": "119", - "h": "50", - "x": "849", - "y": "666", - "properties": { - "controlName": "103-language-basics:constructs:impl-blocks" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "119", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "89", - "measuredH": "25", - "x": "15", - "y": "12", - "properties": { - "size": "17", - "text": "Impl Blocks" - } - } - ] - } - } - }, - { - "ID": "835", - "typeID": "Arrow", - "zOrder": "216", - "w": "101", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "119", - "y": "439", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "16777215", - "p0": { - "x": 100.57841492806233, - "y": 0.15918378573792324 - }, - "p1": { - "x": 0.4438624012549726, - "y": -0.00008403832147459165 - }, - "p2": { - "x": 0, - "y": 0.15918378573792324 - } - } - }, - { - "ID": "836", - "typeID": "Arrow", - "zOrder": "217", - "w": "101", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "1357", - "y": "423", - "properties": { - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "16777215", - "p0": { - "x": 100.57841492806233, - "y": 0.15918378573792324 - }, - "p1": { - "x": 0.4438624012549726, - "y": -0.00008403832147459165 - }, - "p2": { - "x": 0, - "y": 0.15918378573792324 - } - } - }, - { - "ID": "840", - "typeID": "__group__", - "zOrder": "218", - "measuredW": "98", - "measuredH": "50", - "w": "98", - "h": "50", - "x": "128", - "y": "2088", - "properties": { - "controlName": "104-web-development:axum" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "98", - "h": "50", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "41", - "measuredH": "25", - "x": "28", - "y": "13", - "properties": { - "size": "17", - "text": "axum" - } - } - ] - } - } - }, - { - "ID": "841", - "typeID": "Arrow", - "zOrder": "0", - "w": "147", - "h": "94", - "measuredW": "150", - "measuredH": "100", - "x": "223", - "y": "1887", - "properties": { - "color": "2848996", - "curvature": "-1", - "direction": "bottom", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "p0": { - "x": 147, - "y": 94 - }, - "p1": { - "x": 0.4888238423607003, - "y": 0.09385637554562964 - }, - "p2": { - "x": 0, - "y": 0 - } - } + "nodes": [ + { + "id": "rUrQuzfx0d3m8ikW8zqYW", + "type": "vertical", + "position": { + "x": 259.08542331133776, + "y": 2989.863187593087 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "Ox1rQuCaV-vAnC00DDOgc" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 91 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 259.08542331133776, + "y": 2989.863187593087 + } + }, + { + "id": "KoqpyorKd1eaw1oaJFDOl", + "type": "vertical", + "position": { + "x": 122.58542331133776, + "y": 2989.863187593087 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "rUrQuzfx0d3m8ikW8zqYW" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 91 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 122.58542331133776, + "y": 2989.863187593087 + } + }, + { + "id": "Ox1rQuCaV-vAnC00DDOgc", + "type": "vertical", + "position": { + "x": 263.8018811735381, + "y": 2599.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" } - ] + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 91 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 263.8018811735381, + "y": 2599.435641912534 + } }, - "attributes": { - "name": "New Wireframe 1 copy", - "order": 1000009.1336392317, - "parentID": null, - "notes": "" + { + "id": "9gAM0HHc7BjiI_57YohcR", + "type": "vertical", + "position": { + "x": 112.64941537716832, + "y": 2599.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "rUrQuzfx0d3m8ikW8zqYW" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 91 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 112.64941537716832, + "y": 2599.435641912534 + } }, - "branchID": "Master", - "resourceID": "E62F7257-0C11-4024-8C48-67BDED6B975E", - "mockupH": "3043", - "mockupW": "1339", - "measuredW": "1458", - "measuredH": "3212", - "version": "1.0" - }, - "groupOffset": { - "x": 0, - "y": 0 - }, - "dependencies": [], - "projectID": "file:///Users/kamrify/Desktop/New%20Roadmaps/Android%20Roadmap.bmpr" -} + { + "id": "wwwGrtZtMCvNAsHcV6iTp", + "type": "vertical", + "position": { + "x": -274.0874712538206, + "y": 2612.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "Ox1rQuCaV-vAnC00DDOgc" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 78 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -274.0874712538206, + "y": 2612.435641912534 + } + }, + { + "id": "MI-EBA-E6XSFHvcwTGVSX", + "type": "vertical", + "position": { + "x": -188.2592360689243, + "y": 2612.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "Ox1rQuCaV-vAnC00DDOgc" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 78 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -188.2592360689243, + "y": 2612.435641912534 + } + }, + { + "id": "OSwj7Vb5wZ0NYRbwyv9Fa", + "type": "vertical", + "position": { + "x": -94.81180589576024, + "y": 2612.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "Ox1rQuCaV-vAnC00DDOgc" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 78 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -94.81180589576024, + "y": 2612.435641912534 + } + }, + { + "id": "g_55QGdPXDqpegvW-Ory8", + "type": "vertical", + "position": { + "x": -665.6322659713495, + "y": 2685.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "DYCWEBzyai0biBdJNKpcb" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 79 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -665.6322659713495, + "y": 2685.435641912534 + } + }, + { + "id": "zGOEt71ky7va_Wsd-Z0DI", + "type": "vertical", + "position": { + "x": -568.2748410324898, + "y": 2681.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "DYCWEBzyai0biBdJNKpcb" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -568.2748410324898, + "y": 2681.435641912534 + } + }, + { + "id": "DYCWEBzyai0biBdJNKpcb", + "type": "vertical", + "position": { + "x": -475.1322659713495, + "y": 2680.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "Ox1rQuCaV-vAnC00DDOgc" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 84 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -475.1322659713495, + "y": 2680.435641912534 + } + }, + { + "id": "djbcwu0u-S1s-6KsItcVb", + "type": "vertical", + "position": { + "x": -476.91948266035604, + "y": 2445.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "Ox1rQuCaV-vAnC00DDOgc" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 78 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -476.91948266035604, + "y": 2445.7871651675737 + } + }, + { + "id": "AQLvE8HuoruqfQaWUmUbA", + "type": "vertical", + "position": { + "x": -662.2748410324898, + "y": 2462.255858255128 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "DYCWEBzyai0biBdJNKpcb" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 78 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -662.2748410324898, + "y": 2462.255858255128 + } + }, + { + "id": "_BUGCGhl3YZmYwMFjF8EQ", + "type": "vertical", + "position": { + "x": -124.1381872719935, + "y": 2318.50200658478 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 120 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -124.1381872719935, + "y": 2318.50200658478 + } + }, + { + "id": "ZyzVpBl6GnmYA9D8jw0RZ", + "type": "vertical", + "position": { + "x": -249.7748410324898, + "y": 2318.50200658478 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "_BUGCGhl3YZmYwMFjF8EQ" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 120 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -249.7748410324898, + "y": 2318.50200658478 + } + }, + { + "id": "dtTAH6laZUBK5Dz1YLSFp", + "type": "vertical", + "position": { + "x": 87.58542331133775, + "y": 2328.50200658478 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "FGUbNtBQHC9af26mD5gAv" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 110 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 87.58542331133775, + "y": 2328.50200658478 + } + }, + { + "id": "QBQtHQmySwZy2ZCdpTzly", + "type": "vertical", + "position": { + "x": 187.58542331133776, + "y": 2328.50200658478 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "FGUbNtBQHC9af26mD5gAv" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 110 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 187.58542331133776, + "y": 2328.50200658478 + } + }, + { + "id": "FGUbNtBQHC9af26mD5gAv", + "type": "vertical", + "position": { + "x": 289.58542331133776, + "y": 2328.50200658478 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "jW6BXzMs6fb7cDnEZtg4n" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 110 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 289.58542331133776, + "y": 2328.50200658478 + } + }, + { + "id": "jW6BXzMs6fb7cDnEZtg4n", + "type": "vertical", + "position": { + "x": 300.8018811735381, + "y": 2041.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 110 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 300.8018811735381, + "y": 2041.550309464411 + } + }, + { + "id": "TMjwWmqqaJLGk3dM4wUCm", + "type": "vertical", + "position": { + "x": 197.3018811735381, + "y": 2041.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "jW6BXzMs6fb7cDnEZtg4n" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 110 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 197.3018811735381, + "y": 2041.550309464411 + } + }, + { + "id": "6elkyME3Q_vTtjnmBJIZJ", + "type": "vertical", + "position": { + "x": 84.61996452082155, + "y": 2041.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "FGUbNtBQHC9af26mD5gAv" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 110 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 84.61996452082155, + "y": 2041.550309464411 + } + }, + { + "id": "4SufzURM37h3CKmPcQhgu", + "type": "vertical", + "position": { + "x": -96.6381872719935, + "y": 2143.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -96.6381872719935, + "y": 2143.559081382036 + } + }, + { + "id": "7WUhiHKUnamVl-J-qZcI8", + "type": "vertical", + "position": { + "x": -176.81180589576024, + "y": 2143.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "4SufzURM37h3CKmPcQhgu" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -176.81180589576024, + "y": 2143.559081382036 + } + }, + { + "id": "ZwAjxTmMGbDF6A5v_o8HV", + "type": "vertical", + "position": { + "x": -267.52995834089336, + "y": 2143.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "4SufzURM37h3CKmPcQhgu" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -267.52995834089336, + "y": 2143.559081382036 + } + }, + { + "id": "Lty8FW95Qw4eaQwrvgFft", + "type": "vertical", + "position": { + "x": -553.2748410324898, + "y": 2143.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "4SufzURM37h3CKmPcQhgu" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -553.2748410324898, + "y": 2143.559081382036 + } + }, + { + "id": "--B8QrLgIH-l67iomugbW", + "type": "vertical", + "position": { + "x": -450.6768832445764, + "y": 2143.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "4SufzURM37h3CKmPcQhgu" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -450.6768832445764, + "y": 2143.559081382036 + } + }, + { + "id": "IrJJ-xM83ltSp4meGT6Gm", + "type": "vertical", + "position": { + "x": -654.1322659713495, + "y": 2143.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "4SufzURM37h3CKmPcQhgu" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 83 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -654.1322659713495, + "y": 2143.559081382036 + } + }, + { + "id": "3nPTKH467-g4N0YBW0zpb", + "type": "horizontal", + "position": { + "x": -506.45066814637346, + "y": 1648.7461547010141 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.65 + } + }, + "zIndex": 999, + "width": 50, + "height": 20, + "measured": { + "width": 607, + "height": 20 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -506.45066814637346, + "y": 1648.7461547010141 + } + }, + { + "id": "oMiptPao4a2q92LjCy2NC", + "type": "horizontal", + "position": { + "x": -189.45066814637346, + "y": 1628.7461547010141 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.65 + }, + "oldId": "3nPTKH467-g4N0YBW0zpb" + }, + "zIndex": 999, + "width": 50, + "height": 20, + "measured": { + "width": 290, + "height": 20 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -189.45066814637346, + "y": 1628.7461547010141 + } + }, + { + "id": "gJbwBCJ4gnRTxZBI70WdQ", + "type": "vertical", + "position": { + "x": -196.81180589576024, + "y": 1473.339181586816 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.65 + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 165 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -196.81180589576024, + "y": 1473.339181586816 + } + }, + { + "id": "p3pDkuT1eGPgzMjrvXPh_", + "type": "vertical", + "position": { + "x": 205.11996452082155, + "y": 1648.7461547010141 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 101 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 205.11996452082155, + "y": 1648.7461547010141 + } + }, + { + "id": "utVj1oJEgIbwc21I6L0u5", + "type": "vertical", + "position": { + "x": 210.93775495655632, + "y": 1130.0353435831921 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "p3pDkuT1eGPgzMjrvXPh_" + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 101 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 210.93775495655632, + "y": 1130.0353435831921 + } + }, + { + "id": "cq9nRpKmmRHuXHs2xBWJl", + "type": "vertical", + "position": { + "x": -216.8175069304428, + "y": 876.3984712635258 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.65, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 98 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -216.8175069304428, + "y": 876.3984712635258 + } + }, + { + "id": "CnTH2dKlQCHe2otZjB_rt", + "type": "vertical", + "position": { + "x": -216.8175069304428, + "y": 699.6235753518292 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.75 + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 193 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -216.8175069304428, + "y": 699.6235753518292 + } + }, + { + "id": "1qgNC-F2wRmAE-UbQ1tzZ", + "type": "horizontal", + "position": { + "x": -356.7748410324898, + "y": 321.40454436142437 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "horizontal node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 50, + "height": 20, + "measured": { + "width": 127, + "height": 20 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -356.7748410324898, + "y": 321.40454436142437 + } + }, + { + "id": "2Agwu9c_rJzdNjV4DUaFx", + "type": "section", + "position": { + "x": -709.7748410324898, + "y": 68.7294762338152 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "", + "style": { + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 150, + "height": 100, + "style": { + "width": 150, + "height": 100 + }, + "measured": { + "width": 355, + "height": 1236 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -709.7748410324898, + "y": 68.7294762338152 + } + }, + { + "id": "w33P_0jGA6CV8uKi_d-bt", + "type": "horizontal", + "position": { + "x": -161.6381872719935, + "y": 150.9393516042962 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "horizontal node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 50, + "height": 20, + "measured": { + "width": 150, + "height": 20 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -161.6381872719935, + "y": 150.9393516042962 + } + }, + { + "id": "xMeeAFhcYrR_hjli3QOam", + "type": "section", + "position": { + "x": 9.04933185362654, + "y": 138.4642163827375 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "", + "style": { + "fontSize": 17, + "backgroundColor": "#ffffff", + "borderColor": "#000000" + } + }, + "zIndex": -999, + "width": 150, + "height": 100, + "style": { + "width": 150, + "height": 100 + }, + "measured": { + "width": 338, + "height": 227 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 9.04933185362654, + "y": 138.4642163827375 + } + }, + { + "id": "HU7wZWiES3m3xl1-NYP6F", + "type": "title", + "position": { + "x": -255.8175069304428, + "y": -38.879087788307686 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Rust", + "style": { + "fontSize": 28, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "measured": { + "width": 98, + "height": 68 + }, + "dragging": false, + "focusable": true, + "width": 98, + "height": 68, + "positionAbsolute": { + "x": -255.8175069304428, + "y": -38.879087788307686 + } + }, + { + "id": "uqyE79OItPOX33E5FoGel", + "type": "vertical", + "position": { + "x": -216.8175069304428, + "y": -133.0992517776511 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.75, + "stroke": "#2B78E4" + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 81 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -216.8175069304428, + "y": -133.0992517776511 + } + }, + { + "id": "CCmziWV0VnzZxVbjVF_br", + "type": "paragraph", + "position": { + "x": -15.138187271993502, + "y": -148.2948532825934 + }, + "selected": false, + "data": { + "label": "Find the interactive version of this roadmap and more roadmaps at", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "borderColor": "#000000", + "backgroundColor": "#FFFFFf" + }, + "oldId": "kpF15oUmlUmk1qVGEBB7Y" + }, + "zIndex": 999, + "width": 355, + "height": 143, + "positionAbsolute": { + "x": -15.138187271993502, + "y": -148.2948532825934 + }, + "dragging": false, + "selectable": true, + "focusable": true, + "style": { + "width": 355, + "height": 143 + }, + "resizing": false, + "measured": { + "width": 361, + "height": 151 + } + }, + { + "id": "if9eTna5NRTMStVwpSwDP", + "type": "button", + "position": { + "x": -0.13818727199350178, + "y": -62.09925177765109 + }, + "selected": false, + "data": { + "label": "roadmap.sh", + "href": "https://roadmap.sh", + "color": "#ffffff", + "backgroundColor": "#4136D6", + "style": { + "fontSize": 17 + }, + "oldId": "2zqZkyVgigifcRS1H7F_b" + }, + "zIndex": 999, + "width": 330, + "height": 49, + "dragging": false, + "style": { + "width": 330, + "height": 49 + }, + "resizing": false, + "positionAbsolute": { + "x": -0.13818727199350178, + "y": -62.09925177765109 + }, + "selectable": true, + "focusable": true, + "measured": { + "width": 331, + "height": 49 + } + }, + { + "id": "4U-HZQGH7kaWCB94Xy8Mh", + "type": "topic", + "position": { + "x": -298.8175069304428, + "y": 136.4393516042962 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Introduction", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "08qKtgnhJ3tlb5JKfTDf5" + }, + "zIndex": 999, + "width": 137, + "height": 49, + "measured": { + "width": 184, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 136.4393516042962 + } + }, + { + "id": "cMfsRtvzvDZZJ0TqeUOxm", + "type": "subtopic", + "position": { + "x": 9.861812728006498, + "y": 83.4393516042962 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "What is Rust?", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "W4gEPRYmk5Y7y3PjI6fR7" + }, + "zIndex": 999, + "width": 284, + "height": 49, + "style": { + "width": 284 + }, + "measured": { + "width": 157, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 9.861812728006498, + "y": 83.4393516042962 + } + }, + { + "width": 21, + "height": 74, + "id": "ef-jFKMs8jw3Ti94jem96", + "type": "vertical", + "position": { + "x": -187.22896441825404, + "y": 3284.899845583502 + }, + "selected": false, + "data": { + "label": "vertical node", + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2B78E4" + }, + "oldId": "RLtk1C3gofHnLJ17x3o5b" + }, + "zIndex": 999, + "positionAbsolute": { + "x": -187.22896441825404, + "y": 3284.899845583502 + }, + "dragging": false, + "focusable": true, + "style": { + "width": 21, + "height": 74 + }, + "resizing": false, + "selectable": true, + "measured": { + "width": 21, + "height": 74 + } + }, + { + "width": 410, + "height": 119, + "id": "0vLaVNJaJSHZ_bHli6Qzs", + "type": "paragraph", + "position": { + "x": -415.228964418254, + "y": 3181.7541881503926 + }, + "selected": false, + "data": { + "label": "Continue learning with following roadmaps", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center", + "borderColor": "#000000", + "backgroundColor": "WHITe" + }, + "oldId": "m9eO0jLGuR_9w2JJbe_g2" + }, + "zIndex": 999, + "positionAbsolute": { + "x": -415.228964418254, + "y": 3181.7541881503926 + }, + "dragging": false, + "style": { + "width": 410, + "height": 119 + }, + "resizing": false, + "focusable": true, + "selectable": true, + "measured": { + "width": 477, + "height": 117 + } + }, + { + "width": 380, + "height": 49, + "id": "StxLh1r3qXqyRSqfJGird", + "type": "button", + "position": { + "x": -403.62298223659093, + "y": 3235.899845583502 + }, + "selected": false, + "data": { + "label": "Backend", + "href": "https://roadmap.sh/backend", + "color": "#FFf", + "backgroundColor": "#4136D6", + "style": { + "fontSize": 17 + }, + "borderColor": "#4136D6", + "oldId": "OIcmPSbdsuWapb6HZ4BEi" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -403.62298223659093, + "y": 3235.899845583502 + }, + "style": { + "width": 380, + "height": 49 + }, + "focusable": true, + "resizing": false, + "selectable": true, + "measured": { + "width": 229, + "height": 49 + } + }, + { + "width": 380, + "height": 49, + "id": "OIcmPSbdsuWapb6HZ4BEi", + "type": "button", + "position": { + "x": -167.6229822365909, + "y": 3235.899845583502 + }, + "selected": false, + "data": { + "label": "DevOps", + "href": "https://roadmap.sh/devops", + "color": "#FFf", + "backgroundColor": "#4136D6", + "style": { + "fontSize": 17 + }, + "borderColor": "#4136D6", + "oldId": "cmSSwPPiiHwYh9ct14N6A" + }, + "zIndex": 999, + "dragging": false, + "positionAbsolute": { + "x": -167.6229822365909, + "y": 3235.899845583502 + }, + "style": { + "width": 380, + "height": 49 + }, + "focusable": true, + "resizing": false, + "selectable": true, + "measured": { + "width": 219, + "height": 49 + } + }, + { + "id": "VhSEH_RoWFt1z2lial7xZ", + "type": "subtopic", + "position": { + "x": 173.04933185362654, + "y": 83.4393516042962 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Why use Rust?", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 284, + "height": 49, + "style": { + "width": 284 + }, + "measured": { + "width": 174, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 173.04933185362654, + "y": 83.4393516042962 + } + }, + { + "id": "OSaXhs52pEviq0EpWXxVX", + "type": "label", + "position": { + "x": 100.54933185362654, + "y": 149.90454436142437 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Environment Setup", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000" + }, + "zIndex": 999, + "measured": { + "width": 162, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 162, + "height": 36, + "positionAbsolute": { + "x": 100.54933185362654, + "y": 149.90454436142437 + } + }, + { + "id": "-IqA02ObYvXPW1ot6t_b9", + "type": "subtopic", + "position": { + "x": 28.54933185362654, + "y": 192.90454436142437 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Installing Rust and Cargo", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "eYCNYtwXBjZwcPUe7QYZ-" + }, + "zIndex": 999, + "width": 239, + "height": 49, + "measured": { + "width": 306, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 28.54933185362654, + "y": 192.90454436142437 + } + }, + { + "id": "oyP1ZyOgDC4nYEQXHwdVQ", + "type": "subtopic", + "position": { + "x": 28.54933185362654, + "y": 246.90454436142437 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "IDEs and Rust Toolchains", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "eYCNYtwXBjZwcPUe7QYZ-" + }, + "zIndex": 999, + "width": 242, + "height": 49, + "measured": { + "width": 306, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 28.54933185362654, + "y": 246.90454436142437 + } + }, + { + "id": "eYCNYtwXBjZwcPUe7QYZ-", + "type": "subtopic", + "position": { + "x": 28.54933185362654, + "y": 300.90454436142437 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Rust REPL (Rust Playground)", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 271, + "height": 49, + "measured": { + "width": 306, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 28.54933185362654, + "y": 300.90454436142437 + } + }, + { + "id": "fqzj-7vQ3Chj0HlamBI2-", + "type": "vertical", + "position": { + "x": -16.638187271993502, + "y": 83.4393516042962 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "vertical node", + "style": { + "stroke": "#2B78E4", + "strokeWidth": 3.75 + } + }, + "zIndex": 999, + "width": 20, + "height": 150, + "measured": { + "width": 20, + "height": 283 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -16.638187271993502, + "y": 83.4393516042962 + } + }, + { + "id": "6E4pGifNfSAq6SbzfzFNT", + "type": "topic", + "position": { + "x": -298.8175069304428, + "y": 306.90454436142437 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Language Basics", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "08qKtgnhJ3tlb5JKfTDf5" + }, + "zIndex": 999, + "width": 178, + "height": 49, + "measured": { + "width": 184, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 306.90454436142437 + } + }, + { + "id": "fJH8kw4_0b2BDI1vozwY7", + "type": "label", + "position": { + "x": -624.9579568300146, + "y": 82.0310613003135 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Syntax and Semantics", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000" + }, + "zIndex": 999, + "measured": { + "width": 184, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 185, + "height": 36, + "positionAbsolute": { + "x": -624.9579568300146, + "y": 82.0310613003135 + } + }, + { + "id": "Gw5E21W5zis-RUIgNSEV2", + "type": "subtopic", + "position": { + "x": -692.9579568300146, + "y": 135.0310613003135 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Variables, DataTypes and Constants", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "yqp3UePmSlGyOYpxITis4" + }, + "zIndex": 999, + "width": 320, + "height": 49, + "style": { + "width": 320 + }, + "measured": { + "width": 320, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -692.9579568300146, + "y": 135.0310613003135 + } + }, + { + "id": "u2wlnmE1uLaTqWw35UF0a", + "type": "subtopic", + "position": { + "x": -692.9579568300146, + "y": 192.03106130031347 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Control Flow and Constructs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "yqp3UePmSlGyOYpxITis4" + }, + "zIndex": 999, + "width": 320, + "height": 49, + "style": { + "width": 320 + }, + "measured": { + "width": 320, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -692.9579568300146, + "y": 192.03106130031347 + } + }, + { + "id": "5hKJaMKpeFEUi3S1Hpiyk", + "type": "subtopic", + "position": { + "x": -692.9579568300146, + "y": 249.03106130031352 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Functions and Method Syntax", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "yqp3UePmSlGyOYpxITis4" + }, + "zIndex": 999, + "width": 320, + "height": 49, + "style": { + "width": 320 + }, + "measured": { + "width": 320, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -692.9579568300146, + "y": 249.03106130031352 + } + }, + { + "id": "yqp3UePmSlGyOYpxITis4", + "type": "subtopic", + "position": { + "x": -692.9579568300146, + "y": 306.0310613003135 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Pattern Matching & Destructuring", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 320, + "height": 49, + "style": { + "width": 320 + }, + "measured": { + "width": 320, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -692.9579568300146, + "y": 306.0310613003135 + } + }, + { + "id": "ok-T33GCsTCkB9ABDzCDG", + "type": "label", + "position": { + "x": -585.2748410324898, + "y": 375.43935160429623 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Constructs", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000", + "oldId": "HpItJIkCXXiVOXO58si4G" + }, + "zIndex": 999, + "measured": { + "width": 99, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 99, + "height": 36, + "positionAbsolute": { + "x": -585.2748410324898, + "y": 375.43935160429623 + } + }, + { + "id": "FswpjWqqt8-BzUTsDDjel", + "type": "subtopic", + "position": { + "x": -699.1322659713495, + "y": 425.88556487375047 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Enums", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "B-S1hE-ofNTutnkc2hJBf" + }, + "zIndex": 999, + "width": 98, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -699.1322659713495, + "y": 425.88556487375047 + } + }, + { + "id": "Mi9mQ-8gyDPd8Mbu1zuHt", + "type": "subtopic", + "position": { + "x": -469.1322659713495, + "y": 425.88556487375047 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Structs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "JAgjrf5WDXiorZ6gFRzTc" + }, + "zIndex": 999, + "width": 99, + "height": 49, + "measured": { + "width": 98, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -469.1322659713495, + "y": 425.88556487375047 + } + }, + { + "id": "SJMuIEuHp8X6nfLb0k0TU", + "type": "subtopic", + "position": { + "x": -593.1322659713495, + "y": 425.88556487375047 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Traits", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "PskCueCc9pSxfnSzfdX-u" + }, + "zIndex": 999, + "width": 87, + "height": 49, + "measured": { + "width": 118, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -593.1322659713495, + "y": 425.88556487375047 + } + }, + { + "id": "HzWHDQZjA9OgVZEWrmhKf", + "type": "subtopic", + "position": { + "x": -699.1322659713495, + "y": 480.45434714576345 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Impl Blocks", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "U9Bd-GO0QwYVLvESR4PTb" + }, + "zIndex": 999, + "width": 133, + "height": 49, + "measured": { + "width": 328, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -699.1322659713495, + "y": 480.45434714576345 + } + }, + { + "id": "LwSdC6ojcHe6z5TbudE4v", + "type": "label", + "position": { + "x": -603.7748410324898, + "y": 542.940529972459 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Data Structures", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000", + "oldId": "HpItJIkCXXiVOXO58si4G" + }, + "zIndex": 999, + "measured": { + "width": 136, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 136, + "height": 36, + "positionAbsolute": { + "x": -603.7748410324898, + "y": 542.940529972459 + } + }, + { + "id": "FHZSxSiOZYNBEz6tu8wuF", + "type": "subtopic", + "position": { + "x": -697.9579568300147, + "y": 590.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Integers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "B-S1hE-ofNTutnkc2hJBf" + }, + "zIndex": 999, + "width": 109, + "height": 49, + "measured": { + "width": 111, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -697.9579568300147, + "y": 590.2888446606187 + } + }, + { + "id": "bjwJCGMx5ZfrH7vz3eLS7", + "type": "subtopic", + "position": { + "x": -467.1322659713495, + "y": 590.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Boolean", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "JAgjrf5WDXiorZ6gFRzTc" + }, + "zIndex": 999, + "width": 109, + "height": 49, + "measured": { + "width": 98, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -467.1322659713495, + "y": 590.2888446606187 + } + }, + { + "id": "rNHHp1GgmRnKIYlZayi59", + "type": "subtopic", + "position": { + "x": -580.9579568300147, + "y": 590.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Floats", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "PskCueCc9pSxfnSzfdX-u" + }, + "zIndex": 999, + "width": 92, + "height": 49, + "measured": { + "width": 107, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -580.9579568300147, + "y": 590.2888446606187 + } + }, + { + "id": "dXMJb2wDmmh2jie1AnPoK", + "type": "subtopic", + "position": { + "x": -697.9579568300147, + "y": 643.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Character", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "B-S1hE-ofNTutnkc2hJBf" + }, + "zIndex": 999, + "width": 122, + "height": 49, + "measured": { + "width": 117, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -697.9579568300147, + "y": 643.2888446606187 + } + }, + { + "id": "81_J7CwtUUjYPvKV_prg3", + "type": "subtopic", + "position": { + "x": -467.1322659713495, + "y": 643.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Tuple", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "JAgjrf5WDXiorZ6gFRzTc" + }, + "zIndex": 999, + "width": 87, + "height": 49, + "measured": { + "width": 98, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -467.1322659713495, + "y": 643.2888446606187 + } + }, + { + "id": "Hu1jf46OpX44nam_UvYqc", + "type": "subtopic", + "position": { + "x": -575.9579568300147, + "y": 643.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "String", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "PskCueCc9pSxfnSzfdX-u" + }, + "zIndex": 999, + "width": 90, + "height": 49, + "measured": { + "width": 102, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -575.9579568300147, + "y": 643.2888446606187 + } + }, + { + "id": "2DbdHCjFzGHwCUETakaGh", + "type": "subtopic", + "position": { + "x": -696.7836476886799, + "y": 696.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Array", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "B-S1hE-ofNTutnkc2hJBf" + }, + "zIndex": 999, + "width": 85, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -696.7836476886799, + "y": 696.2888446606187 + } + }, + { + "id": "JAgjrf5WDXiorZ6gFRzTc", + "type": "subtopic", + "position": { + "x": -485.1322659713495, + "y": 696.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Hashmap", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 118, + "height": 49, + "measured": { + "width": 116, + "height": 49 + }, + "resizing": true, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -485.1322659713495, + "y": 696.2888446606187 + } + }, + { + "id": "PskCueCc9pSxfnSzfdX-u", + "type": "subtopic", + "position": { + "x": -592.7836476886799, + "y": 696.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Vector", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 94, + "height": 49, + "measured": { + "width": 102, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -592.7836476886799, + "y": 696.2888446606187 + } + }, + { + "id": "b1iYy4Hvkj47Q13V2HE4i", + "type": "subtopic", + "position": { + "x": -696.7836476886799, + "y": 749.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Hashset", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "jdndHBzmdgI6uYql6bO4W" + }, + "zIndex": 999, + "width": 109, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -696.7836476886799, + "y": 749.2888446606187 + } + }, + { + "id": "iR0ewc2yURqS7bfMWfoBi", + "type": "subtopic", + "position": { + "x": -592.1322659713495, + "y": 749.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "LinkedList", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "B-S1hE-ofNTutnkc2hJBf" + }, + "zIndex": 999, + "width": 124, + "height": 49, + "measured": { + "width": 114, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -592.1322659713495, + "y": 749.2888446606187 + } + }, + { + "id": "B-S1hE-ofNTutnkc2hJBf", + "type": "subtopic", + "position": { + "x": -473.1322659713495, + "y": 749.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Stack", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 87, + "height": 49, + "measured": { + "width": 104, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -473.1322659713495, + "y": 749.2888446606187 + } + }, + { + "id": "fq2NMV-QV9ayJl82ZWzov", + "type": "subtopic", + "position": { + "x": -696.7836476886799, + "y": 803.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Queue", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "jdndHBzmdgI6uYql6bO4W" + }, + "zIndex": 999, + "width": 97, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -696.7836476886799, + "y": 803.2888446606187 + } + }, + { + "id": "jdndHBzmdgI6uYql6bO4W", + "type": "subtopic", + "position": { + "x": -592.1322659713495, + "y": 803.2888446606187 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Binary Heap", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "B-S1hE-ofNTutnkc2hJBf" + }, + "zIndex": 999, + "width": 139, + "height": 49, + "measured": { + "width": 222, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -592.1322659713495, + "y": 803.2888446606187 + } + }, + { + "id": "jfdA_UG-Fm_3nQzrAbVv2", + "type": "label", + "position": { + "x": -617.2748410324898, + "y": 869.3984712635258 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Ownsership System", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000", + "oldId": "HpItJIkCXXiVOXO58si4G" + }, + "zIndex": 999, + "measured": { + "width": 166, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 166, + "height": 36, + "positionAbsolute": { + "x": -617.2748410324898, + "y": 869.3984712635258 + } + }, + { + "id": "2UQ3AuGkDbT0-54l0rOGM", + "type": "subtopic", + "position": { + "x": -698.2748410324898, + "y": 912.3984712635258 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Ownsership Rules & Memory Safety", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "U9Bd-GO0QwYVLvESR4PTb" + }, + "zIndex": 999, + "width": 318, + "height": 49, + "measured": { + "width": 328, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -698.2748410324898, + "y": 912.3984712635258 + } + }, + { + "id": "-onH5vPffdcZFjjVcnEpk", + "type": "subtopic", + "position": { + "x": -698.2748410324898, + "y": 965.8111648956035 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Borrowing, References and Slices", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "U9Bd-GO0QwYVLvESR4PTb" + }, + "zIndex": 999, + "width": 304, + "height": 49, + "measured": { + "width": 328, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -698.2748410324898, + "y": 965.8111648956035 + } + }, + { + "id": "UdXq0H8599cDTKXaIlPqt", + "type": "subtopic", + "position": { + "x": -698.2748410324898, + "y": 1018.9210950930203 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Deep Dive: Stack vs Heap", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "U9Bd-GO0QwYVLvESR4PTb" + }, + "zIndex": 999, + "width": 244, + "height": 49, + "measured": { + "width": 328, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -698.2748410324898, + "y": 1018.9210950930203 + } + }, + { + "id": "HpItJIkCXXiVOXO58si4G", + "type": "label", + "position": { + "x": -642.2748410324898, + "y": 1086.6456624104587 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Advanced Data Structures", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000" + }, + "zIndex": 999, + "measured": { + "width": 216, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 216, + "height": 36, + "positionAbsolute": { + "x": -642.2748410324898, + "y": 1086.6456624104587 + } + }, + { + "id": "LWgaZWTJVWLDes3HzflRh", + "type": "subtopic", + "position": { + "x": -699.1322659713494, + "y": 1130.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "BTreeMap", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "3nXJg5Y4SUug_dEAj0eQm" + }, + "zIndex": 999, + "width": 126, + "height": 49, + "measured": { + "width": 111, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -699.1322659713494, + "y": 1130.2144446824718 + } + }, + { + "id": "FsyLYRQP_rs4qL7IAj9Mo", + "type": "subtopic", + "position": { + "x": -583.7748410324897, + "y": 1130.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "BTreeSet", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "U9Bd-GO0QwYVLvESR4PTb" + }, + "zIndex": 999, + "width": 118, + "height": 49, + "measured": { + "width": 111, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -583.7748410324897, + "y": 1130.2144446824718 + } + }, + { + "id": "U9Bd-GO0QwYVLvESR4PTb", + "type": "subtopic", + "position": { + "x": -468.41741609363, + "y": 1130.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "RC", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 69, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -468.41741609363, + "y": 1130.2144446824718 + } + }, + { + "id": "yYmV5qkldu0FkDhOhWOXs", + "type": "subtopic", + "position": { + "x": -699.1322659713495, + "y": 1184.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Arc", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "3nXJg5Y4SUug_dEAj0eQm" + }, + "zIndex": 999, + "width": 70, + "height": 49, + "measured": { + "width": 65, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -699.1322659713495, + "y": 1184.2144446824718 + } + }, + { + "id": "GbbeV3r27IBEKHyiyLqs6", + "type": "subtopic", + "position": { + "x": -629.1322659713495, + "y": 1184.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Mutex", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "3nXJg5Y4SUug_dEAj0eQm" + }, + "zIndex": 999, + "width": 92, + "height": 49, + "measured": { + "width": 94, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -629.1322659713495, + "y": 1184.2144446824718 + } + }, + { + "id": "WzGl4DkANjUu7VC1AIWI-", + "type": "subtopic", + "position": { + "x": -528.41741609363, + "y": 1184.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "RwLock", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "3nXJg5Y4SUug_dEAj0eQm" + }, + "zIndex": 999, + "width": 105, + "height": 49, + "measured": { + "width": 158, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -528.41741609363, + "y": 1184.2144446824718 + } + }, + { + "id": "3nXJg5Y4SUug_dEAj0eQm", + "type": "subtopic", + "position": { + "x": -699.7836476886799, + "y": 1238.2144446824718 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Channels", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "U9Bd-GO0QwYVLvESR4PTb" + }, + "zIndex": 999, + "width": 118, + "height": 49, + "measured": { + "width": 330, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -699.7836476886799, + "y": 1238.2144446824718 + } + }, + { + "id": "X2gB0m-ZKSC4TJyIcwsMx", + "type": "topic", + "position": { + "x": -298.8175069304428, + "y": 458.9114782175309 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Error Handling", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "08qKtgnhJ3tlb5JKfTDf5" + }, + "zIndex": 999, + "width": 157, + "height": 49, + "measured": { + "width": 184, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 458.9114782175309 + } + }, + { + "id": "wQHkBydWsiGEOZMdKmz40", + "type": "subtopic", + "position": { + "x": 12.937754956556319, + "y": 405.9114782175308 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Option and Result Enumerations", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "LwqOxYY9E9MUDgz2M40uV" + }, + "zIndex": 999, + "width": 327, + "height": 49, + "style": { + "width": 327 + }, + "measured": { + "width": 335, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 12.937754956556319, + "y": 405.9114782175308 + } + }, + { + "id": "pTC1ucmErVnMbNFnYLJK7", + "type": "subtopic", + "position": { + "x": 12.937754956556319, + "y": 458.9114782175309 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Propagating Errors and `?` Operator", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "LwqOxYY9E9MUDgz2M40uV" + }, + "zIndex": 999, + "width": 327, + "height": 49, + "style": { + "width": 327 + }, + "measured": { + "width": 335, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 12.937754956556319, + "y": 458.9114782175309 + } + }, + { + "id": "LwqOxYY9E9MUDgz2M40uV", + "type": "subtopic", + "position": { + "x": 12.937754956556319, + "y": 511.9114782175309 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Custom Error Types and Traits", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 327, + "height": 49, + "style": { + "width": 327 + }, + "measured": { + "width": 335, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 12.937754956556319, + "y": 511.9114782175309 + } + }, + { + "id": "Zpowr_NGd-E2DC3g-oW9h", + "type": "topic", + "position": { + "x": -298.8175069304428, + "y": 650.6235753518292 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Modules & Crates", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "08qKtgnhJ3tlb5JKfTDf5" + }, + "zIndex": 999, + "width": 182, + "height": 49, + "measured": { + "width": 184, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 650.6235753518292 + } + }, + { + "id": "c_SdccEXEJyh4ymWzvCeX", + "type": "subtopic", + "position": { + "x": 12.937754956556319, + "y": 597.6235753518292 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Code Organization & Namespacing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "Op0-bdMV3kE9Be6Ot1aC6" + }, + "zIndex": 999, + "width": 375, + "height": 49, + "style": { + "width": 375 + }, + "measured": { + "width": 335, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 12.937754956556319, + "y": 597.6235753518292 + } + }, + { + "id": "PkePVzV-b1pgFJP5xID5_", + "type": "subtopic", + "position": { + "x": 12.937754956556319, + "y": 650.6235753518292 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Dependency Management with Cargo", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "Op0-bdMV3kE9Be6Ot1aC6" + }, + "zIndex": 999, + "width": 375, + "height": 49, + "style": { + "width": 375 + }, + "measured": { + "width": 335, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 12.937754956556319, + "y": 650.6235753518292 + } + }, + { + "id": "Op0-bdMV3kE9Be6Ot1aC6", + "type": "subtopic", + "position": { + "x": 12.937754956556319, + "y": 703.6235753518292 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Publishing on Crates.io", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 375, + "height": 49, + "style": { + "width": 375 + }, + "measured": { + "width": 335, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 12.937754956556319, + "y": 703.6235753518292 + } + }, + { + "id": "pehYc_xLrs6BFUbcpPTiJ", + "type": "topic", + "position": { + "x": 93.93775495655632, + "y": 1099.8111648956035 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Concurrency & Parallelism", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "eTpZXd8E2jVBmk_aSLZYV" + }, + "zIndex": 999, + "width": 245, + "height": 49, + "measured": { + "width": 254, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 93.93775495655632, + "y": 1099.8111648956035 + } + }, + { + "id": "pJN260pWQVO0gHxi1-_3U", + "type": "subtopic", + "position": { + "x": -15.19003022483139, + "y": 1185.0353435831921 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Threads, Channels and Message Passing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "kVfBbsOHoixvqb4dYTG3Q" + }, + "zIndex": 999, + "width": 362, + "height": 49, + "measured": { + "width": 365, + "height": 49 + }, + "dragging": false, + "focusable": true, + "resizing": false, + "positionAbsolute": { + "x": -15.19003022483139, + "y": 1185.0353435831921 + } + }, + { + "id": "n1Epl_nBuoXW2OE0IKYVR", + "type": "subtopic", + "position": { + "x": -15.19003022483139, + "y": 1238.0353435831921 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Atomic Operations & Memory Barriers", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "kVfBbsOHoixvqb4dYTG3Q" + }, + "zIndex": 999, + "width": 336, + "height": 49, + "measured": { + "width": 365, + "height": 49 + }, + "dragging": false, + "focusable": true, + "resizing": false, + "positionAbsolute": { + "x": -15.19003022483139, + "y": 1238.0353435831921 + } + }, + { + "id": "kVfBbsOHoixvqb4dYTG3Q", + "type": "subtopic", + "position": { + "x": -15.19003022483139, + "y": 1291.0353435831921 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Futures and Async/Await Paradigm", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 311, + "height": 49, + "measured": { + "width": 365, + "height": 49 + }, + "dragging": false, + "focusable": true, + "resizing": false, + "positionAbsolute": { + "x": -15.19003022483139, + "y": 1291.0353435831921 + } + }, + { + "id": "08qKtgnhJ3tlb5JKfTDf5", + "type": "topic", + "position": { + "x": -298.8175069304428, + "y": 859.0473987256978 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Testing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "h0aeBhQRkDxNeFwDxT4Tf" + }, + "zIndex": 999, + "width": 101, + "height": 49, + "measured": { + "width": 184, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 859.0473987256978 + } + }, + { + "id": "w9coeW9-crDxu0KC-9gEU", + "type": "subtopic", + "position": { + "x": -298.8175069304428, + "y": 947.7024216855308 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Unit & Integration Testing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "HEqfA6An6ZeT3z4R610en" + }, + "zIndex": 999, + "width": 240, + "height": 49, + "measured": { + "width": 362, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 947.7024216855308 + } + }, + { + "id": "HEqfA6An6ZeT3z4R610en", + "type": "subtopic", + "position": { + "x": -298.8175069304428, + "y": 1005.7024216855308 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Mocking & Property Based Testing", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 309, + "height": 49, + "measured": { + "width": 362, + "height": 53 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 1005.7024216855308 + } + }, + { + "id": "zLKbYX0nnbfD5n3P_JRaS", + "type": "topic", + "position": { + "x": -278.81180589576024, + "y": 1430.339181586816 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Traits & Generics", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "eTpZXd8E2jVBmk_aSLZYV" + }, + "zIndex": 999, + "width": 178, + "height": 49, + "measured": { + "width": 184, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -278.81180589576024, + "y": 1430.339181586816 + } + }, + { + "id": "_EicstELZcdesHiXFWJGu", + "type": "subtopic", + "position": { + "x": -15.19003022483139, + "y": 1377.339181586816 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Trait Definitions & Implementations", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "_hxwo_iAdOwlWBltv7i6i" + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { + "width": 321 + }, + "measured": { + "width": 365, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -15.19003022483139, + "y": 1377.339181586816 + } + }, + { + "id": "pRDgDtRIVpNM2CdhSOS3Q", + "type": "subtopic", + "position": { + "x": -15.19003022483139, + "y": 1430.339181586816 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Trait Bounds and Associated Types", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "_hxwo_iAdOwlWBltv7i6i" + }, + "zIndex": 999, + "width": 321, + "height": 49, + "style": { + "width": 321 + }, + "measured": { + "width": 365, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -15.19003022483139, + "y": 1430.339181586816 + } + }, + { + "id": "_hxwo_iAdOwlWBltv7i6i", + "type": "subtopic", + "position": { + "x": -15.19003022483139, + "y": 1483.339181586816 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Generics & Type-Level Programming", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 321, + "height": 69, + "style": { + "width": 321 + }, + "measured": { + "width": 365, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -15.19003022483139, + "y": 1483.339181586816 + } + }, + { + "id": "UZ56NKloehcxUFNuSeO19", + "type": "topic", + "position": { + "x": 84.61996452082155, + "y": 1622.0231760223057 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Lifetimes & Borrow Checker", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "eTpZXd8E2jVBmk_aSLZYV" + }, + "zIndex": 999, + "width": 259, + "height": 49, + "measured": { + "width": 261, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 84.61996452082155, + "y": 1622.0231760223057 + } + }, + { + "id": "R5HIVS-lyCp9b46aXqx2m", + "type": "subtopic", + "position": { + "x": -7.380035479178417, + "y": 1718.8152557429603 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Explicit Lifetime Annotations", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "7yVvMnvCvLbFa51pESx0j" + }, + "zIndex": 999, + "width": 262, + "height": 49, + "measured": { + "width": 353, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -7.380035479178417, + "y": 1718.8152557429603 + } + }, + { + "id": "qJI8GObmsxyc_tTtUEOAd", + "type": "subtopic", + "position": { + "x": -7.380035479178417, + "y": 1771.8152557429603 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Lifetime Elision Rules", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "7yVvMnvCvLbFa51pESx0j" + }, + "zIndex": 999, + "width": 210, + "height": 49, + "measured": { + "width": 353, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -7.380035479178417, + "y": 1771.8152557429603 + } + }, + { + "id": "7yVvMnvCvLbFa51pESx0j", + "type": "subtopic", + "position": { + "x": -7.380035479178417, + "y": 1824.8152557429603 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Covariant & Contravariant Lifetimes", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 318, + "height": 49, + "measured": { + "width": 353, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -7.380035479178417, + "y": 1824.8152557429603 + } + }, + { + "id": "eTpZXd8E2jVBmk_aSLZYV", + "type": "topic", + "position": { + "x": -685.2748410324898, + "y": 1634.2461547010141 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Macros & Metaprogramming", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "08qKtgnhJ3tlb5JKfTDf5" + }, + "zIndex": 999, + "width": 264, + "height": 49, + "measured": { + "width": 284, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -685.2748410324898, + "y": 1634.2461547010141 + } + }, + { + "id": "AXWXXsww7Xkl3BYgtThNe", + "type": "subtopic", + "position": { + "x": -709.7748410324898, + "y": 1417.8063556289276 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Declarative Macros with macro_rules!", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "Kb7KF7JCMaWFz-GuaQmQV" + }, + "zIndex": 999, + "width": 333, + "height": 49, + "style": { + "width": 333 + }, + "measured": { + "width": 333, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -709.7748410324898, + "y": 1417.8063556289276 + } + }, + { + "id": "bkVM1OIbv4XUpY6FQb8x_", + "type": "subtopic", + "position": { + "x": -709.7748410324898, + "y": 1474.8063556289276 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Procedural Macros & Custom Derive", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "Kb7KF7JCMaWFz-GuaQmQV" + }, + "zIndex": 999, + "width": 333, + "height": 49, + "style": { + "width": 333 + }, + "measured": { + "width": 333, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -709.7748410324898, + "y": 1474.8063556289276 + } + }, + { + "id": "Kb7KF7JCMaWFz-GuaQmQV", + "type": "subtopic", + "position": { + "x": -709.7748410324898, + "y": 1533.339181586816 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Domain Specific Languages (DSLs)", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 333, + "height": 49, + "style": { + "width": 333 + }, + "measured": { + "width": 333, + "height": 53 + }, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -709.7748410324898, + "y": 1533.339181586816 + } + }, + { + "id": "KomYBYxj0FTrJDYB3nU5B", + "type": "topic", + "position": { + "x": -685.2748410324898, + "y": 1904.2497741109262 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Web Development", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 186, + "height": 49, + "measured": { + "width": 284, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -685.2748410324898, + "y": 1904.2497741109262 + } + }, + { + "id": "9emZ0CCIMAx275G0dXZak", + "type": "horizontal", + "position": { + "x": -586.7836476886799, + "y": 1751.8152557429603 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#000000" + } + }, + "zIndex": 999, + "width": 50, + "height": 20, + "measured": { + "width": 348, + "height": 20 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -586.7836476886799, + "y": 1751.8152557429603 + } + }, + { + "id": "JH9PTRZi13t_dX6STd1Wr", + "type": "horizontal", + "position": { + "x": -586.7836476886799, + "y": 1756 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "horizontal node", + "style": { + "stroke": "#000000", + "strokeWidth": 7 + }, + "oldId": "9emZ0CCIMAx275G0dXZak" + }, + "zIndex": 999, + "measured": { + "width": 74, + "height": 20 + }, + "dragging": false, + "width": 50, + "height": 20, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -586.7836476886799, + "y": 1756 + } + }, + { + "id": "VLKEl_NCu9JEA9qAQYm_a", + "type": "label", + "position": { + "x": -443.78364768867993, + "y": 1766.8152557429603 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Ecosystem and Libraries", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000" + }, + "zIndex": 999, + "measured": { + "width": 205, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 205, + "height": 36, + "positionAbsolute": { + "x": -443.78364768867993, + "y": 1766.8152557429603 + } + }, + { + "id": "duQ1RO1lqq793mfb5w31P", + "type": "subtopic", + "position": { + "x": -298.047381647763, + "y": 1850.289316122862 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Axum", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ApjwY_70OGG_dNIC85oBD" + }, + "zIndex": 999, + "width": 119, + "height": 49, + "style": { + "width": 119 + }, + "measured": { + "width": 119, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -298.047381647763, + "y": 1850.289316122862 + } + }, + { + "id": "3Y90v2ysoMcyjDL24H7mC", + "type": "subtopic", + "position": { + "x": -174.20827066407475, + "y": 1850.289316122862 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Actix", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ApjwY_70OGG_dNIC85oBD" + }, + "zIndex": 999, + "width": 119, + "height": 49, + "style": { + "width": 119 + }, + "measured": { + "width": 119, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -174.20827066407475, + "y": 1850.289316122862 + } + }, + { + "id": "n5t3MUqmvrcr36VIIOw0u", + "type": "subtopic", + "position": { + "x": -298.047381647763, + "y": 1903.289316122862 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Leptos", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ApjwY_70OGG_dNIC85oBD" + }, + "zIndex": 999, + "width": 119, + "height": 49, + "style": { + "width": 119 + }, + "measured": { + "width": 119, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -298.047381647763, + "y": 1903.289316122862 + } + }, + { + "id": "GnSBtZoN9mAehRf5Eczng", + "type": "subtopic", + "position": { + "x": -174.20827066407475, + "y": 1903.289316122862 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Loco", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ApjwY_70OGG_dNIC85oBD" + }, + "zIndex": 999, + "width": 119, + "height": 49, + "style": { + "width": 119 + }, + "measured": { + "width": 119, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -174.20827066407475, + "y": 1903.289316122862 + } + }, + { + "id": "ApjwY_70OGG_dNIC85oBD", + "type": "subtopic", + "position": { + "x": -298.047381647763, + "y": 1956.2893161228621 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Rocket", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 119, + "height": 49, + "style": { + "width": 119 + }, + "measured": { + "width": 243, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -298.047381647763, + "y": 1956.2893161228621 + } + }, + { + "id": "yu0f5gALho0e8wzV10yow", + "type": "topic", + "position": { + "x": -685.2748410324898, + "y": 2119.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Asynchronous Programming", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 259, + "height": 49, + "measured": { + "width": 284, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -685.2748410324898, + "y": 2119.550309464411 + } + }, + { + "id": "H0mctp3Bj2OYfIGFDWGfz", + "type": "subtopic", + "position": { + "x": -684.3727988204032, + "y": 2200.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Tokio", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "3C9gCBAq3OQVb583S72D4" + }, + "zIndex": 999, + "width": 85, + "height": 49, + "measured": { + "width": 76, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -684.3727988204032, + "y": 2200.559081382036 + } + }, + { + "id": "_2uQInXPdOY-DpYTO1Prt", + "type": "subtopic", + "position": { + "x": -603.7748410324898, + "y": 2200.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "async-std", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "3C9gCBAq3OQVb583S72D4" + }, + "zIndex": 999, + "width": 119, + "height": 49, + "measured": { + "width": 121, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -603.7748410324898, + "y": 2200.559081382036 + } + }, + { + "id": "3C9gCBAq3OQVb583S72D4", + "type": "subtopic", + "position": { + "x": -478.1768832445764, + "y": 2200.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "smol", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 81, + "height": 49, + "measured": { + "width": 75, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -478.1768832445764, + "y": 2200.559081382036 + } + }, + { + "id": "0pcBebcTENRVf9F-ClydB", + "type": "label", + "position": { + "x": -310.547381647763, + "y": 2011.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Personal recommendation: Axum", + "style": { + "fontSize": 17 + }, + "href": "", + "color": "#000000" + }, + "zIndex": 999, + "measured": { + "width": 268, + "height": 38 + }, + "dragging": false, + "focusable": true, + "width": 268, + "height": 36, + "positionAbsolute": { + "x": -310.547381647763, + "y": 2011.550309464411 + } + }, + { + "id": "3pL0ARqk8uRNimopHSalW", + "type": "topic", + "position": { + "x": -300.6381872719935, + "y": 2119.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Networking", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 132, + "height": 49, + "measured": { + "width": 253, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -300.6381872719935, + "y": 2119.550309464411 + } + }, + { + "id": "TtajUXZpyNx9AmdUawm-8", + "type": "subtopic", + "position": { + "x": -300.6381872719935, + "y": 2200.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "reqwest", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "EHErECEYws05oi59OsZpC" + }, + "zIndex": 999, + "width": 106, + "height": 49, + "measured": { + "width": 90, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -300.6381872719935, + "y": 2200.559081382036 + } + }, + { + "id": "-MiN5ytI43EjgmWV55BhU", + "type": "subtopic", + "position": { + "x": -204.81180589576024, + "y": 2200.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "hyper", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ZXMKY0f7mqqlsvyH9u-LM" + }, + "zIndex": 999, + "width": 88, + "height": 49, + "measured": { + "width": 75, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -204.81180589576024, + "y": 2200.559081382036 + } + }, + { + "id": "qi1pmsY8bPk8nbHiBIGha", + "type": "subtopic", + "position": { + "x": -124.1381872719935, + "y": 2200.559081382036 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "quinn", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "LmFog_qXrS9e5ARhV6OD_" + }, + "zIndex": 999, + "width": 88, + "height": 49, + "measured": { + "width": 75, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -124.1381872719935, + "y": 2200.559081382036 + } + }, + { + "id": "gcmKSLWfBqx4aPZOmyQsg", + "type": "topic", + "position": { + "x": 51.619964520821554, + "y": 2119.550309464411 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Serialization / Deserialization", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 270, + "height": 49, + "measured": { + "width": 294, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 51.619964520821554, + "y": 2119.550309464411 + } + }, + { + "id": "EHErECEYws05oi59OsZpC", + "type": "subtopic", + "position": { + "x": 53.80188117353809, + "y": 2036.4195482899893 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Serde", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "LmFog_qXrS9e5ARhV6OD_" + }, + "zIndex": 999, + "width": 91, + "height": 49, + "measured": { + "width": 90, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 53.80188117353809, + "y": 2036.4195482899893 + } + }, + { + "id": "ZXMKY0f7mqqlsvyH9u-LM", + "type": "subtopic", + "position": { + "x": 150.8018811735381, + "y": 2036.4195482899893 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "json-rust", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "LmFog_qXrS9e5ARhV6OD_" + }, + "zIndex": 999, + "width": 112, + "height": 49, + "measured": { + "width": 113, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 150.8018811735381, + "y": 2036.4195482899893 + } + }, + { + "id": "LmFog_qXrS9e5ARhV6OD_", + "type": "subtopic", + "position": { + "x": 270.8018811735381, + "y": 2036.4195482899893 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "toml-rs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 88, + "height": 49, + "measured": { + "width": 80, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 270.8018811735381, + "y": 2036.4195482899893 + } + }, + { + "id": "_n7emeqzf5UTxVB5-385G", + "type": "topic", + "position": { + "x": 51.619964520821554, + "y": 2307.7971773974164 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Database and ORM", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 197, + "height": 49, + "measured": { + "width": 294, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 51.619964520821554, + "y": 2307.7971773974164 + } + }, + { + "id": "UAXpBK3lfnq0Q4RcBehZ1", + "type": "subtopic", + "position": { + "x": 52.58542331133775, + "y": 2389.2245540941813 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Diesel", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "EHErECEYws05oi59OsZpC" + }, + "zIndex": 999, + "width": 94, + "height": 49, + "measured": { + "width": 90, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 52.58542331133775, + "y": 2389.2245540941813 + } + }, + { + "id": "r2KembNZ2WIzLe87EB91K", + "type": "subtopic", + "position": { + "x": 147.58542331133776, + "y": 2389.2245540941813 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "sqlx", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ZXMKY0f7mqqlsvyH9u-LM" + }, + "zIndex": 999, + "width": 75, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 147.58542331133776, + "y": 2389.2245540941813 + } + }, + { + "id": "a2MLN7f-FvsgdmvP9ixlv", + "type": "subtopic", + "position": { + "x": 252.58542331133776, + "y": 2389.2245540941813 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "rusqlite", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "LmFog_qXrS9e5ARhV6OD_" + }, + "zIndex": 999, + "width": 102, + "height": 49, + "measured": { + "width": 94, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 252.58542331133776, + "y": 2389.2245540941813 + } + }, + { + "id": "Rv_Z-rbtELPZ1Nv0PZQmV", + "type": "topic", + "position": { + "x": -300.6381872719935, + "y": 2307.7971773974164 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Cryptography", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 148, + "height": 49, + "measured": { + "width": 253, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -300.6381872719935, + "y": 2307.7971773974164 + } + }, + { + "id": "f68x7r-qzaQfrzXnjOI2q", + "type": "subtopic", + "position": { + "x": -176.5205479375233, + "y": 2392.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "rust-crypto", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "w8nxQDxmfoUHkFV66TKiq" + }, + "zIndex": 999, + "width": 128, + "height": 49, + "measured": { + "width": 131, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -176.5205479375233, + "y": 2392.7871651675737 + } + }, + { + "id": "hzzRFb5cyXkgUdLZxaozB", + "type": "subtopic", + "position": { + "x": -300.6381872719935, + "y": 2445.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "sodiumoxide", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 141, + "height": 49, + "measured": { + "width": 253, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -300.6381872719935, + "y": 2445.7871651675737 + } + }, + { + "id": "w8nxQDxmfoUHkFV66TKiq", + "type": "subtopic", + "position": { + "x": -298.8175069304428, + "y": 2392.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "ring", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "hzzRFb5cyXkgUdLZxaozB" + }, + "zIndex": 999, + "width": 75, + "height": 49, + "measured": { + "width": 119, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -298.8175069304428, + "y": 2392.7871651675737 + } + }, + { + "id": "2Zyyf9q_CxmOW-z2pipL8", + "type": "topic", + "position": { + "x": -707.7748410324898, + "y": 2515.491272000084 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "CLI Utilities", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 134, + "height": 49, + "measured": { + "width": 299, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -707.7748410324898, + "y": 2515.491272000084 + } + }, + { + "id": "AId80IokM7NvGBVutmuGC", + "type": "subtopic", + "position": { + "x": -506.45066814637346, + "y": 2424.1458411437447 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "clap", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "YS0igALDqSanGDWva_vls" + }, + "zIndex": 999, + "width": 77, + "height": 49, + "measured": { + "width": 70, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -506.45066814637346, + "y": 2424.1458411437447 + } + }, + { + "id": "_43912wPdXgLL8v-IMHX_", + "type": "subtopic", + "position": { + "x": -712.1322659713495, + "y": 2428.1458411437447 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "structopt", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "YS0igALDqSanGDWva_vls" + }, + "zIndex": 999, + "width": 113, + "height": 49, + "style": { + "width": 113 + }, + "measured": { + "width": 113, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -712.1322659713495, + "y": 2428.1458411437447 + } + }, + { + "id": "YS0igALDqSanGDWva_vls", + "type": "subtopic", + "position": { + "x": -712.1322659713495, + "y": 2375.1458411437447 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "termion", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 113, + "height": 49, + "style": { + "width": 113 + }, + "measured": { + "width": 113, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -712.1322659713495, + "y": 2375.1458411437447 + } + }, + { + "id": "uG-EmZVZ-jc3mswOT4-7l", + "type": "topic", + "position": { + "x": -707.7748410324898, + "y": 2662.047621690988 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Game Development", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 198, + "height": 49, + "measured": { + "width": 299, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -707.7748410324898, + "y": 2662.047621690988 + } + }, + { + "id": "uyrGki0jB7DXQ0HJe2-vY", + "type": "subtopic", + "position": { + "x": -711.2922976896841, + "y": 2743.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "bevy", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "6wGShK9WEnXiby_Jm8sTO" + }, + "zIndex": 999, + "width": 81, + "height": 49, + "measured": { + "width": 90, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -711.2922976896841, + "y": 2743.435641912534 + } + }, + { + "id": "x9bmK_cLYpX0ebwjZUn4R", + "type": "subtopic", + "position": { + "x": -616.9348727508243, + "y": 2743.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "fyrox", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "qquYnrrzUlyd8738jzj1D" + }, + "zIndex": 999, + "width": 81, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -616.9348727508243, + "y": 2743.435641912534 + } + }, + { + "id": "qquYnrrzUlyd8738jzj1D", + "type": "subtopic", + "position": { + "x": -512.5774478119645, + "y": 2743.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "ggez", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 83, + "height": 49, + "measured": { + "width": 100, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -512.5774478119645, + "y": 2743.435641912534 + } + }, + { + "id": "EtKhe3lgK3NoiBOjXRb2O", + "type": "subtopic", + "position": { + "x": -712.1322659713495, + "y": 2797.530453988514 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "macroquad", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "6wGShK9WEnXiby_Jm8sTO" + }, + "zIndex": 999, + "width": 132, + "height": 49, + "measured": { + "width": 149, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -712.1322659713495, + "y": 2797.530453988514 + } + }, + { + "id": "6wGShK9WEnXiby_Jm8sTO", + "type": "subtopic", + "position": { + "x": -555.6322659713495, + "y": 2797.530453988514 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "wgpu-rs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "qquYnrrzUlyd8738jzj1D" + }, + "zIndex": 999, + "width": 106, + "height": 49, + "measured": { + "width": 142, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -555.6322659713495, + "y": 2797.530453988514 + } + }, + { + "id": "T1LlJz5m5wnwBvKAEuGnP", + "type": "topic", + "position": { + "x": -300.6381872719935, + "y": 2662.047621690988 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "GUI Development", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 182, + "height": 49, + "measured": { + "width": 249, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -300.6381872719935, + "y": 2662.047621690988 + } + }, + { + "id": "Q71MnFDQBkZF1c2hj13pU", + "type": "subtopic", + "position": { + "x": -299.0874712538206, + "y": 2581.215607689768 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "tauri", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "QbdGnUoTLgMHO1NCQINIi" + }, + "zIndex": 999, + "width": 79, + "height": 49, + "measured": { + "width": 70, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -299.0874712538206, + "y": 2581.215607689768 + } + }, + { + "id": "2Zp3m3Y7j6R1hK3DIVdkH", + "type": "subtopic", + "position": { + "x": -224.2592360689243, + "y": 2581.215607689768 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "gtk-rs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "QbdGnUoTLgMHO1NCQINIi" + }, + "zIndex": 999, + "width": 89, + "height": 49, + "measured": { + "width": 92, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -224.2592360689243, + "y": 2581.215607689768 + } + }, + { + "id": "QbdGnUoTLgMHO1NCQINIi", + "type": "subtopic", + "position": { + "x": -127.43100088402801, + "y": 2581.215607689768 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "relm", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "height": 49, + "measured": { + "width": 79, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "width": 79, + "positionAbsolute": { + "x": -127.43100088402801, + "y": 2581.215607689768 + } + }, + { + "id": "RKXljexmLAceMYwg4D_uP", + "type": "topic", + "position": { + "x": 51.58542331133775, + "y": 2662.047621690988 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Embedded and Systems", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 232, + "height": 49, + "measured": { + "width": 292, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 51.58542331133775, + "y": 2662.047621690988 + } + }, + { + "id": "LzaO2cpDajXERqEYDjMl_", + "type": "subtopic", + "position": { + "x": 53.80188117353809, + "y": 2524.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "embedded-hal", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ETYrk0s5Wn80XyntNG_t1" + }, + "zIndex": 999, + "width": 157, + "height": 49, + "measured": { + "width": 292, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 53.80188117353809, + "y": 2524.7871651675737 + } + }, + { + "id": "L01rVq2_H4rWzlKygW5kA", + "type": "subtopic", + "position": { + "x": 53.649415377168324, + "y": 2577.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "rppal", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "ETYrk0s5Wn80XyntNG_t1" + }, + "zIndex": 999, + "width": 84, + "height": 49, + "measured": { + "width": 138, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 53.649415377168324, + "y": 2577.7871651675737 + } + }, + { + "id": "ETYrk0s5Wn80XyntNG_t1", + "type": "subtopic", + "position": { + "x": 195.58542331133776, + "y": 2577.7871651675737 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "nrf-hal", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 95, + "height": 49, + "measured": { + "width": 150, + "height": 49 + }, + "dragging": false, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": 195.58542331133776, + "y": 2577.7871651675737 + } + }, + { + "id": "fusu4ZHH4-cjoouLr4F9U", + "type": "topic", + "position": { + "x": 51.58542331133776, + "y": 2817.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "WebAssembly (WASM)", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 216, + "height": 49, + "measured": { + "width": 292, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 51.58542331133776, + "y": 2817.435641912534 + } + }, + { + "id": "SUtBBqqDeR_yAkr669ZvE", + "type": "subtopic", + "position": { + "x": -212.20827066407475, + "y": 2870.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "wasm-bindgen", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "iyFHvZj_ntr_dX6WlL4E1" + }, + "zIndex": 999, + "width": 157, + "height": 49, + "style": { + "width": 157 + }, + "measured": { + "width": 157, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -212.20827066407475, + "y": 2870.435641912534 + } + }, + { + "id": "TSlj7mMUB5CDTy8uMFzKV", + "type": "subtopic", + "position": { + "x": -212.20827066407475, + "y": 2764.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "wasm-pack", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "iyFHvZj_ntr_dX6WlL4E1" + }, + "zIndex": 999, + "width": 157, + "height": 49, + "style": { + "width": 157 + }, + "measured": { + "width": 157, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -212.20827066407475, + "y": 2764.435641912534 + } + }, + { + "id": "iyFHvZj_ntr_dX6WlL4E1", + "type": "subtopic", + "position": { + "x": -212.20827066407475, + "y": 2817.435641912534 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "wasmer", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 157, + "height": 49, + "style": { + "width": 157 + }, + "measured": { + "width": 157, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -212.20827066407475, + "y": 2817.435641912534 + } + }, + { + "id": "7YKWYxogJq6X35IAUwcZF", + "type": "topic", + "position": { + "x": 51.58542331133776, + "y": 2977.8309893419987 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Debugging", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 129, + "height": 49, + "measured": { + "width": 292, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 51.58542331133776, + "y": 2977.8309893419987 + } + }, + { + "id": "UkHXsAolmbk-MsJFfqObC", + "type": "subtopic", + "position": { + "x": 53.649415377168324, + "y": 3052.599323692896 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "rust-gdb", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "p1w1iljGABgHoJjIRJYLY" + }, + "zIndex": 999, + "width": 110, + "height": 49, + "measured": { + "width": 132, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 53.649415377168324, + "y": 3052.599323692896 + } + }, + { + "id": "p1w1iljGABgHoJjIRJYLY", + "type": "subtopic", + "position": { + "x": 190.58542331133776, + "y": 3052.599323692896 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "rust-lldb", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 107, + "height": 49, + "measured": { + "width": 153, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": 190.58542331133776, + "y": 3052.599323692896 + } + }, + { + "id": "65nbahPj9qAb9y8dF8Jnd", + "type": "topic", + "position": { + "x": -304.228964418254, + "y": 2977.8309893419987 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Documenting with `rustdoc`", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + }, + "oldId": "WduD9VIcYSs_JTnuMNyxk" + }, + "zIndex": 999, + "width": 251, + "height": 49, + "measured": { + "width": 255, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -304.228964418254, + "y": 2977.8309893419987 + } + }, + { + "id": "WduD9VIcYSs_JTnuMNyxk", + "type": "topic", + "position": { + "x": -691.4506681463735, + "y": 2977.8309893419987 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Performance and Profiling", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 244, + "height": 49, + "measured": { + "width": 255, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -691.4506681463735, + "y": 2977.8309893419987 + } + }, + { + "id": "clQ26LFV_9AdQ4evnaxUK", + "type": "subtopic", + "position": { + "x": -636.9506681463735, + "y": 2887.6225810425703 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Criterion.rs", + "style": { + "fontSize": 17, + "justifyContent": "flex-start", + "textAlign": "center" + } + }, + "zIndex": 999, + "width": 130, + "height": 49, + "measured": { + "width": 146, + "height": 49 + }, + "resizing": false, + "dragging": false, + "focusable": true, + "positionAbsolute": { + "x": -636.9506681463735, + "y": 2887.6225810425703 + } + }, + { + "id": "w_rUaBorHFOY74S0JiEwM", + "type": "linksgroup", + "position": { + "x": -710.4579568300146, + "y": -148.2948532825934 + }, + "selected": false, + "selectable": true, + "draggable": true, + "deletable": true, + "data": { + "label": "Related Roadmaps", + "links": [ + { + "id": "CVNNr97eZmGVFZyNVmR9b", + "label": "Backend Roadmap", + "href": "", + "url": "https://roadmap.sh/backend" + }, + { + "id": "GoM0EsaFMzWViwio3BucA", + "label": "DevOps Roadmap", + "url": "https://roadmap.sh/backend" + }, + { + "id": "EW8A9X-9ELclN0pdvRE1G", + "label": "Go Roadmap", + "url": "https://roadmap.sh/go" + } + ] + }, + "zIndex": 999, + "measured": { + "width": 355, + "height": 165 + }, + "dragging": false, + "width": 260, + "height": 160, + "resizing": false, + "focusable": true, + "positionAbsolute": { + "x": -710.4579568300146, + "y": -148.2948532825934 + } + } + ], + "edges": [ + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "HU7wZWiES3m3xl1-NYP6F", + "sourceHandle": "x2", + "target": "4U-HZQGH7kaWCB94Xy8Mh", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__HU7wZWiES3m3xl1-NYP6Fx2-08qKtgnhJ3tlb5JKfTDf5w1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "4U-HZQGH7kaWCB94Xy8Mh", + "sourceHandle": "x2", + "target": "6E4pGifNfSAq6SbzfzFNT", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__4U-HZQGH7kaWCB94Xy8Mhx2-08qKtgnhJ3tlb5JKfTDf5w2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "6E4pGifNfSAq6SbzfzFNT", + "sourceHandle": "x2", + "target": "X2gB0m-ZKSC4TJyIcwsMx", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__6E4pGifNfSAq6SbzfzFNTx2-08qKtgnhJ3tlb5JKfTDf5w2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "X2gB0m-ZKSC4TJyIcwsMx", + "sourceHandle": "z2", + "target": "pTC1ucmErVnMbNFnYLJK7", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-pTC1ucmErVnMbNFnYLJK7y1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "X2gB0m-ZKSC4TJyIcwsMx", + "sourceHandle": "z2", + "target": "LwqOxYY9E9MUDgz2M40uV", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-LwqOxYY9E9MUDgz2M40uVy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "X2gB0m-ZKSC4TJyIcwsMx", + "sourceHandle": "z2", + "target": "wQHkBydWsiGEOZMdKmz40", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-wQHkBydWsiGEOZMdKmz40y1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "X2gB0m-ZKSC4TJyIcwsMx", + "sourceHandle": "x2", + "target": "Zpowr_NGd-E2DC3g-oW9h", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__X2gB0m-ZKSC4TJyIcwsMxx2-08qKtgnhJ3tlb5JKfTDf5w2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zpowr_NGd-E2DC3g-oW9h", + "sourceHandle": "z2", + "target": "PkePVzV-b1pgFJP5xID5_", + "targetHandle": "y2", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-PkePVzV-b1pgFJP5xID5_y2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zpowr_NGd-E2DC3g-oW9h", + "sourceHandle": "z2", + "target": "c_SdccEXEJyh4ymWzvCeX", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-c_SdccEXEJyh4ymWzvCeXy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Zpowr_NGd-E2DC3g-oW9h", + "sourceHandle": "z2", + "target": "Op0-bdMV3kE9Be6Ot1aC6", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-Op0-bdMV3kE9Be6Ot1aC6y1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "08qKtgnhJ3tlb5JKfTDf5", + "sourceHandle": "z2", + "target": "pehYc_xLrs6BFUbcpPTiJ", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__08qKtgnhJ3tlb5JKfTDf5z2-eTpZXd8E2jVBmk_aSLZYVw1", + "selected": false, + "type": "smoothstep", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "pehYc_xLrs6BFUbcpPTiJ", + "sourceHandle": "y2", + "target": "zLKbYX0nnbfD5n3P_JRaS", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__pehYc_xLrs6BFUbcpPTiJy2-eTpZXd8E2jVBmk_aSLZYVw1", + "selected": false, + "type": "smoothstep", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "zLKbYX0nnbfD5n3P_JRaS", + "sourceHandle": "z2", + "target": "pRDgDtRIVpNM2CdhSOS3Q", + "targetHandle": "y2", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__zLKbYX0nnbfD5n3P_JRaSz2-pRDgDtRIVpNM2CdhSOS3Qy2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "zLKbYX0nnbfD5n3P_JRaS", + "sourceHandle": "z2", + "target": "_EicstELZcdesHiXFWJGu", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__zLKbYX0nnbfD5n3P_JRaSz2-_EicstELZcdesHiXFWJGuy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "zLKbYX0nnbfD5n3P_JRaS", + "sourceHandle": "z2", + "target": "_hxwo_iAdOwlWBltv7i6i", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__zLKbYX0nnbfD5n3P_JRaSz2-_hxwo_iAdOwlWBltv7i6iy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "eTpZXd8E2jVBmk_aSLZYV", + "sourceHandle": "w2", + "target": "Kb7KF7JCMaWFz-GuaQmQV", + "targetHandle": "x1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__eTpZXd8E2jVBmk_aSLZYVw2-Kb7KF7JCMaWFz-GuaQmQVx1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "eTpZXd8E2jVBmk_aSLZYV", + "sourceHandle": "x2", + "target": "KomYBYxj0FTrJDYB3nU5B", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__eTpZXd8E2jVBmk_aSLZYVx2-WduD9VIcYSs_JTnuMNyxkw1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "KomYBYxj0FTrJDYB3nU5B", + "sourceHandle": "z2", + "target": "n5t3MUqmvrcr36VIIOw0u", + "targetHandle": "y2", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxkz2-n5t3MUqmvrcr36VIIOw0uy2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "KomYBYxj0FTrJDYB3nU5B", + "sourceHandle": "z2", + "target": "duQ1RO1lqq793mfb5w31P", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxkz2-duQ1RO1lqq793mfb5w31Py1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "KomYBYxj0FTrJDYB3nU5B", + "sourceHandle": "z2", + "target": "ApjwY_70OGG_dNIC85oBD", + "targetHandle": "y1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxkz2-ApjwY_70OGG_dNIC85oBDy1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "KomYBYxj0FTrJDYB3nU5B", + "sourceHandle": "x2", + "target": "yu0f5gALho0e8wzV10yow", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__KomYBYxj0FTrJDYB3nU5Bx2-WduD9VIcYSs_JTnuMNyxkw2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "yu0f5gALho0e8wzV10yow", + "sourceHandle": "z2", + "target": "3pL0ARqk8uRNimopHSalW", + "targetHandle": "y1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__yu0f5gALho0e8wzV10yowz2-WduD9VIcYSs_JTnuMNyxky1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "3pL0ARqk8uRNimopHSalW", + "sourceHandle": "z2", + "target": "gcmKSLWfBqx4aPZOmyQsg", + "targetHandle": "y1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__3pL0ARqk8uRNimopHSalWz2-WduD9VIcYSs_JTnuMNyxky1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "gcmKSLWfBqx4aPZOmyQsg", + "sourceHandle": "x2", + "target": "_n7emeqzf5UTxVB5-385G", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__gcmKSLWfBqx4aPZOmyQsgx2-WduD9VIcYSs_JTnuMNyxkw1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "_n7emeqzf5UTxVB5-385G", + "sourceHandle": "y2", + "target": "Rv_Z-rbtELPZ1Nv0PZQmV", + "targetHandle": "z1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge___n7emeqzf5UTxVB5-385Gy2-WduD9VIcYSs_JTnuMNyxkz1", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "Rv_Z-rbtELPZ1Nv0PZQmV", + "sourceHandle": "y2", + "target": "2Zyyf9q_CxmOW-z2pipL8", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__Rv_Z-rbtELPZ1Nv0PZQmVy2-WduD9VIcYSs_JTnuMNyxkw1", + "selected": false, + "type": "smoothstep", + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "2Zyyf9q_CxmOW-z2pipL8", + "sourceHandle": "x2", + "target": "uG-EmZVZ-jc3mswOT4-7l", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__2Zyyf9q_CxmOW-z2pipL8x2-WduD9VIcYSs_JTnuMNyxkw2", + "selected": false, + "focusable": true, + "selectable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "uG-EmZVZ-jc3mswOT4-7l", + "sourceHandle": "z2", + "target": "T1LlJz5m5wnwBvKAEuGnP", + "targetHandle": "y1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__uG-EmZVZ-jc3mswOT4-7lz2-WduD9VIcYSs_JTnuMNyxky1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "T1LlJz5m5wnwBvKAEuGnP", + "sourceHandle": "z2", + "target": "RKXljexmLAceMYwg4D_uP", + "targetHandle": "y1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__T1LlJz5m5wnwBvKAEuGnPz2-WduD9VIcYSs_JTnuMNyxky1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "RKXljexmLAceMYwg4D_uP", + "sourceHandle": "x2", + "target": "fusu4ZHH4-cjoouLr4F9U", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__RKXljexmLAceMYwg4D_uPx2-WduD9VIcYSs_JTnuMNyxkw1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "fusu4ZHH4-cjoouLr4F9U", + "sourceHandle": "y2", + "target": "iyFHvZj_ntr_dX6WlL4E1", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxky2-iyFHvZj_ntr_dX6WlL4E1z1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "fusu4ZHH4-cjoouLr4F9U", + "sourceHandle": "y2", + "target": "TSlj7mMUB5CDTy8uMFzKV", + "targetHandle": "z2", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxky2-TSlj7mMUB5CDTy8uMFzKVz2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "fusu4ZHH4-cjoouLr4F9U", + "sourceHandle": "y2", + "target": "SUtBBqqDeR_yAkr669ZvE", + "targetHandle": "z1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxky2-SUtBBqqDeR_yAkr669ZvEz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "fusu4ZHH4-cjoouLr4F9U", + "sourceHandle": "x2", + "target": "7YKWYxogJq6X35IAUwcZF", + "targetHandle": "w2", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__fusu4ZHH4-cjoouLr4F9Ux2-WduD9VIcYSs_JTnuMNyxkw2", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "7YKWYxogJq6X35IAUwcZF", + "sourceHandle": "y2", + "target": "65nbahPj9qAb9y8dF8Jnd", + "targetHandle": "z1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__7YKWYxogJq6X35IAUwcZFy2-WduD9VIcYSs_JTnuMNyxkz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "65nbahPj9qAb9y8dF8Jnd", + "sourceHandle": "y2", + "target": "WduD9VIcYSs_JTnuMNyxk", + "targetHandle": "z1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__65nbahPj9qAb9y8dF8Jndy2-WduD9VIcYSs_JTnuMNyxkz1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0.8 8", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "WduD9VIcYSs_JTnuMNyxk", + "sourceHandle": "w2", + "target": "clQ26LFV_9AdQ4evnaxUK", + "targetHandle": "x1", + "data": { + "edgeStyle": "dashed" + }, + "id": "xy-edge__WduD9VIcYSs_JTnuMNyxkw2-clQ26LFV_9AdQ4evnaxUKx1", + "selected": false, + "selectable": true, + "focusable": true + }, + { + "style": { + "strokeDasharray": "0", + "strokeLinecap": "round", + "strokeWidth": 3.5, + "stroke": "#2b78e4" + }, + "source": "65nbahPj9qAb9y8dF8Jnd", + "sourceHandle": "x2", + "target": "0vLaVNJaJSHZ_bHli6Qzs", + "targetHandle": "w1", + "data": { + "edgeStyle": "solid" + }, + "id": "xy-edge__65nbahPj9qAb9y8dF8Jndx2-0vLaVNJaJSHZ_bHli6Qzsw1", + "selected": false, + "selectable": true, + "focusable": true + } + ] +} \ No newline at end of file diff --git a/src/data/roadmaps/rust/rust.md b/src/data/roadmaps/rust/rust.md index 1dd7038a4..5ba77d7ce 100644 --- a/src/data/roadmaps/rust/rust.md +++ b/src/data/roadmaps/rust/rust.md @@ -8,9 +8,10 @@ title: 'Rust Developer' description: 'Step by step guide to becoming a Rust developer in 2025' hasTopics: true isNew: false +renderer: 'editor' dimensions: width: 968 - height: 2220.4 + height: 3120 schema: headline: 'Rust Developer Roadmap' description: 'Learn how to become a Rust Developer with this interactive step by step guide in 2025. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.' diff --git a/src/lib/resource-progress.ts b/src/lib/resource-progress.ts index 31ecd5dc9..bb5210f95 100644 --- a/src/lib/resource-progress.ts +++ b/src/lib/resource-progress.ts @@ -122,7 +122,8 @@ export function clearMigratedRoadmapProgress( 'datastructures-and-algorithms', 'kubernetes', 'linux', - 'software-design-architecture' + 'software-design-architecture', + 'rust' ]; if (!migratedRoadmaps.includes(resourceId)) {