<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>rustbites</title><link>https://www.rustbites.com/</link><description>Recent content on rustbites</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 14 Aug 2026 07:55:35 +0200</lastBuildDate><atom:link href="https://www.rustbites.com/index.xml" rel="self" type="application/rss+xml"/><item><title>316. checked_duration_since — Your Deadline Passed, and Instant Subtraction Said Zero</title><link>https://www.rustbites.com/posts/bite-316/</link><pubDate>Thu, 13 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-316/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-315/"&gt;bite 315&lt;/a&gt; said &lt;code&gt;Instant&lt;/code&gt; has no &lt;code&gt;Result&lt;/code&gt; to handle. True — but its subtraction hides a different trap: past a deadline, &lt;code&gt;deadline - now&lt;/code&gt; is silently &lt;code&gt;0&lt;/code&gt;, and your retry loop spins forever with a zero timeout.&lt;/p&gt;</description></item><item><title>315. SystemTime::duration_since — NTP Set the Clock Back, and elapsed().unwrap() Panicked</title><link>https://www.rustbites.com/posts/bite-315/</link><pubDate>Thu, 13 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-315/</guid><description>&lt;p&gt;You timed a job with &lt;code&gt;SystemTime&lt;/code&gt; and it ran fine for weeks — until NTP stepped the clock backwards and that innocent &lt;code&gt;.elapsed().unwrap()&lt;/code&gt; took the service down.&lt;/p&gt;</description></item><item><title>314. Duration::mul_f64 — timeout * 1.5 Doesn't Compile, So You Round-Tripped Through Floats</title><link>https://www.rustbites.com/posts/bite-314/</link><pubDate>Wed, 12 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-314/</guid><description>&lt;p&gt;&lt;code&gt;Duration * 2&lt;/code&gt; compiles, &lt;code&gt;Duration * 1.5&lt;/code&gt; doesn&amp;rsquo;t — and the usual workaround tears the duration apart into an &lt;code&gt;f64&lt;/code&gt; just to build it back up again.&lt;/p&gt;</description></item><item><title>313. div_duration_f64 — Your Progress Bar Sat at 0% Because as_secs() Truncated First</title><link>https://www.rustbites.com/posts/bite-313/</link><pubDate>Wed, 12 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-313/</guid><description>&lt;p&gt;Dividing two &lt;code&gt;Duration&lt;/code&gt;s with &lt;code&gt;as_secs()&lt;/code&gt; is integer division — 1.5s of 60s truncates to 0, and your progress bar never moves.&lt;/p&gt;</description></item><item><title>312. Duration::saturating_sub — Your Timeout Budget Ran Out, and the Subtraction Panicked</title><link>https://www.rustbites.com/posts/bite-312/</link><pubDate>Tue, 11 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-312/</guid><description>&lt;p&gt;&lt;code&gt;Duration - Duration&lt;/code&gt; panics on underflow — and &lt;code&gt;budget - elapsed&lt;/code&gt; underflows the moment a slow operation blows the budget.&lt;/p&gt;</description></item><item><title>311. Duration::try_from_secs_f64 — Your Backoff Math Went Negative, and from_secs_f64 Panicked</title><link>https://www.rustbites.com/posts/bite-311/</link><pubDate>Tue, 11 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-311/</guid><description>&lt;p&gt;&lt;code&gt;Duration::from_secs_f64&lt;/code&gt; panics on negative, NaN, or overflowing input — exactly the values float math produces when a jittered backoff dips below zero.&lt;/p&gt;</description></item><item><title>310. f64::max — The Fold That Quietly Swallows NaN</title><link>https://www.rustbites.com/posts/bite-310/</link><pubDate>Mon, 10 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-310/</guid><description>&lt;p&gt;&lt;code&gt;f64::NAN.max(3.0)&lt;/code&gt; is &lt;code&gt;3.0&lt;/code&gt;. A running max over data with a NaN in it returns a perfectly clean-looking number — and the &lt;code&gt;is_nan&lt;/code&gt; check downstream swears nothing went wrong.&lt;/p&gt;</description></item><item><title>309. classify — x &gt; 0.0 Passed, Then 1.0 / x Returned inf</title><link>https://www.rustbites.com/posts/bite-309/</link><pubDate>Mon, 10 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-309/</guid><description>&lt;p&gt;Between zero and the smallest &amp;ldquo;real&amp;rdquo; float lives a twilight zone of subnormals — values that pass your &lt;code&gt;&amp;gt; 0.0&lt;/code&gt; guard but blow up the moment you divide by them.&lt;/p&gt;</description></item><item><title>308. sin_cos — One Angle, Both Halves, No Swap Bug</title><link>https://www.rustbites.com/posts/bite-308/</link><pubDate>Sun, 09 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-308/</guid><description>&lt;p&gt;Every rotation, polar conversion, and circle you draw needs sin &lt;em&gt;and&lt;/em&gt; cos of the same angle — and every codebase has one spot where &lt;code&gt;x&lt;/code&gt; got the sin and &lt;code&gt;y&lt;/code&gt; got the cos.&lt;/p&gt;</description></item><item><title>307. to_degrees / to_radians — Stop Hand-Typing 180.0 / PI</title><link>https://www.rustbites.com/posts/bite-307/</link><pubDate>Sun, 09 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-307/</guid><description>&lt;p&gt;&lt;code&gt;sin&lt;/code&gt; wants radians, your users want degrees, and somewhere in your codebase a hand-typed &lt;code&gt;* 180.0 / PI&lt;/code&gt; is waiting to be fat-fingered. The conversion has been a method on floats since Rust 1.0.&lt;/p&gt;</description></item><item><title>306. powi — Integer Powers Without the powf Detour</title><link>https://www.rustbites.com/posts/bite-306/</link><pubDate>Sat, 08 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-306/</guid><description>&lt;p&gt;&lt;code&gt;x * x * x&lt;/code&gt; doesn&amp;rsquo;t scale, and &lt;code&gt;powf(3.0)&lt;/code&gt; routes an integer exponent through the full floating-point pow machinery. &lt;code&gt;powi&lt;/code&gt; is the method built for exactly this case.&lt;/p&gt;</description></item><item><title>305. to_bits — Hash and Dedup Floats Without a Wrapper Crate</title><link>https://www.rustbites.com/posts/bite-305/</link><pubDate>Sat, 08 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-305/</guid><description>&lt;p&gt;&lt;code&gt;HashSet&amp;lt;f64&amp;gt;&lt;/code&gt; doesn&amp;rsquo;t compile — floats aren&amp;rsquo;t &lt;code&gt;Hash&lt;/code&gt; or &lt;code&gt;Eq&lt;/code&gt;. &lt;code&gt;f64::to_bits&lt;/code&gt; turns each float into its exact &lt;code&gt;u64&lt;/code&gt; bit pattern, which is both.&lt;/p&gt;</description></item><item><title>304. trunc &amp; fract — Split a Float Without the Cast Round-Trip</title><link>https://www.rustbites.com/posts/bite-304/</link><pubDate>Fri, 07 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-304/</guid><description>&lt;p&gt;Need the whole and fractional parts of a float? The &lt;code&gt;(x as i64) as f64&lt;/code&gt; round-trip works — until the value doesn&amp;rsquo;t fit in an &lt;code&gt;i64&lt;/code&gt;. &lt;code&gt;trunc&lt;/code&gt; and &lt;code&gt;fract&lt;/code&gt; split the float directly.&lt;/p&gt;</description></item><item><title>303. round_ties_even — round() Pushes Every Half Up, and Your Totals Drift</title><link>https://www.rustbites.com/posts/bite-303/</link><pubDate>Fri, 07 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-303/</guid><description>&lt;p&gt;&lt;code&gt;round()&lt;/code&gt; sends every &lt;code&gt;.5&lt;/code&gt; away from zero — so summing rounded values drifts upward. &lt;code&gt;round_ties_even&lt;/code&gt; rounds ties to the even neighbor and the bias cancels out.&lt;/p&gt;</description></item><item><title>302. cbrt — powf(1.0/3.0) Says the Cube Root of -27 Is NaN</title><link>https://www.rustbites.com/posts/bite-302/</link><pubDate>Thu, 06 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-302/</guid><description>&lt;p&gt;Every negative number has a real cube root — &lt;code&gt;-27&lt;/code&gt; is just &lt;code&gt;-3&lt;/code&gt;. But &lt;code&gt;(-27.0).powf(1.0 / 3.0)&lt;/code&gt; returns &lt;code&gt;NaN&lt;/code&gt;. &lt;code&gt;cbrt&lt;/code&gt; is the method that actually knows what a cube root is.&lt;/p&gt;</description></item><item><title>301. ln_1p / exp_m1 — Adding 1.0 Destroys Your Tiny Float Before ln Ever Runs</title><link>https://www.rustbites.com/posts/bite-301/</link><pubDate>Thu, 06 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-301/</guid><description>&lt;p&gt;&lt;code&gt;(1.0 + x).ln()&lt;/code&gt; looks innocent, but for tiny &lt;code&gt;x&lt;/code&gt; the &lt;code&gt;1.0 +&lt;/code&gt; step rounds away most of &lt;code&gt;x&lt;/code&gt;&amp;rsquo;s digits before &lt;code&gt;ln&lt;/code&gt; even sees them. &lt;code&gt;ln_1p&lt;/code&gt; and &lt;code&gt;exp_m1&lt;/code&gt; do the &lt;code&gt;+ 1&lt;/code&gt; internally, where nothing is lost.&lt;/p&gt;</description></item><item><title>300. atan2 — The Angle Formula That Knows Its Quadrant</title><link>https://www.rustbites.com/posts/bite-300/</link><pubDate>Wed, 05 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-300/</guid><description>&lt;p&gt;&lt;code&gt;(dy / dx).atan()&lt;/code&gt; happily returns an angle — in the wrong quadrant half the time, and &lt;code&gt;NaN&lt;/code&gt; at the origin. &lt;code&gt;atan2&lt;/code&gt; takes both components and gets every case right.&lt;/p&gt;</description></item><item><title>299. hypot — The Distance Formula That Doesn't Overflow</title><link>https://www.rustbites.com/posts/bite-299/</link><pubDate>Wed, 05 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-299/</guid><description>&lt;p&gt;&lt;code&gt;(dx*dx + dy*dy).sqrt()&lt;/code&gt; looks harmless — until the squares overflow to infinity even though the answer would fit in an &lt;code&gt;f64&lt;/code&gt; just fine. &lt;code&gt;hypot&lt;/code&gt; computes the same distance without ever squaring your inputs.&lt;/p&gt;</description></item><item><title>298. copysign — Stamp One Number's Sign Onto Another, Sign Bit and All</title><link>https://www.rustbites.com/posts/bite-298/</link><pubDate>Tue, 04 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-298/</guid><description>&lt;p&gt;Bite 297 showed &lt;code&gt;signum&lt;/code&gt; &lt;em&gt;reading&lt;/em&gt; the sign bit. &lt;code&gt;copysign&lt;/code&gt; is the other half: it &lt;em&gt;writes&lt;/em&gt; one — take this magnitude, give it that number&amp;rsquo;s sign, one call.&lt;/p&gt;</description></item><item><title>297. signum — The -1 / 0 / +1 You Keep Building With an If-Else Ladder</title><link>https://www.rustbites.com/posts/bite-297/</link><pubDate>Tue, 04 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-297/</guid><description>&lt;p&gt;Every &amp;ldquo;which direction?&amp;rdquo; check ends up as the same three-branch ladder: greater, less, equal. &lt;code&gt;signum&lt;/code&gt; is that ladder as one method call — with a float twist you need to know about.&lt;/p&gt;</description></item><item><title>296. [T; N]::each_ref — Map Over an Array Without Giving It Away</title><link>https://www.rustbites.com/posts/bite-296/</link><pubDate>Mon, 03 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-296/</guid><description>&lt;p&gt;&lt;code&gt;arr.map(f)&lt;/code&gt; consumes the array — one call and your data is gone. &lt;code&gt;each_ref()&lt;/code&gt; turns &lt;code&gt;[T; N]&lt;/code&gt; into &lt;code&gt;[&amp;amp;T; N]&lt;/code&gt;, so you can map over borrows and keep the original.&lt;/p&gt;</description></item><item><title>295. String::leak — A &amp;'static str From Runtime Data, Without the Box Detour</title><link>https://www.rustbites.com/posts/bite-295/</link><pubDate>Sat, 01 Aug 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-295/</guid><description>&lt;p&gt;An API demands &lt;code&gt;&amp;amp;'static str&lt;/code&gt;, but your string is built at runtime. The old trick was &lt;code&gt;Box::leak(s.into_boxed_str())&lt;/code&gt; — since 1.72, &lt;code&gt;String::leak&lt;/code&gt; says what you mean.&lt;/p&gt;</description></item><item><title>294. AssertUnwindSafe — catch_unwind Won't Touch Your &amp;mut Until You Sign the Waiver</title><link>https://www.rustbites.com/posts/bite-294/</link><pubDate>Sat, 01 Aug 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-294/</guid><description>&lt;p&gt;You wrapped the job loop in &lt;code&gt;catch_unwind&lt;/code&gt; (bite 291), added a completed-counter — and the build broke: &lt;code&gt;the type `&amp;amp;mut i32` may not be safely transferred across an unwind boundary&lt;/code&gt;. &lt;code&gt;AssertUnwindSafe&lt;/code&gt; is how you tell the compiler you&amp;rsquo;ve thought it through.&lt;/p&gt;</description></item><item><title>293. thread::panicking — A Second Panic in Drop Doesn't Unwind, It Aborts</title><link>https://www.rustbites.com/posts/bite-293/</link><pubDate>Fri, 31 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-293/</guid><description>&lt;p&gt;Your &lt;code&gt;Drop&lt;/code&gt; impl asserts a cleanup invariant. A test fails, unwinding starts, your destructor runs — and its assert fails too. Two panics at once: the process aborts and the &lt;em&gt;original&lt;/em&gt; error message is gone.&lt;/p&gt;</description></item><item><title>292. panic::set_hook — You Caught the Panic, but It Still Screamed to stderr</title><link>https://www.rustbites.com/posts/bite-292/</link><pubDate>Fri, 31 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-292/</guid><description>&lt;p&gt;&lt;code&gt;catch_unwind&lt;/code&gt; gave you a tidy &lt;code&gt;Err&lt;/code&gt; — yet the full &amp;ldquo;thread panicked at &amp;hellip;&amp;rdquo; message hit stderr anyway. &lt;code&gt;std::panic::set_hook&lt;/code&gt; owns that output.&lt;/p&gt;</description></item><item><title>291. catch_unwind — One Panicking Job Shouldn't Kill the Whole Worker</title><link>https://www.rustbites.com/posts/bite-291/</link><pubDate>Thu, 30 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-291/</guid><description>&lt;p&gt;Job 2 panics and your worker thread dies with it — jobs 3 through 400 never run. &lt;code&gt;std::panic::catch_unwind&lt;/code&gt; stops the panic at a boundary you choose.&lt;/p&gt;</description></item><item><title>290. Mutex::clear_poison — One Panicked Thread Shouldn't Poison the Lock Forever</title><link>https://www.rustbites.com/posts/bite-290/</link><pubDate>Thu, 30 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-290/</guid><description>&lt;p&gt;A worker panics while holding the lock, and from then on every &lt;code&gt;lock()&lt;/code&gt; in your program returns &lt;code&gt;Err&lt;/code&gt;. If the data is still consistent, you can undo the poisoning instead of apologizing at every call site.&lt;/p&gt;</description></item><item><title>289. JoinHandle::is_finished — Check on a Worker Without Blocking on join()</title><link>https://www.rustbites.com/posts/bite-289/</link><pubDate>Wed, 29 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-289/</guid><description>&lt;p&gt;&lt;code&gt;join()&lt;/code&gt; tells you when a thread is done — by blocking until it is. Sometimes you just want to peek: still running, or can I collect the result now?&lt;/p&gt;</description></item><item><title>288. std::sync::Barrier — Make All Threads Start Phase 2 Together</title><link>https://www.rustbites.com/posts/bite-288/</link><pubDate>Wed, 29 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-288/</guid><description>&lt;p&gt;Your workers finish phase 1 at different speeds, and the fast ones charge into phase 2 while the slow ones are still writing. The hand-rolled fix is an atomic counter and a spin loop — std already ships the real thing.&lt;/p&gt;</description></item><item><title>287. thread::Builder — Name Your Workers So Panics Tell You Who Died</title><link>https://www.rustbites.com/posts/bite-287/</link><pubDate>Tue, 28 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-287/</guid><description>&lt;p&gt;&lt;code&gt;thread '&amp;lt;unnamed&amp;gt;' panicked&lt;/code&gt; — great, which of the eight workers was that? &lt;code&gt;thread::spawn&lt;/code&gt; has a configurable sibling, and the two minutes it costs pay off the first time something crashes.&lt;/p&gt;</description></item><item><title>286. available_parallelism — Stop Hardcoding Your Worker Count</title><link>https://www.rustbites.com/posts/bite-286/</link><pubDate>Tue, 28 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-286/</guid><description>&lt;p&gt;That &lt;code&gt;let workers = 8;&lt;/code&gt; in your thread pool is wrong on almost every machine but yours. std can tell you how many threads the program can actually run at once — no crate needed.&lt;/p&gt;</description></item><item><title>285. try_iter — The Drain Loop You Wrote This Morning, as One Line</title><link>https://www.rustbites.com/posts/bite-285/</link><pubDate>Mon, 27 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-285/</guid><description>&lt;p&gt;That match-on-&lt;code&gt;try_recv&lt;/code&gt; drain loop from &lt;a href="https://www.rustbites.com/posts/bite-284/"&gt;bite 284&lt;/a&gt;? The standard library already wrote it for you: &lt;code&gt;try_iter&lt;/code&gt; yields every pending message and stops the moment the channel is empty.&lt;/p&gt;</description></item><item><title>284. try_recv — Poll the Channel Without Stalling the Loop</title><link>https://www.rustbites.com/posts/bite-284/</link><pubDate>Mon, 27 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-284/</guid><description>&lt;p&gt;Your render loop can&amp;rsquo;t afford to block on &lt;code&gt;recv()&lt;/code&gt; — but it still needs to pick up messages. &lt;code&gt;try_recv&lt;/code&gt; checks the channel and returns immediately, message or not.&lt;/p&gt;</description></item><item><title>283. recv_timeout — Wait for a Message, But Not Forever</title><link>https://www.rustbites.com/posts/bite-283/</link><pubDate>Sun, 26 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-283/</guid><description>&lt;p&gt;&lt;code&gt;rx.recv()&lt;/code&gt; blocks until a message arrives — and if the producer hangs, so do you. &lt;code&gt;recv_timeout&lt;/code&gt; puts a deadline on the wait and tells you &lt;em&gt;why&lt;/em&gt; it ended.&lt;/p&gt;</description></item><item><title>282. mpsc::sync_channel — A Channel That Pushes Back When the Consumer Falls Behind</title><link>https://www.rustbites.com/posts/bite-282/</link><pubDate>Sun, 26 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-282/</guid><description>&lt;p&gt;&lt;code&gt;mpsc::channel()&lt;/code&gt; never says no: a fast producer and a slow consumer means the queue — and your memory — grows without bound. &lt;code&gt;sync_channel(n)&lt;/code&gt; caps the queue and makes the producer wait.&lt;/p&gt;</description></item><item><title>281. mpsc::channel — Send Results Back Instead of Fighting Over a Mutex</title><link>https://www.rustbites.com/posts/bite-281/</link><pubDate>Sat, 25 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-281/</guid><description>&lt;p&gt;Threads that only &lt;em&gt;produce&lt;/em&gt; values don&amp;rsquo;t need shared state. A channel turns &amp;ldquo;everyone locks the accumulator&amp;rdquo; into &amp;ldquo;everyone mails in their answer.&amp;rdquo;&lt;/p&gt;</description></item><item><title>280. Mutex::get_mut — You Have &amp;mut, Stop Paying for lock()</title><link>https://www.rustbites.com/posts/bite-280/</link><pubDate>Sat, 25 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-280/</guid><description>&lt;p&gt;A &lt;code&gt;Mutex&lt;/code&gt; guards against &lt;em&gt;other threads&lt;/em&gt; — but during setup and teardown there are no other threads. If you hold &lt;code&gt;&amp;amp;mut Mutex&amp;lt;T&amp;gt;&lt;/code&gt; or own it outright, the borrow checker already proves exclusive access, and you can skip the lock entirely.&lt;/p&gt;</description></item><item><title>279. thread::park — Block a Thread Without Dragging In a Mutex</title><link>https://www.rustbites.com/posts/bite-279/</link><pubDate>Fri, 24 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-279/</guid><description>&lt;p&gt;This morning&amp;rsquo;s bite (&lt;a href="https://www.rustbites.com/posts/bite-278/"&gt;278&lt;/a&gt;) needed a &lt;code&gt;Mutex&lt;/code&gt; + &lt;code&gt;Condvar&lt;/code&gt; pair just to make one thread wait for another. When exactly one thread sleeps and you hold its handle, &lt;code&gt;thread::park&lt;/code&gt; does it with no lock at all.&lt;/p&gt;</description></item><item><title>278. Condvar::wait_while — The Wait Loop You Keep Writing (and Getting Backwards)</title><link>https://www.rustbites.com/posts/bite-278/</link><pubDate>Fri, 24 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-278/</guid><description>&lt;p&gt;A &lt;code&gt;Condvar&lt;/code&gt; can wake up for no reason at all — so every correct wait is a loop. &lt;code&gt;wait_while&lt;/code&gt; writes that loop for you.&lt;/p&gt;</description></item><item><title>277. Release/Acquire — Publish Data Through a Flag, Not Just the Flag</title><link>https://www.rustbites.com/posts/bite-277/</link><pubDate>Thu, 23 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-277/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;code&gt;swap&lt;/code&gt; bite ended with a warning: once the winning thread writes data that other threads read, &lt;code&gt;Relaxed&lt;/code&gt; stops being enough. Here&amp;rsquo;s the two-line fix.&lt;/p&gt;</description></item><item><title>276. AtomicBool::swap — Let Exactly One Thread Claim the Job</title><link>https://www.rustbites.com/posts/bite-276/</link><pubDate>Thu, 23 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-276/</guid><description>&lt;p&gt;&amp;ldquo;Check the flag, then set it&amp;rdquo; has a gap where two threads both see &lt;code&gt;false&lt;/code&gt; — and your run-once code runs twice. &lt;code&gt;swap&lt;/code&gt; sets and reads the flag in one atomic step.&lt;/p&gt;</description></item><item><title>275. fetch_max — Track a High-Water Mark Without the Race</title><link>https://www.rustbites.com/posts/bite-275/</link><pubDate>Wed, 22 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-275/</guid><description>&lt;p&gt;&amp;ldquo;Check if it&amp;rsquo;s bigger, then store it&amp;rdquo; is two operations — and another thread can sneak between them. &lt;code&gt;fetch_max&lt;/code&gt; is the whole thing in one atomic call.&lt;/p&gt;</description></item><item><title>274. fetch_update — The CAS Loop You Keep Writing by Hand</title><link>https://www.rustbites.com/posts/bite-274/</link><pubDate>Wed, 22 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-274/</guid><description>&lt;p&gt;There&amp;rsquo;s no &lt;code&gt;fetch_add&lt;/code&gt; variant that stops at a cap, so you write a &lt;code&gt;compare_exchange_weak&lt;/code&gt; loop by hand. &lt;code&gt;fetch_update&lt;/code&gt; is that loop, done right, in one call.&lt;/p&gt;</description></item><item><title>273. remove_file — Deleting Something That Might Already Be Gone</title><link>https://www.rustbites.com/posts/bite-273/</link><pubDate>Tue, 21 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-273/</guid><description>&lt;p&gt;&lt;code&gt;create_dir_all&lt;/code&gt; (&lt;a href="https://www.rustbites.com/posts/bite-272/"&gt;bite 272&lt;/a&gt;) is idempotent by design. Its deletion twins are not: &lt;code&gt;remove_file&lt;/code&gt; and &lt;code&gt;remove_dir_all&lt;/code&gt; fail with &lt;code&gt;NotFound&lt;/code&gt; — and the &lt;code&gt;exists()&lt;/code&gt; guard is the same race all over again.&lt;/p&gt;</description></item><item><title>272. fs::create_dir_all — mkdir -p Without the exists() Check</title><link>https://www.rustbites.com/posts/bite-272/</link><pubDate>Tue, 21 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-272/</guid><description>&lt;p&gt;&lt;code&gt;fs::create_dir&lt;/code&gt; fails if the parent is missing &lt;em&gt;and&lt;/em&gt; fails if the directory already exists. &lt;code&gt;create_dir_all&lt;/code&gt; handles both — recursive and idempotent in one call.&lt;/p&gt;</description></item><item><title>271. fs::rename — Replace a File Atomically, Never Expose a Half-Write</title><link>https://www.rustbites.com/posts/bite-271/</link><pubDate>Mon, 20 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-271/</guid><description>&lt;p&gt;&lt;code&gt;fs::write&lt;/code&gt; truncates the file &lt;em&gt;before&lt;/em&gt; writing. Crash halfway — or get read halfway — and the world sees a torn file. &lt;code&gt;fs::rename&lt;/code&gt; is the atomic swap that fixes it.&lt;/p&gt;</description></item><item><title>270. Path::try_exists — exists() Can't Tell "Missing" From "Couldn't Check"</title><link>https://www.rustbites.com/posts/bite-270/</link><pubDate>Mon, 20 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-270/</guid><description>&lt;p&gt;&lt;code&gt;path.exists()&lt;/code&gt; returns &lt;code&gt;false&lt;/code&gt; for a file that&amp;rsquo;s missing — and for a file that&amp;rsquo;s right there behind a directory you can&amp;rsquo;t read. &lt;code&gt;try_exists()&lt;/code&gt; finally separates the two.&lt;/p&gt;</description></item><item><title>269. DirEntry::file_type — Stop Paying a stat() Per Entry</title><link>https://www.rustbites.com/posts/bite-269/</link><pubDate>Sun, 19 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-269/</guid><description>&lt;p&gt;Filtering &lt;code&gt;read_dir&lt;/code&gt; entries with &lt;code&gt;path.is_file()&lt;/code&gt; costs a full metadata lookup per entry — and quietly reports &lt;code&gt;false&lt;/code&gt; when the check fails. &lt;code&gt;DirEntry::file_type()&lt;/code&gt; is free on most platforms and tells you when it couldn&amp;rsquo;t answer.&lt;/p&gt;</description></item><item><title>268. fs::read_dir — The Filesystem Doesn't Sort for You</title><link>https://www.rustbites.com/posts/bite-268/</link><pubDate>Sun, 19 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-268/</guid><description>&lt;p&gt;&lt;code&gt;fs::read_dir&lt;/code&gt; looks like &lt;code&gt;ls&lt;/code&gt;, but &lt;code&gt;ls&lt;/code&gt; sorts its output and &lt;code&gt;read_dir&lt;/code&gt; doesn&amp;rsquo;t. You get entries in whatever order the filesystem feels like — and that order changes between machines.&lt;/p&gt;</description></item><item><title>267. Path::file_name — rsplit('/') Hands You Empty Strings and '..'</title><link>https://www.rustbites.com/posts/bite-267/</link><pubDate>Sat, 18 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-267/</guid><description>&lt;p&gt;Grabbing the last path segment with &lt;code&gt;rsplit('/')&lt;/code&gt; returns &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; for &lt;code&gt;logs/&lt;/code&gt; and &lt;code&gt;&amp;quot;..&amp;quot;&lt;/code&gt; for &lt;code&gt;logs/..&lt;/code&gt; — two values that were never file names. &lt;code&gt;Path::file_name&lt;/code&gt; reasons in components and returns &lt;code&gt;None&lt;/code&gt; instead.&lt;/p&gt;</description></item><item><title>266. Path::extension — Splitting on '.' Breaks on .gitignore</title><link>https://www.rustbites.com/posts/bite-266/</link><pubDate>Sat, 18 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-266/</guid><description>&lt;p&gt;Grabbing a file extension with &lt;code&gt;split('.')&lt;/code&gt; works right up until it meets &lt;code&gt;.gitignore&lt;/code&gt; — which suddenly has the &amp;ldquo;extension&amp;rdquo; &lt;code&gt;gitignore&lt;/code&gt;. &lt;code&gt;Path::extension&lt;/code&gt; knows the actual rules.&lt;/p&gt;</description></item><item><title>265. Path::strip_prefix — Compare Paths by Component, Not by Character</title><link>https://www.rustbites.com/posts/bite-265/</link><pubDate>Fri, 17 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-265/</guid><description>&lt;p&gt;Checking &lt;code&gt;path_str.starts_with(&amp;quot;/srv/uploads&amp;quot;)&lt;/code&gt; says yes to &lt;code&gt;/srv/uploads-old&lt;/code&gt; too. Paths need component-wise comparison — and &lt;code&gt;Path&lt;/code&gt; has it built in.&lt;/p&gt;</description></item><item><title>264. Path::join — One Absolute Path and Your Base Directory Is Gone</title><link>https://www.rustbites.com/posts/bite-264/</link><pubDate>Fri, 17 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-264/</guid><description>&lt;p&gt;&lt;code&gt;base.join(user_input)&lt;/code&gt; looks like it appends. But if the input starts with &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;join&lt;/code&gt; silently throws your base away and returns the input alone.&lt;/p&gt;</description></item><item><title>263. String::replace_range — Swap a Span In Place, No Rebuild</title><link>https://www.rustbites.com/posts/bite-263/</link><pubDate>Thu, 16 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-263/</guid><description>&lt;p&gt;Swapping one piece of a &lt;code&gt;String&lt;/code&gt; by slicing and re-&lt;code&gt;format!&lt;/code&gt;-ing rebuilds the whole thing. &lt;code&gt;replace_range&lt;/code&gt; splices the new text straight into the buffer you already own.&lt;/p&gt;</description></item><item><title>262. String::insert_str — Prepend or Splice Text Without Rebuilding the String</title><link>https://www.rustbites.com/posts/bite-262/</link><pubDate>Thu, 16 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-262/</guid><description>&lt;p&gt;Adding a prefix with &lt;code&gt;format!(&amp;quot;{prefix}{s}&amp;quot;)&lt;/code&gt; builds a brand-new &lt;code&gt;String&lt;/code&gt; and throws the old one away. &lt;code&gt;insert_str&lt;/code&gt; splices the text into the buffer you already have.&lt;/p&gt;</description></item><item><title>261. String::retain — Delete Characters In Place, No New Allocation</title><link>https://www.rustbites.com/posts/bite-261/</link><pubDate>Wed, 15 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-261/</guid><description>&lt;p&gt;Stripping characters with &lt;code&gt;replace(&amp;quot;-&amp;quot;, &amp;quot;&amp;quot;)&lt;/code&gt; builds a brand-new &lt;code&gt;String&lt;/code&gt; just to throw characters away. &lt;code&gt;retain&lt;/code&gt; deletes them in the buffer you already own.&lt;/p&gt;</description></item><item><title>260. str::replacen — Replace the First N Matches, Not Every Single One</title><link>https://www.rustbites.com/posts/bite-260/</link><pubDate>Wed, 15 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-260/</guid><description>&lt;p&gt;&lt;code&gt;replace&lt;/code&gt; is all-or-nothing: it rewrites every occurrence, whether you wanted that or not. &lt;code&gt;replacen&lt;/code&gt; lets you say how many.&lt;/p&gt;</description></item><item><title>259. str::lines — Split Into Lines Without Dragging \r Along</title><link>https://www.rustbites.com/posts/bite-259/</link><pubDate>Tue, 14 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-259/</guid><description>&lt;p&gt;&lt;code&gt;split('\n')&lt;/code&gt; works fine — until a Windows-saved file hands you lines that all end in an invisible &lt;code&gt;\r&lt;/code&gt;. &lt;code&gt;lines()&lt;/code&gt; was built for exactly this.&lt;/p&gt;</description></item><item><title>258. split_whitespace — Split on Runs, Not on Every Single Space</title><link>https://www.rustbites.com/posts/bite-258/</link><pubDate>Tue, 14 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-258/</guid><description>&lt;p&gt;&lt;code&gt;split(' ')&lt;/code&gt; hands you empty strings for every doubled space — and silently ignores tabs. &lt;code&gt;split_whitespace&lt;/code&gt; is what you actually meant.&lt;/p&gt;</description></item><item><title>257. VecDeque::rotate_left — Where the Ring Buffer Finally Pays Rent</title><link>https://www.rustbites.com/posts/bite-257/</link><pubDate>Mon, 13 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-257/</guid><description>&lt;p&gt;&lt;code&gt;slice::rotate_left&lt;/code&gt; touches every element, every time. The same call on a &lt;code&gt;VecDeque&lt;/code&gt; moves at most half of them — often far fewer.&lt;/p&gt;</description></item><item><title>256. VecDeque::make_contiguous — Turn a Wrapped Ring Buffer Into One Sortable Slice</title><link>https://www.rustbites.com/posts/bite-256/</link><pubDate>Mon, 13 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-256/</guid><description>&lt;p&gt;&lt;code&gt;VecDeque&lt;/code&gt; has no &lt;code&gt;.sort()&lt;/code&gt;, and any API that wants &lt;code&gt;&amp;amp;[T]&lt;/code&gt; rejects it. The catch is the ring buffer underneath — and one call flattens it.&lt;/p&gt;</description></item><item><title>255. rotate_left / rotate_right — Bit Rotation Without the Shift-Overflow Trap</title><link>https://www.rustbites.com/posts/bite-255/</link><pubDate>Sun, 12 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-255/</guid><description>&lt;p&gt;Shifting throws bits away. The manual &amp;ldquo;wrap them around&amp;rdquo; idiom panics on &lt;code&gt;n == 0&lt;/code&gt;. Rotation has been one method call the whole time.&lt;/p&gt;</description></item><item><title>254. isolate_lowest_one — The x &amp; x.wrapping_neg() Hack Finally Has a Name</title><link>https://www.rustbites.com/posts/bite-254/</link><pubDate>Sun, 12 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-254/</guid><description>&lt;p&gt;Every bitmask codebase has an unexplained &lt;code&gt;x &amp;amp; x.wrapping_neg()&lt;/code&gt; in it somewhere. Rust 1.97 gives the trick a name — and a sibling for the other end.&lt;/p&gt;</description></item><item><title>253. overflowing_add — Wrap, But Know It Happened</title><link>https://www.rustbites.com/posts/bite-253/</link><pubDate>Sat, 11 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-253/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-252/"&gt;&lt;code&gt;Wrapping&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt; (bite 252) wraps silently — but multiword arithmetic needs the carry bit too. &lt;code&gt;overflowing_add&lt;/code&gt; returns both: the wrapped result &lt;em&gt;and&lt;/em&gt; whether it wrapped.&lt;/p&gt;</description></item><item><title>252. Wrapping&lt;T&gt; — Modular Arithmetic Without the .wrapping_add() Noise</title><link>https://www.rustbites.com/posts/bite-252/</link><pubDate>Sat, 11 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-252/</guid><description>&lt;p&gt;Hash functions, checksums, and PRNGs want arithmetic mod 2^n — but writing &lt;code&gt;.wrapping_mul()&lt;/code&gt; on every single operation buries the math. &lt;code&gt;std::num::Wrapping&amp;lt;T&amp;gt;&lt;/code&gt; puts the semantics in the type so you can use plain operators again.&lt;/p&gt;</description></item><item><title>251. include_str! — Ship the File Inside the Binary, Skip the Runtime Read</title><link>https://www.rustbites.com/posts/bite-251/</link><pubDate>Fri, 10 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-251/</guid><description>&lt;p&gt;A missing template or SQL file in the deploy takes your app down at startup. &lt;code&gt;include_str!&lt;/code&gt; bakes the file into the binary at compile time — a missing file becomes a compile error, not a production incident.&lt;/p&gt;</description></item><item><title>250. lowest_one / highest_one — Set-Bit Positions as an Option, Not a Sentinel</title><link>https://www.rustbites.com/posts/bite-250/</link><pubDate>Thu, 09 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-250/</guid><description>&lt;p&gt;&lt;code&gt;trailing_zeros()&lt;/code&gt; on &lt;code&gt;0&lt;/code&gt; returns the type&amp;rsquo;s width — a sentinel you must remember to special-case. Rust 1.97 adds &lt;code&gt;lowest_one&lt;/code&gt; and &lt;code&gt;highest_one&lt;/code&gt;, which return an &lt;code&gt;Option&lt;/code&gt; and make &amp;ldquo;no bits set&amp;rdquo; impossible to forget.&lt;/p&gt;</description></item><item><title>249. bit_width — How Many Bits Does This Number Need? (New in Rust 1.97)</title><link>https://www.rustbites.com/posts/bite-249/</link><pubDate>Thu, 09 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-249/</guid><description>&lt;p&gt;&amp;ldquo;How many bits do I need for this value?&amp;rdquo; used to mean &lt;code&gt;32 - n.leading_zeros()&lt;/code&gt; — a formula you rewrite every time the integer type changes. Rust 1.97 — hitting stable today — ships &lt;code&gt;bit_width&lt;/code&gt; and friends.&lt;/p&gt;</description></item><item><title>248. is_multiple_of — Divisibility That Won't Panic on Zero</title><link>https://www.rustbites.com/posts/bite-248/</link><pubDate>Wed, 08 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-248/</guid><description>&lt;p&gt;&lt;code&gt;x % y == 0&lt;/code&gt; is the divisibility check everyone writes — and it panics the moment &lt;code&gt;y&lt;/code&gt; is zero. &lt;code&gt;is_multiple_of&lt;/code&gt; says what you mean and returns &lt;code&gt;false&lt;/code&gt; instead of blowing up.&lt;/p&gt;</description></item><item><title>247. sort_unstable — Skip the Allocation When Ties Don't Matter</title><link>https://www.rustbites.com/posts/bite-247/</link><pubDate>Wed, 08 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-247/</guid><description>&lt;p&gt;&lt;code&gt;.sort()&lt;/code&gt; pays for a guarantee you usually don&amp;rsquo;t need: it allocates a scratch buffer to keep equal elements in their original order. &lt;code&gt;.sort_unstable()&lt;/code&gt; sorts in place — no allocation, and typically faster.&lt;/p&gt;</description></item><item><title>246. Iterator::peekable — Look at the Next Item Without Consuming It</title><link>https://www.rustbites.com/posts/bite-246/</link><pubDate>Tue, 07 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-246/</guid><description>&lt;p&gt;Sometimes you need to see the next element to decide what to do — but calling &lt;code&gt;.next()&lt;/code&gt; eats it. &lt;code&gt;.peekable()&lt;/code&gt; gives you a &lt;code&gt;.peek()&lt;/code&gt; that shows the next item while leaving it in place.&lt;/p&gt;</description></item><item><title>245. rem_euclid — The Modulo That Never Goes Negative</title><link>https://www.rustbites.com/posts/bite-245/</link><pubDate>Tue, 07 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-245/</guid><description>&lt;p&gt;&lt;code&gt;-1 % 5&lt;/code&gt; is &lt;code&gt;-1&lt;/code&gt; in Rust, not &lt;code&gt;4&lt;/code&gt; — &lt;code&gt;%&lt;/code&gt; keeps the sign of the dividend. When you want a true wrap-around index or clock value, &lt;code&gt;(-1i32).rem_euclid(5)&lt;/code&gt; gives you the &lt;code&gt;4&lt;/code&gt; you actually meant.&lt;/p&gt;</description></item><item><title>244. clone_from — Reuse the Buffer You Already Have Instead of Reallocating</title><link>https://www.rustbites.com/posts/bite-244/</link><pubDate>Mon, 06 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-244/</guid><description>&lt;p&gt;&lt;code&gt;*dst = src.clone()&lt;/code&gt; throws away &lt;code&gt;dst&lt;/code&gt;&amp;rsquo;s heap buffer and allocates a brand-new one every time. &lt;code&gt;dst.clone_from(&amp;amp;src)&lt;/code&gt; copies into the storage &lt;code&gt;dst&lt;/code&gt; already owns — reusing its capacity instead of freeing and re-grabbing it.&lt;/p&gt;</description></item><item><title>243. slice::as_flattened — Treat a Slice of Arrays as One Flat Slice, No Copy</title><link>https://www.rustbites.com/posts/bite-243/</link><pubDate>Mon, 06 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-243/</guid><description>&lt;p&gt;You&amp;rsquo;ve got a &lt;code&gt;Vec&amp;lt;[f32; 3]&amp;gt;&lt;/code&gt; of RGB pixels and an API that wants &lt;code&gt;&amp;amp;[f32]&lt;/code&gt;. The manual flatten allocates a whole second buffer. &lt;code&gt;as_flattened&lt;/code&gt; hands you the same bytes as a flat &lt;code&gt;&amp;amp;[f32]&lt;/code&gt; — zero copies, zero allocation.&lt;/p&gt;</description></item><item><title>242. slice::binary_search_by_key — Find a Record by One Field, No Hand-Written Comparator</title><link>https://www.rustbites.com/posts/bite-242/</link><pubDate>Sun, 05 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-242/</guid><description>&lt;p&gt;Binary searching a slice of structs by one field? Don&amp;rsquo;t hand-roll a &lt;code&gt;.cmp()&lt;/code&gt; closure and risk flipping the comparison — project the key and let the stdlib do the rest.&lt;/p&gt;</description></item><item><title>241. slice::split_first — Peel the Head Off a Slice, Keep the Tail, No Indexing</title><link>https://www.rustbites.com/posts/bite-241/</link><pubDate>Sun, 05 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-241/</guid><description>&lt;p&gt;&lt;code&gt;slice[0]&lt;/code&gt; panics on an empty slice, and &lt;code&gt;&amp;amp;slice[1..]&lt;/code&gt; is a second chance to get the bounds wrong. &lt;code&gt;split_first&lt;/code&gt; hands you the head &lt;em&gt;and&lt;/em&gt; the tail together — or &lt;code&gt;None&lt;/code&gt; if there&amp;rsquo;s nothing there — so the empty case is a pattern, not a panic.&lt;/p&gt;</description></item><item><title>240. to_le_bytes / from_le_bytes — Serialize Integers Without unsafe or Bit-Shifting</title><link>https://www.rustbites.com/posts/bite-240/</link><pubDate>Sat, 04 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-240/</guid><description>&lt;p&gt;Packing a &lt;code&gt;u32&lt;/code&gt; into four bytes by hand means a stack of &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; and &lt;code&gt;as u8&lt;/code&gt; casts — and one wrong shift silently corrupts your data. Every integer type already knows how to lay itself out, in the exact endianness you ask for.&lt;/p&gt;</description></item><item><title>239. Vec::drain — Remove a Range and Keep What You Pulled Out</title><link>https://www.rustbites.com/posts/bite-239/</link><pubDate>Sat, 04 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-239/</guid><description>&lt;p&gt;&lt;code&gt;truncate&lt;/code&gt; throws elements away. &lt;code&gt;split_off&lt;/code&gt; allocates a second &lt;code&gt;Vec&lt;/code&gt;. When you want to &lt;em&gt;remove&lt;/em&gt; a range from a &lt;code&gt;Vec&lt;/code&gt; and actually &lt;strong&gt;use&lt;/strong&gt; those elements — and keep the rest — &lt;code&gt;drain&lt;/code&gt; hands them to you as an iterator and shifts everything else down for you.&lt;/p&gt;</description></item><item><title>238. slice::chunks_exact_mut — Edit a Slice in Fixed-Size Blocks Without Index Math</title><link>https://www.rustbites.com/posts/bite-238/</link><pubDate>Fri, 03 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-238/</guid><description>&lt;p&gt;Processing a buffer N elements at a time usually means a &lt;code&gt;while i + N &amp;lt;= len&lt;/code&gt; loop and a pile of &lt;code&gt;buf[i..i+N]&lt;/code&gt; slicing. &lt;code&gt;chunks_exact_mut&lt;/code&gt; hands you each fixed-size block as a &lt;code&gt;&amp;amp;mut [T]&lt;/code&gt; — no index bookkeeping, no off-by-one.&lt;/p&gt;</description></item><item><title>237. Iterator::eq — Compare Two Sequences Without Collecting Them First</title><link>https://www.rustbites.com/posts/bite-237/</link><pubDate>Fri, 03 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-237/</guid><description>&lt;p&gt;Comparing a &lt;code&gt;Vec&lt;/code&gt; to an array, or a filtered iterator to an expected result? You don&amp;rsquo;t need to &lt;code&gt;collect()&lt;/code&gt; both sides into the same type first.&lt;/p&gt;</description></item><item><title>236. Result::flatten — Collapse a Result&lt;Result&lt;T, E&gt;, E&gt; in One Call</title><link>https://www.rustbites.com/posts/bite-236/</link><pubDate>Thu, 02 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-236/</guid><description>&lt;p&gt;Ended up with a &lt;code&gt;Result&amp;lt;Result&amp;lt;T, E&amp;gt;, E&amp;gt;&lt;/code&gt; and reached for a nested &lt;code&gt;match&lt;/code&gt; to peel it? When both layers share the same error type, &lt;code&gt;Result::flatten&lt;/code&gt; (stable since 1.89) does it in one call.&lt;/p&gt;</description></item><item><title>235. Iterator::rposition — Find the Last Match Without Reversing-and-Subtracting</title><link>https://www.rustbites.com/posts/bite-235/</link><pubDate>Thu, 02 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-235/</guid><description>&lt;p&gt;Need the index of the &lt;em&gt;last&lt;/em&gt; element that matches? The reflex is &lt;code&gt;iter().rev().position(...)&lt;/code&gt; then &lt;code&gt;len - 1 - i&lt;/code&gt; — and that arithmetic is a classic off-by-one. &lt;code&gt;rposition&lt;/code&gt; searches from the back and hands you the real forward index.&lt;/p&gt;</description></item><item><title>234. core::range::Range — A Range That's Copy, So You Can Store and Reuse It</title><link>https://www.rustbites.com/posts/bite-234/</link><pubDate>Wed, 01 Jul 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-234/</guid><description>&lt;p&gt;The classic &lt;code&gt;0..3&lt;/code&gt; isn&amp;rsquo;t &lt;code&gt;Copy&lt;/code&gt; — it &lt;em&gt;is&lt;/em&gt; the iterator, so it gets consumed and can&amp;rsquo;t live in a &lt;code&gt;Copy&lt;/code&gt; struct. Rust 1.96 stabilises &lt;code&gt;core::range::Range&lt;/code&gt;, which is &lt;code&gt;Copy&lt;/code&gt; and iterates through &lt;code&gt;IntoIterator&lt;/code&gt; instead.&lt;/p&gt;</description></item><item><title>233. str::split_terminator — Split Without the Trailing Empty String</title><link>https://www.rustbites.com/posts/bite-233/</link><pubDate>Wed, 01 Jul 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-233/</guid><description>&lt;p&gt;&lt;code&gt;&amp;quot;a.b.c.&amp;quot;.split('.')&lt;/code&gt; hands you a phantom empty string at the end. &lt;code&gt;split_terminator&lt;/code&gt; reads the separator as &lt;em&gt;ending&lt;/em&gt; each piece, not delimiting it — so the trailing one just vanishes.&lt;/p&gt;</description></item><item><title>232. Iterator::partition — Split Into Two Collections in One Pass</title><link>https://www.rustbites.com/posts/bite-232/</link><pubDate>Tue, 30 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-232/</guid><description>&lt;p&gt;Splitting items into &amp;ldquo;matches&amp;rdquo; and &amp;ldquo;the rest&amp;rdquo; with two &lt;code&gt;.filter()&lt;/code&gt; calls walks the list twice. &lt;code&gt;partition&lt;/code&gt; does it in a single pass.&lt;/p&gt;</description></item><item><title>231. slice::chunk_by — Group Consecutive Elements Without the Index Bookkeeping</title><link>https://www.rustbites.com/posts/bite-231/</link><pubDate>Tue, 30 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-231/</guid><description>&lt;p&gt;Splitting a slice into runs of equal (or related) elements usually means a manual loop with a &lt;code&gt;start&lt;/code&gt; index and an off-by-one waiting to happen. &lt;code&gt;slice::chunk_by&lt;/code&gt; does it in one call.&lt;/p&gt;</description></item><item><title>230. slice::split_at_mut — Two Mutable Halves, No unsafe, No Borrow Fight</title><link>https://www.rustbites.com/posts/bite-230/</link><pubDate>Mon, 29 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-230/</guid><description>&lt;p&gt;Need a &lt;code&gt;&amp;amp;mut&lt;/code&gt; to two different elements of the same slice at once? Indexing twice won&amp;rsquo;t compile — the borrow checker sees the whole slice borrowed twice. &lt;code&gt;split_at_mut&lt;/code&gt; hands you two non-overlapping mutable halves instead.&lt;/p&gt;</description></item><item><title>229. char::to_digit — Turn a Digit Character Into Its Value, Not Its Byte</title><link>https://www.rustbites.com/posts/bite-229/</link><pubDate>Mon, 29 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-229/</guid><description>&lt;p&gt;Reached for &lt;code&gt;c as u8 - b'0'&lt;/code&gt; to turn &lt;code&gt;'7'&lt;/code&gt; into &lt;code&gt;7&lt;/code&gt;? It works until the input isn&amp;rsquo;t a digit — then you get silent garbage. &lt;code&gt;char::to_digit&lt;/code&gt; does it safely and handles hex too.&lt;/p&gt;</description></item><item><title>228. Vec::push_mut — Push and Get a &amp;mut Back, Skip the last_mut().unwrap()</title><link>https://www.rustbites.com/posts/bite-228/</link><pubDate>Sun, 28 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-228/</guid><description>&lt;p&gt;Pushed an element and immediately needed to tweak it? The old way was &lt;code&gt;push&lt;/code&gt; then &lt;code&gt;last_mut().unwrap()&lt;/code&gt;. Rust 1.95 added &lt;code&gt;push_mut&lt;/code&gt;, which hands you the &lt;code&gt;&amp;amp;mut&lt;/code&gt; right back.&lt;/p&gt;</description></item><item><title>227. trim_matches — Strip the Same Char Off Both Ends, However Many There Are</title><link>https://www.rustbites.com/posts/bite-227/</link><pubDate>Sun, 28 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-227/</guid><description>&lt;p&gt;&lt;code&gt;trim()&lt;/code&gt; only knows about whitespace, and &lt;code&gt;strip_prefix&lt;/code&gt; peels off one occurrence. When you need to shave &lt;em&gt;every&lt;/em&gt; leading and trailing &lt;code&gt;.&lt;/code&gt; (or &lt;code&gt;0&lt;/code&gt;, or quote) off a string, reach for &lt;code&gt;trim_matches&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>226. unwrap_or_default — Stop Spelling Out the Empty Value</title><link>https://www.rustbites.com/posts/bite-226/</link><pubDate>Sat, 27 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-226/</guid><description>&lt;p&gt;Writing &lt;code&gt;.unwrap_or(0)&lt;/code&gt; or &lt;code&gt;.unwrap_or_else(String::new)&lt;/code&gt; to fall back to an empty value? If the type already has a &lt;code&gt;Default&lt;/code&gt;, &lt;code&gt;unwrap_or_default&lt;/code&gt; says it for you.&lt;/p&gt;</description></item><item><title>225. Option::map_or — Transform-or-Default in One Call, Skip the match</title><link>https://www.rustbites.com/posts/bite-225/</link><pubDate>Sat, 27 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-225/</guid><description>&lt;p&gt;Reaching for a four-line &lt;code&gt;match&lt;/code&gt; just to turn an &lt;code&gt;Option&lt;/code&gt; into a plain value? &lt;code&gt;map_or&lt;/code&gt; does the transform &lt;em&gt;and&lt;/em&gt; the fallback in a single call.&lt;/p&gt;</description></item><item><title>224. String::from_utf8_lossy — Returns a Cow, So Valid Bytes Cost Zero</title><link>https://www.rustbites.com/posts/bite-224/</link><pubDate>Fri, 26 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-224/</guid><description>&lt;p&gt;&lt;code&gt;from_utf8_lossy&lt;/code&gt; doesn&amp;rsquo;t always allocate. It hands back a &lt;code&gt;Cow&amp;lt;str&amp;gt;&lt;/code&gt; that &lt;em&gt;borrows&lt;/em&gt; your bytes when they&amp;rsquo;re already valid UTF-8 — you only pay for a &lt;code&gt;String&lt;/code&gt; when there&amp;rsquo;s an invalid byte to replace.&lt;/p&gt;</description></item><item><title>223. count_ones — Count Set Bits Without a Loop</title><link>https://www.rustbites.com/posts/bite-223/</link><pubDate>Fri, 26 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-223/</guid><description>&lt;p&gt;Need to count how many bits are set in an integer — flags in a bitmask, a population count, a Hamming weight? Don&amp;rsquo;t write a shift-and-mask loop. Every integer type has &lt;code&gt;.count_ones()&lt;/code&gt;, and it usually lowers to a single CPU instruction.&lt;/p&gt;</description></item><item><title>222. HashSet::intersection / union / difference — Set Math Without the Manual Loops</title><link>https://www.rustbites.com/posts/bite-222/</link><pubDate>Thu, 25 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-222/</guid><description>&lt;p&gt;Need the items two collections have in common, or the ones only in one of them? Don&amp;rsquo;t write a &lt;code&gt;for&lt;/code&gt; loop with &lt;code&gt;.contains()&lt;/code&gt; inside. &lt;code&gt;HashSet&lt;/code&gt; has set algebra built in.&lt;/p&gt;</description></item><item><title>221. from_str_radix — Parse Hex, Binary, or Octal Without Hand-Rolling a Loop</title><link>https://www.rustbites.com/posts/bite-221/</link><pubDate>Thu, 25 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-221/</guid><description>&lt;p&gt;Got a &lt;code&gt;&amp;quot;ff&amp;quot;&lt;/code&gt; or a &lt;code&gt;&amp;quot;1010&amp;quot;&lt;/code&gt; and need the number behind it? Don&amp;rsquo;t loop over the characters multiplying by 16. Every integer type has &lt;code&gt;from_str_radix&lt;/code&gt;, which parses a string in any base from 2 to 36 in one call.&lt;/p&gt;</description></item><item><title>220. ilog10 — Count an Integer's Digits Without Formatting It to a String</title><link>https://www.rustbites.com/posts/bite-220/</link><pubDate>Wed, 24 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-220/</guid><description>&lt;p&gt;Need to know how many digits a number has? Reaching for &lt;code&gt;n.to_string().len()&lt;/code&gt; allocates a whole &lt;code&gt;String&lt;/code&gt; just to measure it. &lt;code&gt;ilog10&lt;/code&gt; answers the same question with one instruction and zero allocation.&lt;/p&gt;</description></item><item><title>219. checked_add_signed — Move an Unsigned Index by a Signed Delta, No Cast</title><link>https://www.rustbites.com/posts/bite-219/</link><pubDate>Wed, 24 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-219/</guid><description>&lt;p&gt;You have a &lt;code&gt;usize&lt;/code&gt; index and a &lt;code&gt;delta: isize&lt;/code&gt; that might be negative. &lt;code&gt;idx + delta&lt;/code&gt; won&amp;rsquo;t even compile, and casting your way around it wraps silently on underflow.&lt;/p&gt;</description></item><item><title>218. str::match_indices — Find Every Match and Its Position in One Pass</title><link>https://www.rustbites.com/posts/bite-218/</link><pubDate>Mon, 22 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-218/</guid><description>&lt;p&gt;Hand-rolling a &lt;code&gt;find&lt;/code&gt; loop to locate every occurrence of a substring means juggling a running offset and remembering to skip past each match. &lt;code&gt;match_indices&lt;/code&gt; hands you each hit &lt;em&gt;and&lt;/em&gt; its byte position as an iterator — no bookkeeping.&lt;/p&gt;</description></item><item><title>217. eq_ignore_ascii_case — Case-Insensitive Compare Without the Allocation</title><link>https://www.rustbites.com/posts/bite-217/</link><pubDate>Mon, 22 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-217/</guid><description>&lt;p&gt;&lt;code&gt;a.to_lowercase() == b.to_lowercase()&lt;/code&gt; allocates two fresh &lt;code&gt;String&lt;/code&gt;s just to throw them away after the comparison. For ASCII text — headers, extensions, keywords — &lt;code&gt;eq_ignore_ascii_case&lt;/code&gt; does it byte-by-byte with zero allocations.&lt;/p&gt;</description></item><item><title>216. unsigned_abs — i32::MIN Has No Positive Twin, So .abs() Overflows</title><link>https://www.rustbites.com/posts/bite-216/</link><pubDate>Sun, 21 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-216/</guid><description>&lt;p&gt;&lt;code&gt;(-5i32).abs()&lt;/code&gt; is fine, but &lt;code&gt;i32::MIN.abs()&lt;/code&gt; panics — the magnitude &lt;code&gt;2147483648&lt;/code&gt; doesn&amp;rsquo;t fit back into an &lt;code&gt;i32&lt;/code&gt;. &lt;code&gt;unsigned_abs&lt;/code&gt; returns the magnitude in the &lt;em&gt;unsigned&lt;/em&gt; type, where it always fits.&lt;/p&gt;</description></item><item><title>215. next_multiple_of — Round Up to a Multiple Without the +m-1 Dance</title><link>https://www.rustbites.com/posts/bite-215/</link><pubDate>Sun, 21 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-215/</guid><description>&lt;p&gt;Padding a length up to the next multiple of 8? The classic &lt;code&gt;(n + 7) / 8 * 8&lt;/code&gt; works right up until it overflows or you fat-finger the constant. &lt;code&gt;next_multiple_of&lt;/code&gt; says exactly what you mean.&lt;/p&gt;</description></item><item><title>214. slice::windows — Compare Consecutive Elements Without the Index Math</title><link>https://www.rustbites.com/posts/bite-214/</link><pubDate>Sat, 20 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-214/</guid><description>&lt;p&gt;The classic &amp;ldquo;look at each element and the next one&amp;rdquo; loop is a panic waiting to happen: &lt;code&gt;0..v.len() - 1&lt;/code&gt; underflows the moment the slice is empty. &lt;code&gt;windows&lt;/code&gt; hands you every consecutive pair safely, no arithmetic required.&lt;/p&gt;</description></item><item><title>213. abs_diff — The Gap Between Two Numbers, No Underflow, No Overflow</title><link>https://www.rustbites.com/posts/bite-213/</link><pubDate>Sat, 20 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-213/</guid><description>&lt;p&gt;Subtracting two unsigned integers to get their distance is a panic waiting to happen — and the signed &lt;code&gt;(a - b).abs()&lt;/code&gt; workaround overflows just as quietly. &lt;code&gt;abs_diff&lt;/code&gt; gives you the gap correctly, every time.&lt;/p&gt;</description></item><item><title>212. slice::fill / fill_with — Reset Every Element Without the Loop</title><link>https://www.rustbites.com/posts/bite-212/</link><pubDate>Fri, 19 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-212/</guid><description>&lt;p&gt;Clearing a buffer with a hand-rolled &lt;code&gt;for&lt;/code&gt; loop is noise. &lt;code&gt;slice::fill&lt;/code&gt; overwrites every element in one call — and &lt;code&gt;fill_with&lt;/code&gt; builds a fresh value per slot.&lt;/p&gt;</description></item><item><title>211. Iterator::inspect — Debug a Lazy Chain Without Tearing It Apart</title><link>https://www.rustbites.com/posts/bite-211/</link><pubDate>Fri, 19 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-211/</guid><description>&lt;p&gt;When a &lt;code&gt;map&lt;/code&gt;/&lt;code&gt;filter&lt;/code&gt; chain gives the wrong answer, the reflex is to rip it into a &lt;code&gt;for&lt;/code&gt; loop just to drop in a &lt;code&gt;println!&lt;/code&gt;. You don&amp;rsquo;t have to — &lt;code&gt;inspect&lt;/code&gt; lets you peek at every value as it flows past.&lt;/p&gt;</description></item><item><title>210. next_power_of_two — Round Up to a Power of Two Without the Bit-Twiddling</title><link>https://www.rustbites.com/posts/bite-210/</link><pubDate>Thu, 18 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-210/</guid><description>&lt;p&gt;Sizing a buffer or hash table to the next power of two is a classic — and people keep reinventing it with shifts and &lt;code&gt;leading_zeros&lt;/code&gt;. The standard library already has it.&lt;/p&gt;</description></item><item><title>209. ..Default::default() — set the fields you care about, default the rest</title><link>https://www.rustbites.com/posts/bite-209/</link><pubDate>Thu, 18 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-209/</guid><description>&lt;p&gt;Building a struct with a dozen fields when you only want to change one is tedious. Struct update syntax lets you fill in the rest from a default — or from any other value.&lt;/p&gt;</description></item><item><title>208. f64::mul_add — One Rounding, One Instruction, Better Accuracy</title><link>https://www.rustbites.com/posts/bite-208/</link><pubDate>Wed, 17 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-208/</guid><description>&lt;p&gt;&lt;code&gt;a * b + c&lt;/code&gt; rounds twice and may compile to two separate operations. &lt;code&gt;a.mul_add(b, c)&lt;/code&gt; computes the whole thing at full precision, rounds &lt;strong&gt;once&lt;/strong&gt;, and on a CPU with FMA folds into a single instruction.&lt;/p&gt;</description></item><item><title>207. if let Guards — Match a Pattern Inside a Guard, and Still Fall Through</title><link>https://www.rustbites.com/posts/bite-207/</link><pubDate>Wed, 17 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-207/</guid><description>&lt;p&gt;A match arm whose extra check is itself a fallible &lt;code&gt;if let&lt;/code&gt; used to force you to nest a second &lt;code&gt;match&lt;/code&gt; — and duplicate the fallback. Rust 1.95 lets the guard do the binding.&lt;/p&gt;</description></item><item><title>206. trim_ascii — Trim Whitespace From &amp;[u8] Without Going Through str</title><link>https://www.rustbites.com/posts/bite-206/</link><pubDate>Tue, 16 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-206/</guid><description>&lt;p&gt;Got a &lt;code&gt;&amp;amp;[u8]&lt;/code&gt; with leading or trailing whitespace? You don&amp;rsquo;t need to validate it as UTF-8 just to trim it.&lt;/p&gt;</description></item><item><title>205. strip_prefix / strip_suffix — Remove a Prefix Once, Not Every Repeat</title><link>https://www.rustbites.com/posts/bite-205/</link><pubDate>Tue, 16 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-205/</guid><description>&lt;p&gt;Reaching for &lt;code&gt;trim_start_matches&lt;/code&gt; to peel off a &lt;code&gt;&amp;quot;--&amp;quot;&lt;/code&gt; or a leading slash? It strips &lt;em&gt;every&lt;/em&gt; repeated match and silently does nothing when there&amp;rsquo;s no match. &lt;code&gt;strip_prefix&lt;/code&gt; removes exactly one and tells you whether it hit.&lt;/p&gt;</description></item><item><title>204. take_while / skip_while — Act on the Leading Run, Not Every Match</title><link>https://www.rustbites.com/posts/bite-204/</link><pubDate>Mon, 15 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-204/</guid><description>&lt;p&gt;Reaching for &lt;code&gt;.filter()&lt;/code&gt; to drop leading blank lines? It&amp;rsquo;ll drop the blank lines in the &lt;em&gt;middle&lt;/em&gt; too. &lt;code&gt;take_while&lt;/code&gt; and &lt;code&gt;skip_while&lt;/code&gt; work on the leading run and stop the moment the predicate flips.&lt;/p&gt;</description></item><item><title>203. Peekable::next_if_map — Consume a Token Only If It Parses, Transform in One Step</title><link>https://www.rustbites.com/posts/bite-203/</link><pubDate>Mon, 15 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-203/</guid><description>&lt;p&gt;&lt;code&gt;next_if&lt;/code&gt; only answers yes/no, so when you also need the &lt;em&gt;converted&lt;/em&gt; value you end up peeking, computing, and calling &lt;code&gt;next()&lt;/code&gt; by hand. Rust 1.94 stabilized &lt;code&gt;Peekable::next_if_map&lt;/code&gt; — conditionally consume the next item &lt;strong&gt;and&lt;/strong&gt; transform it in a single call, putting the item back if it doesn&amp;rsquo;t match.&lt;/p&gt;</description></item><item><title>202. Arc::clone Is a Refcount Bump, Not a Deep Copy — Share Big Data, Don't Duplicate It</title><link>https://www.rustbites.com/posts/bite-202/</link><pubDate>Sun, 14 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-202/</guid><description>&lt;p&gt;&lt;code&gt;big.clone()&lt;/code&gt; on a 50MB lookup table allocates 50MB every time a worker needs a copy. Wrap it in an &lt;code&gt;Arc&lt;/code&gt; once and &lt;code&gt;Arc::clone&lt;/code&gt; is just an atomic &lt;code&gt;+1&lt;/code&gt; on a counter — every owner reads the &lt;em&gt;same&lt;/em&gt; bytes.&lt;/p&gt;</description></item><item><title>201. or_insert vs or_insert_with — Don't Build a Default You'll Throw Away</title><link>https://www.rustbites.com/posts/bite-201/</link><pubDate>Sun, 14 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-201/</guid><description>&lt;p&gt;&lt;code&gt;map.entry(k).or_insert(expensive())&lt;/code&gt; builds &lt;code&gt;expensive()&lt;/code&gt; on &lt;em&gt;every&lt;/em&gt; call — even when the key is already there and the value gets dropped on the floor. Reach for &lt;code&gt;or_insert_with&lt;/code&gt; and the default is computed only when it&amp;rsquo;s actually needed.&lt;/p&gt;</description></item><item><title>200. #[derive(Copy)] and #[inline] — Make Small Types Free to Pass Around</title><link>https://www.rustbites.com/posts/bite-200/</link><pubDate>Sat, 13 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-200/</guid><description>&lt;p&gt;A two-field struct that you &lt;code&gt;.clone()&lt;/code&gt; everywhere, behind a function the optimizer won&amp;rsquo;t inline across crates — that&amp;rsquo;s two small taxes you can stop paying. &lt;code&gt;Copy&lt;/code&gt; deletes the move/drop bookkeeping, &lt;code&gt;#[inline]&lt;/code&gt; lets the body fold into the caller.&lt;/p&gt;</description></item><item><title>199. Static Dispatch — Generics Beat Box&lt;dyn Trait&gt; When You Can Afford the Code</title><link>https://www.rustbites.com/posts/bite-199/</link><pubDate>Sat, 13 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-199/</guid><description>&lt;p&gt;&lt;code&gt;Box&amp;lt;dyn Trait&amp;gt;&lt;/code&gt; is the reflex when a function &amp;ldquo;takes something that implements a trait.&amp;rdquo; But every call through it pays for a vtable hop the compiler can&amp;rsquo;t see past. Swap it for a generic and the optimizer inlines the whole thing.&lt;/p&gt;</description></item><item><title>198. into_iter() to Transform — Move Owned Items Instead of cloned()</title><link>https://www.rustbites.com/posts/bite-198/</link><pubDate>Fri, 12 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-198/</guid><description>&lt;p&gt;You have a &lt;code&gt;Vec&lt;/code&gt; you&amp;rsquo;re about to throw away, and you want a transformed one. Reaching for &lt;code&gt;iter().cloned()&lt;/code&gt; (or &lt;code&gt;iter().map(|x| x.clone())&lt;/code&gt;) duplicates every element on the way out — but you owned them already. &lt;code&gt;into_iter()&lt;/code&gt; moves them straight through.&lt;/p&gt;</description></item><item><title>197. Advance a State Machine with mem::replace — Move the Enum Out, No Clone</title><link>https://www.rustbites.com/posts/bite-197/</link><pubDate>Fri, 12 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-197/</guid><description>&lt;p&gt;Transitioning an enum state behind &lt;code&gt;&amp;amp;mut self&lt;/code&gt; looks impossible: you can&amp;rsquo;t move the old variant&amp;rsquo;s owned data into the new one without the borrow checker stopping you — so people reach for &lt;code&gt;.clone()&lt;/code&gt;. &lt;code&gt;mem::replace&lt;/code&gt; lets you move the &lt;em&gt;whole&lt;/em&gt; state out, leaving a cheap placeholder behind.&lt;/p&gt;</description></item><item><title>196. Return impl Iterator, Not Vec — Let the Caller Decide What to Do</title><link>https://www.rustbites.com/posts/bite-196/</link><pubDate>Thu, 11 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-196/</guid><description>&lt;p&gt;Returning a &lt;code&gt;Vec&lt;/code&gt; from a helper allocates eagerly, every time — even when the caller only wants the first match or a running sum. Return &lt;code&gt;impl Iterator&lt;/code&gt; instead and the allocation simply never happens unless the caller asks for it.&lt;/p&gt;</description></item><item><title>195. Chain Iterator Adapters — Don't collect() Between Every Step</title><link>https://www.rustbites.com/posts/bite-195/</link><pubDate>Thu, 11 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-195/</guid><description>&lt;p&gt;Every &lt;code&gt;collect::&amp;lt;Vec&amp;lt;_&amp;gt;&amp;gt;()&lt;/code&gt; in the middle of a pipeline is a heap allocation and a full pass over your data. Adapters like &lt;code&gt;map&lt;/code&gt; and &lt;code&gt;filter&lt;/code&gt; are lazy and fuse together — chain them and the whole transformation runs in one pass with zero temporary &lt;code&gt;Vec&lt;/code&gt;s.&lt;/p&gt;</description></item><item><title>194. Reuse One Buffer with .clear() — Allocate Once, Loop Many Times</title><link>https://www.rustbites.com/posts/bite-194/</link><pubDate>Wed, 10 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-194/</guid><description>&lt;p&gt;&lt;code&gt;with_capacity&lt;/code&gt; (bite 193) buys a buffer once instead of growing it repeatedly. But if you allocate a &lt;em&gt;fresh&lt;/em&gt; &lt;code&gt;String&lt;/code&gt; or &lt;code&gt;Vec&lt;/code&gt; inside a loop, you throw that buffer away every iteration. &lt;code&gt;.clear()&lt;/code&gt; resets the length to zero while keeping the capacity — so one allocation serves the whole loop.&lt;/p&gt;</description></item><item><title>193. Vec::with_capacity — Size Up Front, Skip the Realloc Churn</title><link>https://www.rustbites.com/posts/bite-193/</link><pubDate>Wed, 10 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-193/</guid><description>&lt;p&gt;A &lt;code&gt;Vec&lt;/code&gt; you &lt;code&gt;push&lt;/code&gt; into one element at a time doesn&amp;rsquo;t grow one element at a time — it doubles, copying every existing item to a fresh allocation each time it outgrows its buffer. If you already know how many items are coming, &lt;code&gt;Vec::with_capacity&lt;/code&gt; buys the whole buffer once.&lt;/p&gt;</description></item><item><title>192. impl Into&lt;String&gt; — Take Owned or Borrowed Without an Extra Allocation</title><link>https://www.rustbites.com/posts/bite-192/</link><pubDate>Tue, 09 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-192/</guid><description>&lt;p&gt;Bite 191 said: if you only &lt;em&gt;read&lt;/em&gt; the argument, take &lt;code&gt;&amp;amp;str&lt;/code&gt;. But what if you need to &lt;em&gt;store&lt;/em&gt; it? Taking &lt;code&gt;&amp;amp;str&lt;/code&gt; and calling &lt;code&gt;.to_owned()&lt;/code&gt; always allocates — even when the caller handed you a &lt;code&gt;String&lt;/code&gt; it was about to throw away. &lt;code&gt;impl Into&amp;lt;String&amp;gt;&lt;/code&gt; fixes that.&lt;/p&gt;</description></item><item><title>191. Accept &amp;str, Not String — Take the Most General Borrow</title><link>https://www.rustbites.com/posts/bite-191/</link><pubDate>Tue, 09 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-191/</guid><description>&lt;p&gt;A function that takes &lt;code&gt;String&lt;/code&gt; forces every caller holding a &lt;code&gt;&amp;amp;str&lt;/code&gt; to allocate just to call you. Take &lt;code&gt;&amp;amp;str&lt;/code&gt; instead — and &lt;code&gt;&amp;amp;[T]&lt;/code&gt; over &lt;code&gt;&amp;amp;Vec&amp;lt;T&amp;gt;&lt;/code&gt; — and deref coercion lets everyone in for free.&lt;/p&gt;</description></item><item><title>190. Return Cow&lt;str&gt; — Allocate Only When You Actually Change Something</title><link>https://www.rustbites.com/posts/bite-190/</link><pubDate>Mon, 08 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-190/</guid><description>&lt;p&gt;An escaping or normalizing function usually has nothing to do — the input is already clean. Returning &lt;code&gt;String&lt;/code&gt; forces an allocation anyway. Return &lt;a href="https://www.rustbites.com/posts/bite-036/"&gt;&lt;code&gt;Cow&amp;lt;str&amp;gt;&lt;/code&gt;&lt;/a&gt; and the common path stays a borrow.&lt;/p&gt;</description></item><item><title>189. str::char_indices — Slice a String Without Panicking on Non-ASCII</title><link>https://www.rustbites.com/posts/bite-189/</link><pubDate>Mon, 08 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-189/</guid><description>&lt;p&gt;&lt;code&gt;chars().enumerate()&lt;/code&gt; hands you a &lt;em&gt;character&lt;/em&gt; count, but &lt;code&gt;&amp;amp;s[..]&lt;/code&gt; wants a &lt;em&gt;byte&lt;/em&gt; offset. Mix them up and one accented letter blows your program apart.&lt;/p&gt;</description></item><item><title>188. LazyLock::from — Skip the Closure When You Already Have the Value</title><link>https://www.rustbites.com/posts/bite-188/</link><pubDate>Sun, 07 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-188/</guid><description>&lt;p&gt;Sometimes your &amp;ldquo;lazy&amp;rdquo; value isn&amp;rsquo;t lazy at all — a test or a CLI flag hands it to you up front. Rust 1.96 stabilized &lt;code&gt;From&amp;lt;T&amp;gt; for LazyLock&amp;lt;T&amp;gt;&lt;/code&gt;, so you can build an already-initialized lock straight from the value.&lt;/p&gt;</description></item><item><title>187. fmt::Write — Stop Allocating a Temp String Just to Append It</title><link>https://www.rustbites.com/posts/bite-187/</link><pubDate>Sun, 07 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-187/</guid><description>&lt;p&gt;&lt;code&gt;out.push_str(&amp;amp;format!(&amp;quot;{name}: {score}&amp;quot;))&lt;/code&gt; builds a brand-new &lt;code&gt;String&lt;/code&gt;, copies it into &lt;code&gt;out&lt;/code&gt;, then throws it away — every single iteration. One &lt;code&gt;use std::fmt::Write;&lt;/code&gt; and &lt;code&gt;write!&lt;/code&gt; formats straight into your buffer instead.&lt;/p&gt;</description></item><item><title>186. str::split_inclusive — Split a String and Keep the Separator With Each Chunk</title><link>https://www.rustbites.com/posts/bite-186/</link><pubDate>Sat, 06 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-186/</guid><description>&lt;p&gt;&lt;code&gt;&amp;quot;a\nb\n&amp;quot;.split('\n')&lt;/code&gt; swallows every newline &lt;em&gt;and&lt;/em&gt; hands you a phantom &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt; at the end. &lt;code&gt;split_inclusive&lt;/code&gt; keeps each separator glued to the chunk it belongs to — no ghost element, and you can &lt;code&gt;.concat()&lt;/code&gt; straight back to the original.&lt;/p&gt;</description></item><item><title>185. Range&lt;NonZeroU32&gt; — Iterate NonZero Integers Without Re-Wrapping Every Step</title><link>https://www.rustbites.com/posts/bite-185/</link><pubDate>Sat, 06 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-185/</guid><description>&lt;p&gt;&lt;code&gt;NonZeroU32&lt;/code&gt; keeps &lt;code&gt;Option&amp;lt;Id&amp;gt;&lt;/code&gt; at 4 bytes — but until Rust 1.96 you couldn&amp;rsquo;t iterate &lt;code&gt;lo..hi&lt;/code&gt; over them. You&amp;rsquo;d drop back to &lt;code&gt;u32&lt;/code&gt; and re-wrap every step.&lt;/p&gt;</description></item><item><title>184. Option::take — The Ergonomic Sibling of mem::take, Just for Option</title><link>https://www.rustbites.com/posts/bite-184/</link><pubDate>Fri, 05 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-184/</guid><description>&lt;p&gt;You&amp;rsquo;ve got an &lt;code&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt; behind &lt;code&gt;&amp;amp;mut self&lt;/code&gt; and you need the &lt;code&gt;T&lt;/code&gt; out. &lt;code&gt;mem::take&lt;/code&gt; works, but the field is &lt;em&gt;already&lt;/em&gt; an &lt;code&gt;Option&lt;/code&gt; — &lt;code&gt;.take()&lt;/code&gt; reads better and does the same job.&lt;/p&gt;</description></item><item><title>183. std::mem::take — Move Out of &amp;mut self Without the Clone</title><link>https://www.rustbites.com/posts/bite-183/</link><pubDate>Fri, 05 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-183/</guid><description>&lt;p&gt;You need the &lt;code&gt;Vec&lt;/code&gt; out of &lt;code&gt;&amp;amp;mut self&lt;/code&gt;, the borrow checker says no, so you &lt;code&gt;.clone()&lt;/code&gt; it. Don&amp;rsquo;t. &lt;code&gt;mem::take&lt;/code&gt; swaps in the default and hands you the original — zero allocation.&lt;/p&gt;</description></item><item><title>182. Path::with_extension — Swap a File Extension Without Slicing Strings</title><link>https://www.rustbites.com/posts/bite-182/</link><pubDate>Thu, 04 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-182/</guid><description>&lt;p&gt;You have &lt;code&gt;report.txt&lt;/code&gt; and want &lt;code&gt;report.md&lt;/code&gt;. Reaching for &lt;code&gt;replace(&amp;quot;.txt&amp;quot;, &amp;quot;.md&amp;quot;)&lt;/code&gt; or a &lt;code&gt;rfind('.')&lt;/code&gt;? Stop — &lt;code&gt;Path::with_extension&lt;/code&gt; returns a fresh &lt;code&gt;PathBuf&lt;/code&gt; with the extension swapped, and it gets every edge case right.&lt;/p&gt;</description></item><item><title>181. Option::get_or_insert_with — Lazy Default That Returns &amp;mut</title><link>https://www.rustbites.com/posts/bite-181/</link><pubDate>Thu, 04 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-181/</guid><description>&lt;p&gt;You have an &lt;code&gt;Option&amp;lt;Vec&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt; field and want to push to it. If it&amp;rsquo;s &lt;code&gt;None&lt;/code&gt;, allocate first; if it&amp;rsquo;s &lt;code&gt;Some&lt;/code&gt;, just push. &lt;code&gt;get_or_insert_with&lt;/code&gt; does both in one call — and hands you back a &lt;code&gt;&amp;amp;mut&lt;/code&gt; so you can use it on the same line.&lt;/p&gt;</description></item><item><title>180. Option::unzip — Split an Optional Pair Into a Pair of Options</title><link>https://www.rustbites.com/posts/bite-180/</link><pubDate>Wed, 03 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-180/</guid><description>&lt;p&gt;When you have an &lt;code&gt;Option&amp;lt;(A, B)&amp;gt;&lt;/code&gt; but the rest of your code wants &lt;code&gt;(Option&amp;lt;A&amp;gt;, Option&amp;lt;B&amp;gt;)&lt;/code&gt;, the obvious move is two &lt;code&gt;map&lt;/code&gt; calls. &lt;code&gt;Option::unzip&lt;/code&gt; does both halves in a single call.&lt;/p&gt;</description></item><item><title>179. Iterator::max_by_key — Find the Best Element Without a Manual Fold</title><link>https://www.rustbites.com/posts/bite-179/</link><pubDate>Wed, 03 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-179/</guid><description>&lt;p&gt;Finding the &amp;ldquo;best&amp;rdquo; item in a collection — longest string, heaviest order, latest timestamp — is one of those tasks where a hand-rolled &lt;code&gt;fold&lt;/code&gt; keeps showing up. &lt;code&gt;Iterator::max_by_key&lt;/code&gt; does the same job in one call, and &lt;code&gt;min_by_key&lt;/code&gt; is right there next to it.&lt;/p&gt;</description></item><item><title>178. Ord::clamp — Stop Writing min(max, max(min, x))</title><link>https://www.rustbites.com/posts/bite-178/</link><pubDate>Tue, 02 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-178/</guid><description>&lt;p&gt;Bounding a value between two limits is one of those tiny operations where everyone hand-rolls a confusing nest of &lt;code&gt;min&lt;/code&gt;/&lt;code&gt;max&lt;/code&gt; calls. &lt;code&gt;Ord::clamp&lt;/code&gt; is the single-call version, and it works on anything that&amp;rsquo;s &lt;code&gt;Ord&lt;/code&gt; or &lt;code&gt;PartialOrd&lt;/code&gt; — not just numbers.&lt;/p&gt;</description></item><item><title>177. BTreeMap::range — Iterate a Sorted Map by Key Range</title><link>https://www.rustbites.com/posts/bite-177/</link><pubDate>Tue, 02 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-177/</guid><description>&lt;p&gt;You have a sorted map keyed by time, port number, or version, and you want every entry between two keys. Filtering on &lt;code&gt;iter()&lt;/code&gt; walks the whole map — &lt;code&gt;BTreeMap::range&lt;/code&gt; walks just the slice you asked for.&lt;/p&gt;</description></item><item><title>176. Option::as_deref — Stop Writing .as_ref().map(|s| s.as_str())</title><link>https://www.rustbites.com/posts/bite-176/</link><pubDate>Mon, 01 Jun 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-176/</guid><description>&lt;p&gt;You have an &lt;code&gt;Option&amp;lt;String&amp;gt;&lt;/code&gt;. The function next door takes &lt;code&gt;Option&amp;lt;&amp;amp;str&amp;gt;&lt;/code&gt;. The chain you keep typing — &lt;code&gt;.as_ref().map(|s| s.as_str())&lt;/code&gt; — has a one-method replacement.&lt;/p&gt;</description></item><item><title>175. PathBuf::push — When an Absolute Argument Wipes Your Base Path</title><link>https://www.rustbites.com/posts/bite-175/</link><pubDate>Mon, 01 Jun 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-175/</guid><description>&lt;p&gt;&lt;code&gt;base.push(user_input)&lt;/code&gt; looks like string concatenation for paths. It isn&amp;rsquo;t — if &lt;code&gt;user_input&lt;/code&gt; is absolute, the original &lt;code&gt;base&lt;/code&gt; is gone.&lt;/p&gt;</description></item><item><title>174. iter::repeat_with — Build N Fresh Things When vec![] Won't Clone</title><link>https://www.rustbites.com/posts/bite-174/</link><pubDate>Sun, 31 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-174/</guid><description>&lt;p&gt;&lt;code&gt;vec![Mutex::new(0); 10]&lt;/code&gt; — won&amp;rsquo;t compile. &lt;code&gt;Mutex&lt;/code&gt; isn&amp;rsquo;t &lt;code&gt;Clone&lt;/code&gt;. &lt;code&gt;iter::repeat_with(|| Mutex::new(0)).take(10).collect()&lt;/code&gt; builds ten fresh ones instead.&lt;/p&gt;</description></item><item><title>173. NonZeroU32 and Friends — Encode an Invariant and Shrink Option for Free</title><link>https://www.rustbites.com/posts/bite-173/</link><pubDate>Sun, 31 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-173/</guid><description>&lt;p&gt;&lt;code&gt;Option&amp;lt;u32&amp;gt;&lt;/code&gt; is &lt;strong&gt;8 bytes&lt;/strong&gt;. &lt;code&gt;Option&amp;lt;NonZeroU32&amp;gt;&lt;/code&gt; is &lt;strong&gt;4 bytes&lt;/strong&gt;. Same information, half the size — and the compiler enforces &amp;ldquo;this can&amp;rsquo;t be zero&amp;rdquo; for you.&lt;/p&gt;</description></item><item><title>172. #[track_caller] — Point the Panic at the Caller, Not Your Helper</title><link>https://www.rustbites.com/posts/bite-172/</link><pubDate>Sat, 30 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-172/</guid><description>&lt;p&gt;You wrap an &lt;code&gt;assert&lt;/code&gt; in a helper to clean up your tests. Now every failure points at the helper&amp;rsquo;s source line instead of the test that called it. &lt;code&gt;#[track_caller]&lt;/code&gt; fixes that with a single line of code.&lt;/p&gt;</description></item><item><title>171. assert_matches! — A Test Failure That Actually Tells You What Went Wrong</title><link>https://www.rustbites.com/posts/bite-171/</link><pubDate>Sat, 30 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-171/</guid><description>&lt;p&gt;&lt;code&gt;assert!(matches!(x, Foo::Bar))&lt;/code&gt; panics with &lt;code&gt;assertion failed: matches!(x, Foo::Bar)&lt;/code&gt; and zero hint about what &lt;code&gt;x&lt;/code&gt; actually was. Rust 1.96 stabilises &lt;code&gt;assert_matches!&lt;/code&gt;, which prints the offending value for you.&lt;/p&gt;</description></item><item><title>170. Ordering::then_with — Chain Comparators for Multi-Key Sorts</title><link>https://www.rustbites.com/posts/bite-170/</link><pubDate>Fri, 29 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-170/</guid><description>&lt;p&gt;Sorting by name, then by age, then by id ends in a nested &lt;code&gt;if a == b { ... }&lt;/code&gt; ladder. &lt;code&gt;Ordering::then_with&lt;/code&gt; flattens the whole thing into one expression.&lt;/p&gt;</description></item><item><title>169. File::create_new — Atomic 'Create Only If It Doesn't Exist'</title><link>https://www.rustbites.com/posts/bite-169/</link><pubDate>Fri, 29 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-169/</guid><description>&lt;p&gt;You want to write a config file, a lockfile, or a &amp;ldquo;did we run yet&amp;rdquo; sentinel — but only if it isn&amp;rsquo;t already there. The &lt;code&gt;if path.exists() { … } else { File::create(path) }&lt;/code&gt; pattern looks fine until two processes hit it at the same time. There&amp;rsquo;s a one-line fix sitting in &lt;code&gt;std::fs&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>168. collect::&lt;Result&lt;Vec&lt;_&gt;, _&gt;&gt;() — Bail an Iterator on the First Error</title><link>https://www.rustbites.com/posts/bite-168/</link><pubDate>Thu, 28 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-168/</guid><description>&lt;p&gt;You have a &lt;code&gt;Vec&amp;lt;&amp;amp;str&amp;gt;&lt;/code&gt; of numbers to parse and you want to bail the moment one of them is malformed. The hand-rolled loop with &lt;code&gt;?&lt;/code&gt; works, but &lt;code&gt;collect()&lt;/code&gt; does the same thing in one line — and most people never realize the trick is in the turbofish.&lt;/p&gt;</description></item><item><title>167. Saturating&lt;T&gt; — Stop Calling .saturating_add() Everywhere</title><link>https://www.rustbites.com/posts/bite-167/</link><pubDate>Thu, 28 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-167/</guid><description>&lt;p&gt;When every step in a loop or formula could overflow, calling &lt;code&gt;.saturating_add()&lt;/code&gt; and &lt;code&gt;.saturating_sub()&lt;/code&gt; on each one turns one line of math into a paragraph.&lt;/p&gt;</description></item><item><title>166. Entry::and_modify — Update If Present, Insert If Not, in One Chain</title><link>https://www.rustbites.com/posts/bite-166/</link><pubDate>Wed, 27 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-166/</guid><description>&lt;p&gt;&lt;code&gt;*map.entry(k).or_insert(0) += 1&lt;/code&gt; is the classic Rust counter. The moment the &amp;ldquo;first time&amp;rdquo; branch needs to look different from the &amp;ldquo;next time&amp;rdquo; branch, that pattern stops fitting — and &lt;code&gt;and_modify&lt;/code&gt; slots in.&lt;/p&gt;</description></item><item><title>165. PhantomData&lt;T&gt; — The Zero-Sized Marker That Pretends to Own a T</title><link>https://www.rustbites.com/posts/bite-165/</link><pubDate>Wed, 27 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-165/</guid><description>&lt;p&gt;You write a generic struct, never actually store a &lt;code&gt;T&lt;/code&gt; in any field, and the compiler stops you with &lt;em&gt;&amp;ldquo;parameter &lt;code&gt;T&lt;/code&gt; is never used&amp;rdquo;&lt;/em&gt;. &lt;code&gt;PhantomData&amp;lt;T&amp;gt;&lt;/code&gt; is the zero-cost lie that fixes it — a marker that occupies no bytes but tells the compiler &amp;ldquo;act as if I own a &lt;code&gt;T&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;</description></item><item><title>162. Pin&lt;P&gt; — The Pointer Type That Says 'This Won't Move'</title><link>https://www.rustbites.com/posts/bite-162/</link><pubDate>Tue, 26 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-162/</guid><description>&lt;p&gt;Self-referential structs are the obvious &amp;ldquo;this should work but doesn&amp;rsquo;t&amp;rdquo; pattern in Rust: a struct that holds a buffer plus a reference into that buffer falls apart the moment it moves and the reference dangles. &lt;code&gt;Pin&amp;lt;P&amp;gt;&lt;/code&gt; is the type that says &amp;ldquo;the pointee is fixed in memory&amp;rdquo; — and is the reason every &lt;code&gt;async fn&lt;/code&gt; future you&amp;rsquo;ve ever &lt;code&gt;.await&lt;/code&gt;ed can keep a pointer to its own local variables.&lt;/p&gt;</description></item><item><title>164. Pin projection — How to actually use the fields behind Pin&lt;&amp;mut Self&gt;</title><link>https://www.rustbites.com/posts/bite-164/</link><pubDate>Tue, 26 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-164/</guid><description>&lt;p&gt;The moment you hand-roll &lt;code&gt;Future::poll&lt;/code&gt;, you have a &lt;code&gt;Pin&amp;lt;&amp;amp;mut Self&amp;gt;&lt;/code&gt; and a question Rust won&amp;rsquo;t answer for you: how do I touch my fields? &lt;code&gt;self.inner&lt;/code&gt; doesn&amp;rsquo;t compile, &lt;code&gt;&amp;amp;mut self.inner&lt;/code&gt; is what &lt;code&gt;Pin&lt;/code&gt; exists to prevent, and the answer — &lt;em&gt;pin projection&lt;/em&gt; — is one of those idioms everyone reinvents until they reach for &lt;code&gt;pin-project-lite&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>163. Cow::to_mut — Lazy In-Place Mutation Through Cow</title><link>https://www.rustbites.com/posts/bite-163/</link><pubDate>Tue, 26 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-163/</guid><description>&lt;p&gt;&lt;a href="https://www.rustbites.com/posts/bite-036/"&gt;&lt;code&gt;Cow&amp;lt;str&amp;gt;&lt;/code&gt;&lt;/a&gt; is the type everyone reaches for when a function &lt;em&gt;might&lt;/em&gt; need to modify its input. &lt;code&gt;Cow::Borrowed&lt;/code&gt; and &lt;code&gt;Cow::Owned&lt;/code&gt; are the constructors that get the spotlight; &lt;code&gt;to_mut&lt;/code&gt; is the third piece, and it&amp;rsquo;s the one that actually pays off the laziness.&lt;/p&gt;</description></item><item><title>161. Weak&lt;T&gt; — The Non-Owning Pointer That Breaks Rc Cycles</title><link>https://www.rustbites.com/posts/bite-161/</link><pubDate>Mon, 25 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-161/</guid><description>&lt;p&gt;&lt;a href="https://www.rustbites.com/posts/bite-159/"&gt;&lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt; is a counter, not a tracing GC: two &lt;code&gt;Rc&lt;/code&gt;s pointing at each other will sit in memory forever, each propping the other&amp;rsquo;s strong-count above zero. &lt;code&gt;Weak&amp;lt;T&amp;gt;&lt;/code&gt; is the cure — a pointer that observes an &lt;code&gt;Rc&lt;/code&gt;&amp;rsquo;s allocation without keeping it alive.&lt;/p&gt;</description></item><item><title>160. Arc&lt;T&gt; — Atomic Reference Counting for Threads, Plus Mutex and RwLock</title><link>https://www.rustbites.com/posts/bite-160/</link><pubDate>Sun, 24 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-160/</guid><description>&lt;p&gt;&lt;a href="https://www.rustbites.com/posts/bite-159/"&gt;&lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt; gave us shared ownership inside one thread. The moment you &lt;code&gt;thread::spawn&lt;/code&gt; it, the compiler refuses. &lt;code&gt;Arc&amp;lt;T&amp;gt;&lt;/code&gt; is the same shape with an atomic counter: same &lt;code&gt;clone&lt;/code&gt;-the-pointer ergonomics, but &lt;code&gt;Send + Sync&lt;/code&gt; and safe to share between threads — and the building block under almost every concurrent pattern in Rust.&lt;/p&gt;</description></item><item><title>159. Rc&lt;T&gt; — Single-Threaded Shared Ownership</title><link>https://www.rustbites.com/posts/bite-159/</link><pubDate>Sun, 24 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-159/</guid><description>&lt;p&gt;The borrow checker&amp;rsquo;s one-owner rule is a feature until you&amp;rsquo;re modeling a graph, a cache, or any structure where &amp;ldquo;who owns this?&amp;rdquo; honestly has more than one answer. &lt;code&gt;Rc&amp;lt;T&amp;gt;&lt;/code&gt; is the escape hatch: a reference-counted pointer that lets multiple owners share the same heap allocation, single-threaded, no locking, no overhead beyond a counter increment.&lt;/p&gt;</description></item><item><title>158. OnceLock&lt;T&gt; and LazyLock&lt;T, F&gt; — The std Replacements for lazy_static!</title><link>https://www.rustbites.com/posts/bite-158/</link><pubDate>Sat, 23 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-158/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-157/"&gt;Atomic*&lt;/a&gt; handled &amp;ldquo;many threads, one scalar.&amp;rdquo; For &amp;ldquo;many threads, one &lt;em&gt;value&lt;/em&gt; — computed once, then read forever&amp;rdquo; the std answer is two types: &lt;code&gt;LazyLock&amp;lt;T, F&amp;gt;&lt;/code&gt; when you can name the initializer up front, &lt;code&gt;OnceLock&amp;lt;T&amp;gt;&lt;/code&gt; when you only learn the value at runtime. Both make the old &lt;code&gt;lazy_static!&lt;/code&gt; macro and the &lt;code&gt;once_cell&lt;/code&gt; crate redundant.&lt;/p&gt;</description></item><item><title>157. Atomic* — The Thread-Safe Cell for Scalars</title><link>https://www.rustbites.com/posts/bite-157/</link><pubDate>Sat, 23 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-157/</guid><description>&lt;p&gt;A &lt;a href="https://www.rustbites.com/posts/bite-151/"&gt;&lt;code&gt;Cell&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt; lets a single thread mutate through &lt;code&gt;&amp;amp;self&lt;/code&gt; — &lt;code&gt;get&lt;/code&gt;/&lt;code&gt;set&lt;/code&gt; instead of &lt;code&gt;&amp;amp;mut&lt;/code&gt;. The atomic types in &lt;code&gt;std::sync::atomic&lt;/code&gt; are the same shape, just &lt;code&gt;Sync&lt;/code&gt;: a counter, flag, or pointer many threads can poke at without a &lt;code&gt;Mutex&lt;/code&gt;, no lock acquisition, no guard, no panic on contention.&lt;/p&gt;</description></item><item><title>156. RwLock&lt;T&gt; — Many Readers OR One Writer, When Reads Dominate</title><link>https://www.rustbites.com/posts/bite-156/</link><pubDate>Fri, 22 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-156/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-155/"&gt;Mutex&amp;lt;T&amp;gt;&lt;/a&gt; treats every caller the same: one at a time, no matter what they&amp;rsquo;re doing. If ninety-nine of them only want to &lt;em&gt;read&lt;/em&gt;, that&amp;rsquo;s ninety-nine threads serialized behind a lock they didn&amp;rsquo;t need. &lt;code&gt;RwLock&amp;lt;T&amp;gt;&lt;/code&gt; splits the door in two — many readers OR one writer — so read-heavy workloads actually fan out.&lt;/p&gt;</description></item><item><title>155. Mutex&lt;T&gt; — Cross-Thread Exclusive Access, With a Guard Instead of a Panic</title><link>https://www.rustbites.com/posts/bite-155/</link><pubDate>Fri, 22 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-155/</guid><description>&lt;p&gt;Yesterday&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-152/"&gt;RefCell&amp;lt;T&amp;gt;&lt;/a&gt; gives you &lt;code&gt;&amp;amp;mut&lt;/code&gt; through &lt;code&gt;&amp;amp;self&lt;/code&gt; on a single thread — and panics the moment a second borrow shows up. &lt;code&gt;Mutex&amp;lt;T&amp;gt;&lt;/code&gt; is the same idea wearing a hard hat: it&amp;rsquo;s &lt;code&gt;Sync&lt;/code&gt;, so it works across threads, and instead of panicking on contention it just &lt;em&gt;blocks&lt;/em&gt; until the other holder is done.&lt;/p&gt;</description></item><item><title>154. UnsafeCell&lt;T&gt; — The Primitive Every Interior-Mutability Type Is Built On</title><link>https://www.rustbites.com/posts/bite-154/</link><pubDate>Thu, 21 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-154/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-153/"&gt;OnceCell / LazyCell&lt;/a&gt; bite — and &lt;code&gt;Cell&lt;/code&gt;, &lt;code&gt;RefCell&lt;/code&gt;, &lt;code&gt;Mutex&lt;/code&gt;, &lt;code&gt;RwLock&lt;/code&gt;, &lt;code&gt;OnceLock&lt;/code&gt;, every atomic — all bottom out at the same type: &lt;code&gt;UnsafeCell&amp;lt;T&amp;gt;&lt;/code&gt;. It is the one and only legal way in Rust to mutate through a shared reference. You&amp;rsquo;ll almost never type its name, but knowing what it does explains why all the rest exist.&lt;/p&gt;</description></item><item><title>153. OnceCell&lt;T&gt; — Memoize Through &amp;self Without Wrapping in RefCell</title><link>https://www.rustbites.com/posts/bite-153/</link><pubDate>Thu, 21 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-153/</guid><description>&lt;p&gt;You have a &lt;code&gt;parse(&amp;amp;self) -&amp;gt; &amp;amp;Heavy&lt;/code&gt; accessor that needs to compute once and cache. &lt;code&gt;&amp;amp;self&lt;/code&gt; rules out a plain field assignment. &lt;code&gt;Cell&lt;/code&gt; needs &lt;code&gt;Copy&lt;/code&gt;. &lt;code&gt;RefCell&lt;/code&gt; won&amp;rsquo;t lend the inside out past &lt;code&gt;.borrow()&lt;/code&gt;. &lt;code&gt;OnceCell&amp;lt;T&amp;gt;&lt;/code&gt; is the missing piece — write-once, &lt;code&gt;&amp;amp;self&lt;/code&gt; API, hands back a real &lt;code&gt;&amp;amp;T&lt;/code&gt; that lives as long as the cell.&lt;/p&gt;</description></item><item><title>152. RefCell&lt;T&gt; — When You Need to Actually Borrow the Inside</title><link>https://www.rustbites.com/posts/bite-152/</link><pubDate>Wed, 20 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-152/</guid><description>&lt;p&gt;This morning&amp;rsquo;s &lt;a href="https://www.rustbites.com/posts/bite-151/"&gt;Cell&amp;lt;T&amp;gt;&lt;/a&gt; only lets you swap whole values in and out. The moment you want to call &lt;code&gt;.push()&lt;/code&gt; on the &lt;code&gt;Vec&lt;/code&gt; inside, or hand out a &lt;code&gt;&amp;amp;str&lt;/code&gt; slice of the &lt;code&gt;String&lt;/code&gt; inside, you need a real &lt;code&gt;&amp;amp;mut&lt;/code&gt; — and that&amp;rsquo;s exactly what &lt;code&gt;RefCell&amp;lt;T&amp;gt;&lt;/code&gt; gives you, just with the aliasing rules checked at runtime instead of compile time.&lt;/p&gt;</description></item><item><title>151. Cell&lt;T&gt; — Interior Mutability Without the Borrow Checker Drama</title><link>https://www.rustbites.com/posts/bite-151/</link><pubDate>Wed, 20 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-151/</guid><description>&lt;p&gt;You hand the same struct to two closures and both want to bump a counter. &lt;code&gt;&amp;amp;mut&lt;/code&gt; fights you, &lt;code&gt;RefCell&lt;/code&gt; introduces runtime borrow checks you don&amp;rsquo;t need — &lt;code&gt;Cell&amp;lt;T&amp;gt;&lt;/code&gt; quietly mutates through a shared &lt;code&gt;&amp;amp;&lt;/code&gt; reference, with zero overhead, as long as you only ever swap whole values in and out.&lt;/p&gt;</description></item><item><title>150. Vec::spare_capacity_mut — Fill a Vec From a Callback Without Zeroing It First</title><link>https://www.rustbites.com/posts/bite-150/</link><pubDate>Tue, 19 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-150/</guid><description>&lt;p&gt;You reserve 4 KiB to read from a socket, and to hand the buffer over you first&amp;hellip; write 4096 zeros. &lt;code&gt;Vec::spare_capacity_mut&lt;/code&gt; exposes the reserved-but-uninitialized tail as &lt;code&gt;&amp;amp;mut [MaybeUninit&amp;lt;u8&amp;gt;]&lt;/code&gt; so the callback writes straight into the allocation.&lt;/p&gt;</description></item><item><title>149. OnceLock::wait — Block a Thread Until Another One Initializes the Value</title><link>https://www.rustbites.com/posts/bite-149/</link><pubDate>Tue, 19 May 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-149/</guid><description>&lt;p&gt;You have one thread loading a config and a handful of workers that can&amp;rsquo;t start until it&amp;rsquo;s ready. &lt;code&gt;OnceLock::wait&lt;/code&gt; blocks until the value lands — no &lt;code&gt;Condvar&lt;/code&gt;, no &lt;code&gt;Mutex&lt;/code&gt;, no spin loop.&lt;/p&gt;</description></item><item><title>148. Result::is_ok_and — Test the Variant and the Value in One Call</title><link>https://www.rustbites.com/posts/bite-148/</link><pubDate>Mon, 18 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-148/</guid><description>&lt;p&gt;Checking &amp;ldquo;is this &lt;code&gt;Ok&lt;/code&gt;, and is the inner value positive?&amp;rdquo; usually means a &lt;code&gt;match&lt;/code&gt; or an &lt;code&gt;if let&lt;/code&gt;. &lt;code&gt;Result::is_ok_and&lt;/code&gt; collapses both questions into one line.&lt;/p&gt;</description></item><item><title>146. char::MAX_LEN_UTF8 — Size UTF-8 Buffers Without Magic Numbers</title><link>https://www.rustbites.com/posts/bite-146/</link><pubDate>Mon, 18 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-146/</guid><description>&lt;p&gt;Every time you&amp;rsquo;ve called &lt;code&gt;char::encode_utf8&lt;/code&gt;, you&amp;rsquo;ve written &lt;code&gt;[0u8; 4]&lt;/code&gt; from memory. Rust 1.93 stabilises &lt;code&gt;char::MAX_LEN_UTF8&lt;/code&gt; so you don&amp;rsquo;t have to keep that magic number in your head.&lt;/p&gt;</description></item><item><title>147. Cell::as_array_of_cells — Mutate One Slot of a Cell-Wrapped Array</title><link>https://www.rustbites.com/posts/bite-147/</link><pubDate>Mon, 18 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-147/</guid><description>&lt;p&gt;You have a &lt;code&gt;Cell&amp;lt;[i32; 4]&amp;gt;&lt;/code&gt; and you want to bump element &lt;code&gt;[2]&lt;/code&gt;. &lt;code&gt;cell.get()&lt;/code&gt;, mutate the copy, &lt;code&gt;cell.set(...)&lt;/code&gt; the whole thing back — for one slot? &lt;code&gt;Cell::as_array_of_cells&lt;/code&gt; hands you &lt;code&gt;&amp;amp;[Cell&amp;lt;i32&amp;gt;; 4]&lt;/code&gt; so each slot is its own little Cell.&lt;/p&gt;</description></item><item><title>143. Vec::dedup_by_key — Collapse Consecutive Duplicates by a Derived Key</title><link>https://www.rustbites.com/posts/bite-143/</link><pubDate>Sun, 17 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-143/</guid><description>&lt;p&gt;&lt;code&gt;Vec::dedup()&lt;/code&gt; only collapses runs that are &lt;em&gt;exactly&lt;/em&gt; equal. When you care about a derived attribute — the minute on a timestamp, the domain in an email, the first letter of a word — reach for &lt;code&gt;dedup_by_key&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>145. Duration::from_nanos_u128 — Round-Trip Nanoseconds Without the u64 Cast</title><link>https://www.rustbites.com/posts/bite-145/</link><pubDate>Sun, 17 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-145/</guid><description>&lt;p&gt;&lt;code&gt;Duration::as_nanos()&lt;/code&gt; hands you a &lt;code&gt;u128&lt;/code&gt;. &lt;code&gt;Duration::from_nanos()&lt;/code&gt; takes a &lt;code&gt;u64&lt;/code&gt;. You feed one into the other and the compiler yells at you — or worse, you cast and quietly truncate at 584 years. Rust 1.93 closed the loop with &lt;code&gt;from_nanos_u128&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>144. Vec::into_raw_parts — Hand a Vec to C Without the ManuallyDrop Dance</title><link>https://www.rustbites.com/posts/bite-144/</link><pubDate>Sun, 17 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-144/</guid><description>&lt;p&gt;You want to give a Rust-allocated buffer to C and re-take it later. That means handing over &lt;code&gt;(ptr, len, capacity)&lt;/code&gt; — and historically, prying those three out of a &lt;code&gt;Vec&lt;/code&gt; without freeing the allocation meant wrapping the vector in &lt;code&gt;ManuallyDrop&lt;/code&gt; first. &lt;strong&gt;Rust 1.93&lt;/strong&gt; stabilises &lt;code&gt;Vec::into_raw_parts&lt;/code&gt;, a single safe call that returns the triple and consumes the &lt;code&gt;Vec&lt;/code&gt; for you.&lt;/p&gt;</description></item><item><title>142. Path::absolute — Make a Path Absolute Without Touching the Filesystem</title><link>https://www.rustbites.com/posts/bite-142/</link><pubDate>Sat, 16 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-142/</guid><description>&lt;p&gt;Need an absolute path for a log line, an error message, or a &amp;ldquo;files will land here&amp;rdquo; preview — but the file might not exist yet? &lt;code&gt;fs::canonicalize&lt;/code&gt; will refuse. &lt;code&gt;std::path::absolute&lt;/code&gt; (stable since Rust 1.79) gives you the absolute form without ever opening the disk.&lt;/p&gt;</description></item><item><title>141. BinaryHeap::into_sorted_vec — Heapsort in One Call</title><link>https://www.rustbites.com/posts/bite-141/</link><pubDate>Fri, 15 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-141/</guid><description>&lt;p&gt;You stuffed everything into a &lt;code&gt;BinaryHeap&lt;/code&gt; to keep &amp;ldquo;biggest first&amp;rdquo; cheap, but at the end of the day you want a &lt;em&gt;sorted&lt;/em&gt; &lt;code&gt;Vec&lt;/code&gt; to hand to the next stage. The pop-loop you almost wrote is built into the type — &lt;code&gt;into_sorted_vec&lt;/code&gt; consumes the heap and gives you the ascending-order &lt;code&gt;Vec&lt;/code&gt; for free.&lt;/p&gt;</description></item><item><title>140. slice::as_array — Lock a Slice Into a Fixed-Size Array Reference</title><link>https://www.rustbites.com/posts/bite-140/</link><pubDate>Fri, 15 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-140/</guid><description>&lt;p&gt;A function hands you &lt;code&gt;&amp;amp;[u8]&lt;/code&gt; but the next step wants &lt;code&gt;&amp;amp;[u8; 32]&lt;/code&gt;. The old answer was &lt;code&gt;&amp;lt;&amp;amp;[u8; 32]&amp;gt;::try_from(slice)&lt;/code&gt; — a turbofish-and-trait dance for what is really just a length check. &lt;strong&gt;Rust 1.93&lt;/strong&gt; stabilises &lt;code&gt;slice::as_array&lt;/code&gt;, the method-call version that does exactly that.&lt;/p&gt;</description></item><item><title>139. HashMap::extract_if — Drain Matching Entries Without Losing Them</title><link>https://www.rustbites.com/posts/bite-139/</link><pubDate>Thu, 14 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-139/</guid><description>&lt;p&gt;&lt;code&gt;HashMap::retain&lt;/code&gt; discards what it removes. When you actually want those values — to log them, ship them, or move them elsewhere — you used to clone the keys and double-walk the map. &lt;code&gt;extract_if&lt;/code&gt;, stable since &lt;strong&gt;Rust 1.88&lt;/strong&gt;, hands them back as an iterator.&lt;/p&gt;</description></item><item><title>138. iter::zip — Parallel Iteration Without the Method-Chain Dance</title><link>https://www.rustbites.com/posts/bite-138/</link><pubDate>Thu, 14 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-138/</guid><description>&lt;p&gt;&lt;code&gt;a.iter().zip(b.iter())&lt;/code&gt; makes one collection the star and the other an awkward sidekick. &lt;code&gt;std::iter::zip&lt;/code&gt; puts them on equal footing — two arguments, same indent, no method-chain twist.&lt;/p&gt;</description></item><item><title>137. Vec::retain_mut — Filter and Edit In Place, In One Pass</title><link>https://www.rustbites.com/posts/bite-137/</link><pubDate>Wed, 13 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-137/</guid><description>&lt;p&gt;&lt;code&gt;retain&lt;/code&gt; decides who stays, but its closure only sees &lt;code&gt;&amp;amp;T&lt;/code&gt; — so when you also want to &lt;em&gt;tweak&lt;/em&gt; the survivors, you end up making two passes. &lt;code&gt;retain_mut&lt;/code&gt; collapses that into one.&lt;/p&gt;</description></item><item><title>136. LazyLock::force_mut — Mutate a Lazy Value Without Wrapping It in a Mutex</title><link>https://www.rustbites.com/posts/bite-136/</link><pubDate>Wed, 13 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-136/</guid><description>&lt;p&gt;Got a &lt;code&gt;LazyLock&lt;/code&gt; you own outright? With &lt;code&gt;force_mut&lt;/code&gt; (stable in Rust 1.94), you can initialize &lt;em&gt;and&lt;/em&gt; mutate it through &lt;code&gt;&amp;amp;mut LazyLock&lt;/code&gt; — no &lt;code&gt;Mutex&lt;/code&gt;, no &lt;code&gt;RwLock&lt;/code&gt;, no locking dance.&lt;/p&gt;</description></item><item><title>135. str::strip_prefix — Trim a Prefix Without Slicing by Hand</title><link>https://www.rustbites.com/posts/bite-135/</link><pubDate>Tue, 12 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-135/</guid><description>&lt;p&gt;Reaching for &lt;code&gt;if s.starts_with(&amp;quot;foo&amp;quot;) { &amp;amp;s[3..] }&lt;/code&gt; to drop a prefix? That&amp;rsquo;s an off-by-one waiting to happen — and a panic the first time someone passes in an emoji. &lt;code&gt;str::strip_prefix&lt;/code&gt; returns &lt;code&gt;Option&amp;lt;&amp;amp;str&amp;gt;&lt;/code&gt; and gets it right by construction.&lt;/p&gt;</description></item><item><title>134. Iterator::find_map — Find and Transform in One Pass</title><link>https://www.rustbites.com/posts/bite-134/</link><pubDate>Tue, 12 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-134/</guid><description>&lt;p&gt;Looking for the first element that matches &lt;em&gt;and&lt;/em&gt; needs to come back as something else? Skip the &lt;code&gt;filter_map(...).next()&lt;/code&gt; two-step — &lt;code&gt;find_map&lt;/code&gt; says it in one call.&lt;/p&gt;</description></item><item><title>133. slice::rotate_left — Cycle Elements Through a Slice Without a Second Buffer</title><link>https://www.rustbites.com/posts/bite-133/</link><pubDate>Mon, 11 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-133/</guid><description>&lt;p&gt;Need the first few elements to wrap around to the back? &lt;code&gt;slice.rotate_left(n)&lt;/code&gt; cycles them through in place — no scratch &lt;code&gt;Vec&lt;/code&gt;, no clever indexing, no borrow checker drama.&lt;/p&gt;</description></item><item><title>132. abs_diff — Subtract Without Caring Which Side Is Bigger</title><link>https://www.rustbites.com/posts/bite-132/</link><pubDate>Mon, 11 May 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-132/</guid><description>&lt;p&gt;Subtracting two unsigned integers and the smaller one comes first? Instant panic. &lt;code&gt;a.abs_diff(b)&lt;/code&gt; returns the gap as a &lt;code&gt;u*&lt;/code&gt; regardless of which side is bigger — no branching, no overflow.&lt;/p&gt;</description></item><item><title>131. mem::offset_of! — Byte Offsets Without the memoffset Crate</title><link>https://www.rustbites.com/posts/bite-131/</link><pubDate>Sun, 10 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-131/</guid><description>&lt;p&gt;You need the byte offset of a field — for FFI, custom serialization, or talking to a C struct. The old answer was &lt;code&gt;unsafe&lt;/code&gt; pointer arithmetic on a &lt;code&gt;MaybeUninit&lt;/code&gt;, or pulling in the &lt;code&gt;memoffset&lt;/code&gt; crate. &lt;code&gt;std::mem::offset_of!&lt;/code&gt; is the safe, one-liner replacement.&lt;/p&gt;</description></item><item><title>129. BTreeMap::extract_if — Range-Scoped Filter-and-Remove in One Pass</title><link>https://www.rustbites.com/posts/bite-129/</link><pubDate>Sun, 10 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-129/</guid><description>&lt;p&gt;&lt;code&gt;Vec::extract_if&lt;/code&gt; was great. The &lt;code&gt;BTreeMap&lt;/code&gt; version, stable since &lt;strong&gt;Rust 1.91&lt;/strong&gt;, adds a trick the slice variant can&amp;rsquo;t pull off — a range bound that scopes the scan to part of the keyspace.&lt;/p&gt;</description></item><item><title>130. mem::discriminant — Compare Enum Variants, Ignore the Payload</title><link>https://www.rustbites.com/posts/bite-130/</link><pubDate>Sun, 10 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-130/</guid><description>&lt;p&gt;You want to know &amp;ldquo;is this another &lt;code&gt;Click&lt;/code&gt;?&amp;rdquo; — not whether the coordinates match. Hand-rolling a &lt;code&gt;match&lt;/code&gt; for every variant gets old fast. &lt;code&gt;std::mem::discriminant&lt;/code&gt; answers that question in one call.&lt;/p&gt;</description></item><item><title>128. slice::copy_within — Shift Bytes In-Place Without Fighting the Borrow Checker</title><link>https://www.rustbites.com/posts/bite-128/</link><pubDate>Sat, 09 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-128/</guid><description>&lt;p&gt;You want to copy &lt;code&gt;buf[2..5]&lt;/code&gt; over &lt;code&gt;buf[0..3]&lt;/code&gt; — same buffer, no allocation. Reach for &lt;code&gt;copy_from_slice&lt;/code&gt; and the borrow checker says no. &lt;code&gt;copy_within&lt;/code&gt; is the one-call answer.&lt;/p&gt;</description></item><item><title>127. std::mem::swap — Trade Two Values Through Their &amp;mut</title><link>https://www.rustbites.com/posts/bite-127/</link><pubDate>Fri, 08 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-127/</guid><description>&lt;p&gt;The textbook &lt;code&gt;let tmp = a; a = b; b = tmp;&lt;/code&gt; falls over the moment &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; are &lt;code&gt;&amp;amp;mut T&lt;/code&gt; — you can&amp;rsquo;t move out of a reference. &lt;code&gt;mem::swap&lt;/code&gt; is the generic, safe, two-line answer.&lt;/p&gt;</description></item><item><title>126. Vec::split_off — Cut a Vec in Two and Keep Both Halves</title><link>https://www.rustbites.com/posts/bite-126/</link><pubDate>Fri, 08 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-126/</guid><description>&lt;p&gt;You want the tail of a &lt;code&gt;Vec&lt;/code&gt; as its own owned collection — the head stays put, the tail walks away. Cloning a slice works for &lt;code&gt;Clone&lt;/code&gt; types, but breaks the moment your elements aren&amp;rsquo;t cloneable. &lt;code&gt;Vec::split_off&lt;/code&gt; doesn&amp;rsquo;t care.&lt;/p&gt;</description></item><item><title>125. RwLockWriteGuard::downgrade — Hand a Write Lock Off as a Read, Atomically</title><link>https://www.rustbites.com/posts/bite-125/</link><pubDate>Thu, 07 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-125/</guid><description>&lt;p&gt;You took a write lock, updated the data, and now you only want to read. Dropping the write guard and re-acquiring as a reader leaves a window where another writer can slip in. &lt;code&gt;downgrade&lt;/code&gt; closes that window.&lt;/p&gt;</description></item><item><title>124. Iterator::cycle — Round-Robin Without the Modulo Math</title><link>https://www.rustbites.com/posts/bite-124/</link><pubDate>Thu, 07 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-124/</guid><description>&lt;p&gt;Round-robin assignment usually shows up as &lt;code&gt;things[i % workers.len()]&lt;/code&gt; — fine until the index gets clever, the slice gets reordered, or the source isn&amp;rsquo;t even indexable. &lt;code&gt;Iterator::cycle&lt;/code&gt; turns any &lt;code&gt;Clone&lt;/code&gt; iterator into an infinite one, and the modulo dance disappears.&lt;/p&gt;</description></item><item><title>123. BTreeMap::pop_first — A Sorted Map That Doubles as a Priority Queue</title><link>https://www.rustbites.com/posts/bite-123/</link><pubDate>Wed, 06 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-123/</guid><description>&lt;p&gt;&lt;code&gt;BinaryHeap&lt;/code&gt; only goes one way — biggest first. When you want to pull the smallest &lt;em&gt;or&lt;/em&gt; the largest from the same collection, reach for &lt;code&gt;BTreeMap&lt;/code&gt; and let &lt;code&gt;pop_first&lt;/code&gt; / &lt;code&gt;pop_last&lt;/code&gt; do the work.&lt;/p&gt;</description></item><item><title>122. Option::filter — Keep Some Only When the Value Passes</title><link>https://www.rustbites.com/posts/bite-122/</link><pubDate>Wed, 06 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-122/</guid><description>&lt;p&gt;You&amp;rsquo;ve got an &lt;code&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt;, but you only want to keep the &lt;code&gt;Some&lt;/code&gt; if the value passes a test. The &lt;code&gt;match&lt;/code&gt;-with-guard version works — &lt;code&gt;Option::filter&lt;/code&gt; says the same thing in one call.&lt;/p&gt;</description></item><item><title>121. rem_euclid — The Modulo That Doesn't Go Negative</title><link>https://www.rustbites.com/posts/bite-121/</link><pubDate>Tue, 05 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-121/</guid><description>&lt;p&gt;&lt;code&gt;-1 % 7&lt;/code&gt; in Rust is &lt;code&gt;-1&lt;/code&gt;, not &lt;code&gt;6&lt;/code&gt;. That&amp;rsquo;s a math gotcha lurking in every wraparound index, every clock arithmetic, every &amp;ldquo;what day of the week&amp;rdquo; calculation. &lt;code&gt;rem_euclid&lt;/code&gt; is the modulo you actually wanted.&lt;/p&gt;</description></item><item><title>120. OnceLock — Lazy Statics That Initialize on Your Schedule</title><link>https://www.rustbites.com/posts/bite-120/</link><pubDate>Tue, 05 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-120/</guid><description>&lt;p&gt;&lt;code&gt;LazyLock&lt;/code&gt; runs its initializer the first time anyone touches the value — fine when the inputs are baked in at compile time, useless when you only learn them at runtime. &lt;code&gt;OnceLock&lt;/code&gt; is the same idea, but you decide when (and with what data) initialization happens.&lt;/p&gt;</description></item><item><title>119. iter::from_fn — Build a Custom Iterator Without the Struct</title><link>https://www.rustbites.com/posts/bite-119/</link><pubDate>Mon, 04 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-119/</guid><description>&lt;p&gt;Need a custom iterator that carries a bit of state? Skip the struct plus &lt;code&gt;impl Iterator&lt;/code&gt; boilerplate. &lt;code&gt;iter::from_fn&lt;/code&gt; turns any closure that returns &lt;code&gt;Option&amp;lt;T&amp;gt;&lt;/code&gt; into a real iterator.&lt;/p&gt;</description></item><item><title>118. [T; N]::map — Transform an Array Without Allocating a Vec</title><link>https://www.rustbites.com/posts/bite-118/</link><pubDate>Mon, 04 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-118/</guid><description>&lt;p&gt;&lt;code&gt;[1, 2, 3].iter().map(|n| n * 2).collect::&amp;lt;Vec&amp;lt;_&amp;gt;&amp;gt;()&lt;/code&gt; works, but you&amp;rsquo;ve thrown the length away in the type and paid for a heap allocation. Arrays have their own &lt;code&gt;map&lt;/code&gt; — same shape in, same shape out, no &lt;code&gt;Vec&lt;/code&gt; in sight.&lt;/p&gt;</description></item><item><title>117. Iterator::step_by — Every Nth Element Without filter + enumerate</title><link>https://www.rustbites.com/posts/bite-117/</link><pubDate>Sun, 03 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-117/</guid><description>&lt;p&gt;Want every 3rd value from a series? The reflex is &lt;code&gt;enumerate().filter(|(i, _)| i % 3 == 0)&lt;/code&gt; — three combinators, one modulo, and you&amp;rsquo;ve thrown away the indices anyway. &lt;code&gt;step_by(3)&lt;/code&gt; does the same thing in one call.&lt;/p&gt;</description></item><item><title>116. Path::file_prefix — Get the Real Stem of archive.tar.gz</title><link>https://www.rustbites.com/posts/bite-116/</link><pubDate>Sun, 03 May 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-116/</guid><description>&lt;p&gt;&lt;code&gt;Path::file_stem&lt;/code&gt; strips the &lt;em&gt;last&lt;/em&gt; extension, so &lt;code&gt;archive.tar.gz&lt;/code&gt; comes back as &lt;code&gt;archive.tar&lt;/code&gt;. That&amp;rsquo;s almost never what you want for double-extension files. &lt;code&gt;file_prefix&lt;/code&gt; strips from the &lt;em&gt;first&lt;/em&gt; dot instead — &lt;code&gt;archive&lt;/code&gt;, finally.&lt;/p&gt;</description></item><item><title>115. Vec::resize_with — Grow a Vec With a Closure, Not a Clone</title><link>https://www.rustbites.com/posts/bite-115/</link><pubDate>Sat, 02 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-115/</guid><description>&lt;p&gt;&lt;code&gt;Vec::resize&lt;/code&gt; makes every new slot a clone of the same value. When you need fresh values per slot — counters, allocations, defaults — &lt;code&gt;resize_with&lt;/code&gt; calls a closure for each new element instead.&lt;/p&gt;</description></item><item><title>114. Option::transpose — Use ? on an Optional Result</title><link>https://www.rustbites.com/posts/bite-114/</link><pubDate>Sat, 02 May 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-114/</guid><description>&lt;p&gt;Got an &lt;code&gt;Option&amp;lt;Result&amp;lt;T, E&amp;gt;&amp;gt;&lt;/code&gt; and want to &lt;code&gt;?&lt;/code&gt; the error out? You can&amp;rsquo;t — &lt;code&gt;?&lt;/code&gt; doesn&amp;rsquo;t reach inside the &lt;code&gt;Option&lt;/code&gt;. &lt;code&gt;transpose&lt;/code&gt; flips it to &lt;code&gt;Result&amp;lt;Option&amp;lt;T&amp;gt;, E&amp;gt;&lt;/code&gt;, and the rest takes care of itself.&lt;/p&gt;</description></item><item><title>113. Arc::make_mut — Mutate Inside an Arc Without the Dance</title><link>https://www.rustbites.com/posts/bite-113/</link><pubDate>Fri, 01 May 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-113/</guid><description>&lt;p&gt;You have an &lt;code&gt;Arc&amp;lt;T&amp;gt;&lt;/code&gt;, you want a &lt;code&gt;&amp;amp;mut T&lt;/code&gt;. &lt;code&gt;Arc&lt;/code&gt; only hands out &lt;code&gt;&amp;amp;T&lt;/code&gt;, so the usual workaround is clone-the-inner, mutate, rewrap. &lt;code&gt;Arc::make_mut&lt;/code&gt; does that for you — and skips the clone when no one else is watching.&lt;/p&gt;</description></item><item><title>112. Iterator::scan — Fold That Yields Every Step</title><link>https://www.rustbites.com/posts/bite-112/</link><pubDate>Fri, 01 May 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-112/</guid><description>&lt;p&gt;&lt;code&gt;fold&lt;/code&gt; keeps the running state but only hands you the final answer. So you reach for a &lt;code&gt;mut&lt;/code&gt; variable plus &lt;code&gt;map&lt;/code&gt;, or you give up and &lt;code&gt;collect&lt;/code&gt; first. &lt;code&gt;scan&lt;/code&gt; is the missing middle: a fold that yields each intermediate step.&lt;/p&gt;</description></item><item><title>111. Vec::insert_mut — Splice In and Edit Without Reindexing</title><link>https://www.rustbites.com/posts/bite-111/</link><pubDate>Thu, 30 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-111/</guid><description>&lt;p&gt;You &lt;code&gt;insert&lt;/code&gt; a placeholder, then index back to fix it up. Two lookups, two bounds checks, one wobble. &lt;code&gt;Vec::insert_mut&lt;/code&gt; — stable in 1.95 — hands you the &lt;code&gt;&amp;amp;mut T&lt;/code&gt; directly.&lt;/p&gt;</description></item><item><title>110. slice::split_at_checked — Split Without the Panic</title><link>https://www.rustbites.com/posts/bite-110/</link><pubDate>Thu, 30 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-110/</guid><description>&lt;p&gt;&lt;code&gt;slice.split_at(i)&lt;/code&gt; panics the second &lt;code&gt;i &amp;gt; len&lt;/code&gt;. The usual fix is a length check wrapped around the call so you don&amp;rsquo;t blow up on a bad index. &lt;code&gt;split_at_checked&lt;/code&gt; does the same job in one call and hands you an &lt;code&gt;Option&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>109. BinaryHeap::peek_mut — Edit the Top Without Pop-and-Push</title><link>https://www.rustbites.com/posts/bite-109/</link><pubDate>Wed, 29 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-109/</guid><description>&lt;p&gt;Updating the largest element in a &lt;code&gt;BinaryHeap&lt;/code&gt; shouldn&amp;rsquo;t take two heap operations. &lt;code&gt;peek_mut&lt;/code&gt; lets you mutate it in place and re-heapifies on drop — one sift instead of two.&lt;/p&gt;</description></item><item><title>108. Iterator::max_by_key — Find the Biggest Without Sorting the Whole Thing</title><link>https://www.rustbites.com/posts/bite-108/</link><pubDate>Wed, 29 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-108/</guid><description>&lt;p&gt;Need the longest string in a &lt;code&gt;Vec&lt;/code&gt;? Don&amp;rsquo;t sort the whole list to grab the last element — &lt;code&gt;max_by_key&lt;/code&gt; walks once, allocates nothing, and returns it directly.&lt;/p&gt;</description></item><item><title>107. Vec::splice — Replace a Range and Keep the Old Values</title><link>https://www.rustbites.com/posts/bite-107/</link><pubDate>Tue, 28 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-107/</guid><description>&lt;p&gt;Need to swap a chunk of a &lt;code&gt;Vec&lt;/code&gt; for a different number of items? Most people reach for &lt;code&gt;drain&lt;/code&gt; plus &lt;code&gt;extend&lt;/code&gt; and a bunch of bookkeeping. &lt;code&gt;Vec::splice&lt;/code&gt; does the whole thing in one call — and even hands back what it removed.&lt;/p&gt;</description></item><item><title>106. Iterator::by_ref — Take Part of an Iterator and Keep the Rest</title><link>https://www.rustbites.com/posts/bite-106/</link><pubDate>Tue, 28 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-106/</guid><description>&lt;p&gt;Called &lt;code&gt;iter.take(n).collect()&lt;/code&gt; and watched the borrow checker swallow the whole iterator? &lt;code&gt;by_ref&lt;/code&gt; lets you consume a chunk and keep iterating from where you stopped.&lt;/p&gt;</description></item><item><title>105. Vec::extend_from_within — Duplicate a Range Without Fighting the Borrow Checker</title><link>https://www.rustbites.com/posts/bite-105/</link><pubDate>Mon, 27 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-105/</guid><description>&lt;p&gt;Trying to copy a slice of a &lt;code&gt;Vec&lt;/code&gt; back onto the end of itself? &lt;code&gt;v.extend_from_slice(&amp;amp;v[..k])&lt;/code&gt; won&amp;rsquo;t compile — &lt;code&gt;&amp;amp;v&lt;/code&gt; and &lt;code&gt;&amp;amp;mut v&lt;/code&gt; collide. &lt;code&gt;extend_from_within&lt;/code&gt; is the one-call answer.&lt;/p&gt;</description></item><item><title>103. bool::then_some — Turn a Condition Into an Option Without an if</title><link>https://www.rustbites.com/posts/bite-103/</link><pubDate>Mon, 27 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-103/</guid><description>&lt;p&gt;Writing &lt;code&gt;if condition { Some(value) } else { None }&lt;/code&gt; for the hundredth time? &lt;code&gt;bool::then_some&lt;/code&gt; collapses that whole pattern into a single chainable call.&lt;/p&gt;</description></item><item><title>104. Vec::swap_remove — O(1) Removal When Order Doesn't Matter</title><link>https://www.rustbites.com/posts/bite-104/</link><pubDate>Sun, 26 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-104/</guid><description>&lt;p&gt;Calling &lt;code&gt;Vec::remove(i)&lt;/code&gt; shifts every element after &lt;code&gt;i&lt;/code&gt; left by one — that&amp;rsquo;s O(n) per call. If you don&amp;rsquo;t care about order, &lt;code&gt;swap_remove&lt;/code&gt; does the same job in O(1).&lt;/p&gt;</description></item><item><title>102. slice::partition_point — Binary Search That Just Returns the Index</title><link>https://www.rustbites.com/posts/bite-102/</link><pubDate>Sat, 25 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-102/</guid><description>&lt;p&gt;Reaching for &lt;code&gt;binary_search&lt;/code&gt; on a sorted &lt;code&gt;Vec&lt;/code&gt; and unwrapping &lt;code&gt;Ok(i) | Err(i)&lt;/code&gt; because you only ever wanted the index? &lt;code&gt;slice::partition_point&lt;/code&gt; skips the &lt;code&gt;Result&lt;/code&gt; ceremony and hands you the position directly.&lt;/p&gt;</description></item><item><title>101. f64::total_cmp — Sort Floats Without the NaN Panic</title><link>https://www.rustbites.com/posts/bite-101/</link><pubDate>Fri, 24 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-101/</guid><description>&lt;p&gt;Tried &lt;code&gt;v.sort()&lt;/code&gt; on a &lt;code&gt;Vec&amp;lt;f64&amp;gt;&lt;/code&gt; and hit &lt;code&gt;the trait Ord is not implemented for f64&lt;/code&gt;? Then reached for &lt;code&gt;.sort_by(|a, b| a.partial_cmp(b).unwrap())&lt;/code&gt; and now a stray &lt;code&gt;NaN&lt;/code&gt; is about to panic your service at 3am? &lt;code&gt;f64::total_cmp&lt;/code&gt; is the one-liner that makes both problems disappear.&lt;/p&gt;</description></item><item><title>100. std::cmp::Reverse — Sort Descending Without Writing a Closure</title><link>https://www.rustbites.com/posts/bite-100/</link><pubDate>Fri, 24 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-100/</guid><description>&lt;p&gt;Want to sort a &lt;code&gt;Vec&lt;/code&gt; in descending order? The old trick is &lt;code&gt;v.sort_by(|a, b| b.cmp(a))&lt;/code&gt;, and every time you write it you flip &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; and pray you got it right. &lt;code&gt;std::cmp::Reverse&lt;/code&gt; is a one-word replacement.&lt;/p&gt;</description></item><item><title>99. std::mem::replace — Swap a Value and Keep the Old One</title><link>https://www.rustbites.com/posts/bite-099/</link><pubDate>Thu, 23 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-099/</guid><description>&lt;p&gt;&lt;code&gt;mem::take&lt;/code&gt; is great until your type doesn&amp;rsquo;t have a sensible &lt;code&gt;Default&lt;/code&gt;. That&amp;rsquo;s where &lt;code&gt;mem::replace&lt;/code&gt; steps in — you pick what gets left behind, and you still get the old value out of a &lt;code&gt;&amp;amp;mut&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>98. sort_by_cached_key — Stop Recomputing Expensive Sort Keys</title><link>https://www.rustbites.com/posts/bite-098/</link><pubDate>Thu, 23 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-098/</guid><description>&lt;p&gt;&lt;code&gt;sort_by_key&lt;/code&gt; sounds like it computes the key once per element. It doesn&amp;rsquo;t — it calls your closure at every comparison, so an n-element sort can pay for that key O(n log n) times. If the key is expensive, &lt;code&gt;sort_by_cached_key&lt;/code&gt; is the fix you&amp;rsquo;ve been looking for.&lt;/p&gt;</description></item><item><title>97. Option::take_if — Take the Value Out Only When You Want To</title><link>https://www.rustbites.com/posts/bite-097/</link><pubDate>Wed, 22 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-097/</guid><description>&lt;p&gt;You want to pull a value out of an &lt;code&gt;Option&lt;/code&gt; — but only if it meets some condition. Before &lt;code&gt;take_if&lt;/code&gt;, that little sentence turned into a five-line dance with &lt;code&gt;as_ref&lt;/code&gt;, &lt;code&gt;is_some_and&lt;/code&gt;, and a separate &lt;code&gt;take()&lt;/code&gt;. Now it&amp;rsquo;s one call.&lt;/p&gt;</description></item><item><title>96. Result::inspect_err — Log Errors Without Breaking the ? Chain</title><link>https://www.rustbites.com/posts/bite-096/</link><pubDate>Wed, 22 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-096/</guid><description>&lt;p&gt;You want to log an error but still bubble it up with &lt;code&gt;?&lt;/code&gt;. The usual trick is &lt;code&gt;.map_err&lt;/code&gt; with a closure that sneaks in a &lt;code&gt;eprintln!&lt;/code&gt; and returns the error unchanged. &lt;code&gt;Result::inspect_err&lt;/code&gt; does that for you — and reads like what you meant.&lt;/p&gt;</description></item><item><title>95. LazyLock::get — Peek at a Lazy Value Without Initializing It</title><link>https://www.rustbites.com/posts/bite-095/</link><pubDate>Tue, 21 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-095/</guid><description>&lt;p&gt;Wanted to know whether a &lt;code&gt;LazyLock&lt;/code&gt; has been initialized yet — without &lt;em&gt;causing&lt;/em&gt; the initialization by touching it? Rust 1.94 stabilises &lt;code&gt;LazyLock::get&lt;/code&gt; and &lt;code&gt;LazyCell::get&lt;/code&gt;, which return &lt;code&gt;Option&amp;lt;&amp;amp;T&amp;gt;&lt;/code&gt; and leave the closure untouched if it hasn&amp;rsquo;t fired.&lt;/p&gt;</description></item><item><title>94. ControlFlow::is_break and is_continue — Ask the Flow Which Way It Went</title><link>https://www.rustbites.com/posts/bite-094/</link><pubDate>Tue, 21 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-094/</guid><description>&lt;p&gt;Got a &lt;code&gt;ControlFlow&lt;/code&gt; back from &lt;code&gt;try_fold&lt;/code&gt; or a visitor and just want to know which variant you&amp;rsquo;re holding? Before 1.95 you either pattern-matched or reached for &lt;code&gt;matches!&lt;/code&gt;. Rust 1.95 adds straightforward &lt;code&gt;.is_break()&lt;/code&gt; and &lt;code&gt;.is_continue()&lt;/code&gt; methods.&lt;/p&gt;</description></item><item><title>93. MaybeUninit Array Conversions — Build Fixed Arrays Without transmute</title><link>https://www.rustbites.com/posts/bite-093/</link><pubDate>Mon, 20 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-093/</guid><description>&lt;p&gt;Ever tried to build a &lt;code&gt;[T; N]&lt;/code&gt; element-by-element and ended up reaching for &lt;code&gt;mem::transmute&lt;/code&gt; because &lt;code&gt;[MaybeUninit&amp;lt;T&amp;gt;; N]&lt;/code&gt; refused to convert? Rust 1.95 stabilises safe conversions between &lt;code&gt;[MaybeUninit&amp;lt;T&amp;gt;; N]&lt;/code&gt; and &lt;code&gt;MaybeUninit&amp;lt;[T; N]&amp;gt;&lt;/code&gt; — no transmute, no tricks.&lt;/p&gt;</description></item><item><title>92. core::range — Range Types You Can Actually Copy</title><link>https://www.rustbites.com/posts/bite-092/</link><pubDate>Mon, 20 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-092/</guid><description>&lt;p&gt;Ever tried to reuse a &lt;code&gt;0..=10&lt;/code&gt; range and hit &amp;ldquo;use of moved value&amp;rdquo;? Rust 1.95 stabilises &lt;code&gt;core::range&lt;/code&gt;, a new module of range types that implement &lt;code&gt;Copy&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>91. bool::try_from — Convert Integers to Booleans Safely</title><link>https://www.rustbites.com/posts/bite-091/</link><pubDate>Sun, 19 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-091/</guid><description>&lt;p&gt;Need to turn a &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; from a database, config file, or FFI boundary into a &lt;code&gt;bool&lt;/code&gt;? &lt;code&gt;bool::try_from&lt;/code&gt; does it safely — rejecting anything that isn&amp;rsquo;t &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;. Stabilized in Rust 1.95.&lt;/p&gt;</description></item><item><title>90. black_box — Stop the Compiler From Erasing Your Benchmarks</title><link>https://www.rustbites.com/posts/bite-090/</link><pubDate>Sun, 19 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-090/</guid><description>&lt;p&gt;Your benchmark ran in 0 nanoseconds? Congratulations — the compiler optimised away the code you were trying to measure. &lt;code&gt;std::hint::black_box&lt;/code&gt; prevents that by hiding values from the optimiser.&lt;/p&gt;</description></item><item><title>89. cold_path — Tell the Compiler Which Branch Won't Happen</title><link>https://www.rustbites.com/posts/bite-089/</link><pubDate>Sat, 18 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-089/</guid><description>&lt;p&gt;Your error-handling branch fires once in a million calls, but the compiler doesn&amp;rsquo;t know that. &lt;code&gt;core::hint::cold_path&lt;/code&gt; lets you mark unlikely branches so the optimiser can focus on the hot path.&lt;/p&gt;</description></item><item><title>88. Vec::push_mut — Push and Modify in One Step</title><link>https://www.rustbites.com/posts/bite-088/</link><pubDate>Sat, 18 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-088/</guid><description>&lt;p&gt;Tired of pushing a default into a &lt;code&gt;Vec&lt;/code&gt; and then grabbing a mutable reference to fill it in? Rust 1.95 stabilises &lt;code&gt;push_mut&lt;/code&gt;, which returns &lt;code&gt;&amp;amp;mut T&lt;/code&gt; to the element it just inserted.&lt;/p&gt;</description></item><item><title>87. Atomic update — Kill the Compare-and-Swap Loop</title><link>https://www.rustbites.com/posts/bite-087/</link><pubDate>Fri, 17 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-087/</guid><description>&lt;p&gt;Every Rust developer who&amp;rsquo;s written lock-free code has written the same &lt;code&gt;compare_exchange&lt;/code&gt; loop. Rust 1.95 finally gives atomics an &lt;code&gt;update&lt;/code&gt; method that does it for you.&lt;/p&gt;</description></item><item><title>86. cfg_select! — Compile-Time Match on Platform and Features</title><link>https://www.rustbites.com/posts/bite-086/</link><pubDate>Fri, 17 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-086/</guid><description>&lt;p&gt;Stop stacking &lt;code&gt;#[cfg]&lt;/code&gt; blocks that contradict each other — &lt;code&gt;cfg_select!&lt;/code&gt; gives you a match-like syntax for conditional compilation, right in the standard library.&lt;/p&gt;</description></item><item><title>85. cast_signed &amp; cast_unsigned — Explicit Sign Casting for Integers</title><link>https://www.rustbites.com/posts/bite-085/</link><pubDate>Thu, 16 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-085/</guid><description>&lt;p&gt;Stop using &lt;code&gt;as&lt;/code&gt; to flip between signed and unsigned integers — &lt;code&gt;cast_signed()&lt;/code&gt; and &lt;code&gt;cast_unsigned()&lt;/code&gt; say exactly what you mean.&lt;/p&gt;</description></item><item><title>84. Result::flatten — Unwrap Nested Results in One Call</title><link>https://www.rustbites.com/posts/bite-084/</link><pubDate>Thu, 16 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-084/</guid><description>&lt;p&gt;You have a &lt;code&gt;Result&amp;lt;Result&amp;lt;T, E&amp;gt;, E&amp;gt;&lt;/code&gt; and just want the inner &lt;code&gt;Result&amp;lt;T, E&amp;gt;&lt;/code&gt;. Before Rust 1.89, that meant a clunky &lt;code&gt;and_then(|r| r)&lt;/code&gt;. Now there&amp;rsquo;s &lt;code&gt;Result::flatten&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>83. Arc::unwrap_or_clone — Take Ownership Without the Dance</title><link>https://www.rustbites.com/posts/bite-083/</link><pubDate>Wed, 15 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-083/</guid><description>&lt;p&gt;You need to own a &lt;code&gt;T&lt;/code&gt; but all you have is an &lt;code&gt;Arc&amp;lt;T&amp;gt;&lt;/code&gt;. The old pattern is a six-line fumble with &lt;code&gt;try_unwrap&lt;/code&gt;. &lt;code&gt;Arc::unwrap_or_clone&lt;/code&gt; collapses it into one call — and skips the clone entirely when it can.&lt;/p&gt;</description></item><item><title>82. isqrt — Integer Square Root Without Floating Point</title><link>https://www.rustbites.com/posts/bite-082/</link><pubDate>Wed, 15 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-082/</guid><description>&lt;p&gt;&lt;code&gt;(n as f64).sqrt() as u64&lt;/code&gt; is the classic hack — and it silently gives the wrong answer for large values. Rust 1.84 stabilized &lt;code&gt;isqrt&lt;/code&gt; on every integer type: exact, float-free, no precision traps.&lt;/p&gt;</description></item><item><title>81. checked_sub_signed — Subtract a Signed Delta From an Unsigned Without Casts</title><link>https://www.rustbites.com/posts/bite-081/</link><pubDate>Tue, 14 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-081/</guid><description>&lt;p&gt;&lt;code&gt;checked_add_signed&lt;/code&gt; has been around for years. Its missing sibling finally landed: as of Rust 1.91, &lt;code&gt;u64::checked_sub_signed&lt;/code&gt; (and the whole &lt;code&gt;{checked, overflowing, saturating, wrapping}_sub_signed&lt;/code&gt; family) lets you subtract an &lt;code&gt;i64&lt;/code&gt; from a &lt;code&gt;u64&lt;/code&gt; without casting, unsafe, or hand-rolled overflow checks.&lt;/p&gt;</description></item><item><title>80. VecDeque::pop_front_if and pop_back_if — Conditional Pops on Both Ends</title><link>https://www.rustbites.com/posts/bite-080/</link><pubDate>Tue, 14 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-080/</guid><description>&lt;p&gt;&lt;code&gt;Vec::pop_if&lt;/code&gt; got a deque-shaped sibling. As of Rust 1.93, &lt;code&gt;VecDeque&lt;/code&gt; has &lt;code&gt;pop_front_if&lt;/code&gt; and &lt;code&gt;pop_back_if&lt;/code&gt; — conditional pops on either end without the peek-then-pop dance.&lt;/p&gt;</description></item><item><title>79. #[diagnostic::on_unimplemented] — Custom Error Messages for Your Traits</title><link>https://www.rustbites.com/posts/bite-079/</link><pubDate>Mon, 13 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-079/</guid><description>&lt;p&gt;Trait errors are notoriously cryptic. &lt;code&gt;#[diagnostic::on_unimplemented]&lt;/code&gt; lets you replace the compiler&amp;rsquo;s default &amp;ldquo;trait bound not satisfied&amp;rdquo; with a message that actually tells the user what went wrong.&lt;/p&gt;</description></item><item><title>78. div_ceil — Divide and Round Up Without the Overflow Bug</title><link>https://www.rustbites.com/posts/bite-078/</link><pubDate>Mon, 13 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-078/</guid><description>&lt;p&gt;Need to split items into fixed-size pages or chunks? The classic &lt;code&gt;(n + size - 1) / size&lt;/code&gt; trick silently overflows. &lt;code&gt;div_ceil&lt;/code&gt; does it correctly.&lt;/p&gt;</description></item><item><title>77. repeat_n — Repeat a Value Exactly N Times</title><link>https://www.rustbites.com/posts/bite-077/</link><pubDate>Sun, 12 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-077/</guid><description>&lt;p&gt;Stop writing &lt;code&gt;repeat(x).take(n)&lt;/code&gt; — there&amp;rsquo;s a dedicated function that&amp;rsquo;s both cleaner and more efficient.&lt;/p&gt;</description></item><item><title>76. slice::as_chunks — Split Slices into Fixed-Size Arrays</title><link>https://www.rustbites.com/posts/bite-076/</link><pubDate>Sun, 12 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-076/</guid><description>&lt;p&gt;You&amp;rsquo;re calling &lt;code&gt;.chunks(4)&lt;/code&gt; and immediately doing &lt;code&gt;chunk.try_into().unwrap()&lt;/code&gt; to get an array. &lt;code&gt;as_chunks&lt;/code&gt; gives you &lt;code&gt;&amp;amp;[[T; N]]&lt;/code&gt; directly — a slice of properly typed arrays, plus the remainder.&lt;/p&gt;</description></item><item><title>75. select_nth_unstable — Find the Kth Element Without Sorting</title><link>https://www.rustbites.com/posts/bite-075/</link><pubDate>Sat, 11 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-075/</guid><description>&lt;p&gt;You&amp;rsquo;re sorting an entire Vec just to grab the median or the top 3 elements. &lt;code&gt;select_nth_unstable&lt;/code&gt; does it in O(n) — no full sort required.&lt;/p&gt;</description></item><item><title>74. slice::is_sorted — Ask the Slice if It's Already Sorted</title><link>https://www.rustbites.com/posts/bite-074/</link><pubDate>Sat, 11 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-074/</guid><description>&lt;p&gt;You&amp;rsquo;ve written &lt;code&gt;windows(2).all(|w| w[0] &amp;lt;= w[1])&lt;/code&gt; one too many times. The &lt;code&gt;is_sorted&lt;/code&gt; family of methods says what you actually mean — in one call.&lt;/p&gt;</description></item><item><title>73. u64::midpoint — Average Two Numbers Without Overflow</title><link>https://www.rustbites.com/posts/bite-073/</link><pubDate>Fri, 10 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-073/</guid><description>&lt;p&gt;Computing the average of two integers sounds trivial — until it overflows. The &lt;code&gt;midpoint&lt;/code&gt; method gives you a correct result every time, no wider types required.&lt;/p&gt;</description></item><item><title>72. if let Guards — Pattern Match Inside Match Guards</title><link>https://www.rustbites.com/posts/bite-072/</link><pubDate>Fri, 10 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-072/</guid><description>&lt;p&gt;Match guards are great for adding conditions to arms, but until now you couldn&amp;rsquo;t destructure inside them. Rust 1.95 stabilizes &lt;strong&gt;&lt;code&gt;if let&lt;/code&gt; guards&lt;/strong&gt;, letting you pattern-match right in the guard position.&lt;/p&gt;</description></item><item><title>71. Inline const Blocks — Compile-Time Evaluation Anywhere</title><link>https://www.rustbites.com/posts/bite-071/</link><pubDate>Thu, 09 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-071/</guid><description>&lt;p&gt;Need a compile-time value in the middle of runtime code? Wrap it in &lt;code&gt;const { }&lt;/code&gt; and the compiler evaluates it on the spot — no separate &lt;code&gt;const&lt;/code&gt; item needed.&lt;/p&gt;</description></item><item><title>70. Iterator::intersperse — Join Elements Without Collecting First</title><link>https://www.rustbites.com/posts/bite-070/</link><pubDate>Thu, 09 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-070/</guid><description>&lt;p&gt;Tired of collecting into a &lt;code&gt;Vec&lt;/code&gt; just to call &lt;code&gt;.join(&amp;quot;,&amp;quot;)&lt;/code&gt;? &lt;code&gt;intersperse&lt;/code&gt; inserts a separator between every pair of elements — lazily, right inside the iterator chain.&lt;/p&gt;</description></item><item><title>69. Iterator::try_fold — Fold That Knows When to Stop</title><link>https://www.rustbites.com/posts/bite-069/</link><pubDate>Wed, 08 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-069/</guid><description>&lt;p&gt;Need to accumulate values from an iterator but bail on the first error? &lt;code&gt;try_fold&lt;/code&gt; gives you the power of &lt;code&gt;fold&lt;/code&gt; with the early-exit behavior of &lt;code&gt;?&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>68. f64::next_up — Walk the Floating Point Number Line</title><link>https://www.rustbites.com/posts/bite-068/</link><pubDate>Wed, 08 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-068/</guid><description>&lt;p&gt;Ever wondered what the &lt;em&gt;next&lt;/em&gt; representable floating point number after &lt;code&gt;1.0&lt;/code&gt; is? Since Rust 1.86, &lt;code&gt;f64::next_up&lt;/code&gt; and &lt;code&gt;f64::next_down&lt;/code&gt; let you step through the number line one float at a time.&lt;/p&gt;</description></item><item><title>67. Box::leak — Turn Owned Data Into a Static Reference</title><link>https://www.rustbites.com/posts/bite-067/</link><pubDate>Tue, 07 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-067/</guid><description>&lt;p&gt;Sometimes you need a &lt;code&gt;&amp;amp;'static str&lt;/code&gt; but all you have is a &lt;code&gt;String&lt;/code&gt;. Meet &lt;code&gt;Box::leak&lt;/code&gt; — it deliberately leaks heap memory so you get a reference that lives forever.&lt;/p&gt;</description></item><item><title>66. Inferred Const Generics — Let the Compiler Count For You</title><link>https://www.rustbites.com/posts/bite-066/</link><pubDate>Tue, 07 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-066/</guid><description>&lt;p&gt;Tired of manually counting array lengths and const generic arguments? Since Rust 1.89, you can write &lt;code&gt;_&lt;/code&gt; in const generic positions and let the compiler figure it out.&lt;/p&gt;</description></item><item><title>65. Precise Capturing — Stop impl Trait From Borrowing Too Much</title><link>https://www.rustbites.com/posts/bite-065/</link><pubDate>Mon, 06 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-065/</guid><description>&lt;p&gt;Ever had the compiler refuse to let you use a value after calling a function — even though the return type shouldn&amp;rsquo;t borrow it? &lt;code&gt;use&amp;lt;&amp;gt;&lt;/code&gt; bounds give you precise control over what &lt;code&gt;impl Trait&lt;/code&gt; actually captures.&lt;/p&gt;</description></item><item><title>64. Iterator::unzip — Split Pairs into Separate Collections</title><link>https://www.rustbites.com/posts/bite-064/</link><pubDate>Mon, 06 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-064/</guid><description>&lt;p&gt;Got an iterator of tuples and need two separate collections? Stop looping and pushing manually — &lt;code&gt;unzip&lt;/code&gt; splits pairs into two collections in a single pass.&lt;/p&gt;</description></item><item><title>63. fmt::from_fn — Display Anything With a Closure</title><link>https://www.rustbites.com/posts/bite-063/</link><pubDate>Sun, 05 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-063/</guid><description>&lt;p&gt;Need a quick &lt;code&gt;Display&lt;/code&gt; impl without defining a whole new type? &lt;code&gt;std::fmt::from_fn&lt;/code&gt; turns any closure into a formattable value — ad-hoc Display in one line.&lt;/p&gt;</description></item><item><title>62. Iterator::flat_map — Map and Flatten in One Step</title><link>https://www.rustbites.com/posts/bite-062/</link><pubDate>Sun, 05 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-062/</guid><description>&lt;p&gt;Need to transform each element into multiple items and collect them all into a flat sequence? &lt;code&gt;flat_map&lt;/code&gt; combines &lt;code&gt;map&lt;/code&gt; and &lt;code&gt;flatten&lt;/code&gt; into a single, expressive call.&lt;/p&gt;</description></item><item><title>61. Iterator::reduce — Fold Without an Initial Value</title><link>https://www.rustbites.com/posts/bite-061/</link><pubDate>Sat, 04 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-061/</guid><description>&lt;p&gt;Using &lt;code&gt;fold&lt;/code&gt; but your accumulator starts as the first element anyway? &lt;code&gt;Iterator::reduce&lt;/code&gt; cuts out the boilerplate and handles empty iterators gracefully.&lt;/p&gt;</description></item><item><title>60. Iterator::partition — Split a Collection in Two</title><link>https://www.rustbites.com/posts/bite-060/</link><pubDate>Sat, 04 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-060/</guid><description>&lt;p&gt;Need to split a collection into two groups based on a condition? Skip the manual loop — &lt;code&gt;Iterator::partition&lt;/code&gt; does it in one call.&lt;/p&gt;</description></item><item><title>59. split_first_chunk — Destructure Slices into Arrays</title><link>https://www.rustbites.com/posts/bite-059/</link><pubDate>Fri, 03 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-059/</guid><description>&lt;p&gt;Parsing a header from a byte buffer? Extracting the first N elements of a slice? &lt;code&gt;split_first_chunk&lt;/code&gt; hands you a fixed-size array and the remainder in one call — no manual indexing, no panics.&lt;/p&gt;</description></item><item><title>58. Option::is_none_or — The Guard Clause You Were Missing</title><link>https://www.rustbites.com/posts/bite-058/</link><pubDate>Fri, 03 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-058/</guid><description>&lt;p&gt;You know &lt;code&gt;is_some_and&lt;/code&gt; — it checks if the Option holds a value matching a predicate. But what about &amp;ldquo;it&amp;rsquo;s fine if it&amp;rsquo;s missing, just validate it when it&amp;rsquo;s there&amp;rdquo;? That&amp;rsquo;s &lt;code&gt;is_none_or&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>57. New Math Constants — GOLDEN_RATIO and EULER_GAMMA in std</title><link>https://www.rustbites.com/posts/bite-057/</link><pubDate>Thu, 02 Apr 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-057/</guid><description>&lt;p&gt;Tired of defining your own golden ratio or Euler-Mascheroni constant? As of Rust 1.94, &lt;code&gt;std&lt;/code&gt; ships them out of the box — no more copy-pasting magic numbers.&lt;/p&gt;</description></item><item><title>56. Iterator::map_while — Take While Transforming</title><link>https://www.rustbites.com/posts/bite-056/</link><pubDate>Thu, 02 Apr 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-056/</guid><description>&lt;p&gt;Need to take elements from an iterator while a condition holds &lt;em&gt;and&lt;/em&gt; transform them at the same time? &lt;code&gt;map_while&lt;/code&gt; does both in one step — no awkward &lt;code&gt;take_while&lt;/code&gt; + &lt;code&gt;map&lt;/code&gt; chains needed.&lt;/p&gt;</description></item><item><title>55. floor_char_boundary — Truncate Strings Without Breaking UTF-8</title><link>https://www.rustbites.com/posts/bite-055/</link><pubDate>Wed, 01 Apr 2026 16:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-055/</guid><description>&lt;p&gt;Ever tried to truncate a string to a byte limit and got a panic because you sliced in the middle of a multi-byte character? &lt;code&gt;floor_char_boundary&lt;/code&gt; fixes that.&lt;/p&gt;</description></item><item><title>54. Cell::update — Modify Interior Values Without the Gymnastics</title><link>https://www.rustbites.com/posts/bite-054/</link><pubDate>Wed, 01 Apr 2026 08:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-054/</guid><description>&lt;p&gt;Tired of writing &lt;code&gt;cell.set(cell.get() + 1)&lt;/code&gt; every time you want to tweak a &lt;code&gt;Cell&lt;/code&gt; value? Rust 1.88 added &lt;code&gt;Cell::update&lt;/code&gt; — one call to read, transform, and write back.&lt;/p&gt;</description></item><item><title>53. element_offset — Find an Element's Index by Reference</title><link>https://www.rustbites.com/posts/bite-053/</link><pubDate>Tue, 31 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-053/</guid><description>&lt;p&gt;Ever had a reference to an element inside a slice but needed its index? Before Rust 1.94, you&amp;rsquo;d reach for &lt;code&gt;.position()&lt;/code&gt; with value equality or resort to pointer math. Now there&amp;rsquo;s a cleaner way.&lt;/p&gt;</description></item><item><title>52. Peekable::next_if_map — Peek, Match, and Transform in One Step</title><link>https://www.rustbites.com/posts/bite-052/</link><pubDate>Tue, 31 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-052/</guid><description>&lt;p&gt;Tired of peeking at the next element, checking if it matches, and &lt;em&gt;then&lt;/em&gt; consuming and transforming it? &lt;code&gt;next_if_map&lt;/code&gt; collapses that entire dance into a single call.&lt;/p&gt;</description></item><item><title>51. File::lock — File Locking in the Standard Library</title><link>https://www.rustbites.com/posts/bite-051/</link><pubDate>Mon, 30 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-051/</guid><description>&lt;p&gt;Multiple processes writing to the same file? That&amp;rsquo;s a recipe for corruption. Since Rust 1.89, &lt;code&gt;File::lock&lt;/code&gt; gives you OS-backed file locking without external crates.&lt;/p&gt;</description></item><item><title>50. slice::chunk_by — Group Consecutive Elements</title><link>https://www.rustbites.com/posts/bite-050/</link><pubDate>Mon, 30 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-050/</guid><description>&lt;p&gt;Need to split a slice into groups of consecutive elements that share a property? &lt;code&gt;chunk_by&lt;/code&gt; does exactly that — no allocations, no manual index tracking.&lt;/p&gt;</description></item><item><title>49. std::io::pipe — Anonymous Pipes in the Standard Library</title><link>https://www.rustbites.com/posts/bite-049/</link><pubDate>Sun, 29 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-049/</guid><description>&lt;p&gt;Need to wire up stdout and stderr from a child process, or stream data between threads? Since Rust 1.87, &lt;code&gt;std::io::pipe()&lt;/code&gt; gives you OS-backed anonymous pipes without reaching for external crates.&lt;/p&gt;</description></item><item><title>48. #[expect] — Lint Suppression That Cleans Up After Itself</title><link>https://www.rustbites.com/posts/bite-048/</link><pubDate>Sun, 29 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-048/</guid><description>&lt;p&gt;Silencing a lint with &lt;code&gt;#[allow]&lt;/code&gt; is easy — but forgetting to remove it when the code changes is even easier. &lt;code&gt;#[expect]&lt;/code&gt; suppresses a lint &lt;em&gt;and&lt;/em&gt; warns you when it&amp;rsquo;s no longer needed.&lt;/p&gt;</description></item><item><title>47. Vec::pop_if — Conditionally Pop the Last Element</title><link>https://www.rustbites.com/posts/bite-047/</link><pubDate>Sat, 28 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-047/</guid><description>&lt;p&gt;Need to remove the last element of a &lt;code&gt;Vec&lt;/code&gt; only when it meets a condition? &lt;code&gt;Vec::pop_if&lt;/code&gt; does exactly that — no index juggling, no separate check-then-pop.&lt;/p&gt;</description></item><item><title>46. Let Chains — Flatten Nested if-let with &amp;&amp;</title><link>https://www.rustbites.com/posts/bite-046/</link><pubDate>Sat, 28 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-046/</guid><description>&lt;p&gt;Deeply nested &lt;code&gt;if let&lt;/code&gt; blocks are one of Rust&amp;rsquo;s most familiar awkward moments. Rust 1.88 (2024 edition) finally fixes it: &lt;strong&gt;let chains&lt;/strong&gt; let you &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;-chain multiple &lt;code&gt;let&lt;/code&gt; bindings and boolean guards in one &lt;code&gt;if&lt;/code&gt; or &lt;code&gt;while&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>45. get_disjoint_mut — Multiple Mutable References at Once</title><link>https://www.rustbites.com/posts/bite-045/</link><pubDate>Fri, 27 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-045/</guid><description>&lt;p&gt;The borrow checker won&amp;rsquo;t let you hold two &lt;code&gt;&amp;amp;mut&lt;/code&gt; refs into the same collection — even when you &lt;em&gt;know&lt;/em&gt; they don&amp;rsquo;t overlap. &lt;code&gt;get_disjoint_mut&lt;/code&gt; fixes that without unsafe.&lt;/p&gt;</description></item><item><title>44. split_once — Split a String Exactly Once</title><link>https://www.rustbites.com/posts/bite-044/</link><pubDate>Fri, 27 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-044/</guid><description>&lt;p&gt;When you need to split a string on the &lt;em&gt;first&lt;/em&gt; occurrence of a delimiter, &lt;code&gt;split_once&lt;/code&gt; is cleaner than anything you&amp;rsquo;d write by hand. Stable since Rust 1.52.&lt;/p&gt;</description></item><item><title>43. Vec::extract_if — Remove Elements and Keep Them</title><link>https://www.rustbites.com/posts/bite-043/</link><pubDate>Wed, 25 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-043/</guid><description>&lt;p&gt;Ever needed to split a &lt;code&gt;Vec&lt;/code&gt; into two groups — the ones you keep and the ones you remove? &lt;code&gt;retain&lt;/code&gt; discards the removed items. Now there&amp;rsquo;s a better way.&lt;/p&gt;</description></item><item><title>42. array::from_fn — Build Arrays from a Function</title><link>https://www.rustbites.com/posts/bite-042/</link><pubDate>Wed, 25 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-042/</guid><description>&lt;p&gt;Need a fixed-size array where each element depends on its index? Skip the &lt;code&gt;vec![..].try_into().unwrap()&lt;/code&gt; dance — &lt;code&gt;std::array::from_fn&lt;/code&gt; builds it in place with zero allocation.&lt;/p&gt;</description></item><item><title>40. Scoped Threads — Borrow Across Threads Without Arc</title><link>https://www.rustbites.com/posts/bite-040/</link><pubDate>Tue, 24 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-040/</guid><description>&lt;p&gt;Need to share stack data with spawned threads? &lt;code&gt;std::thread::scope&lt;/code&gt; lets you borrow local variables across threads — no &lt;code&gt;Arc&lt;/code&gt;, no &lt;code&gt;.clone()&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>41. Async Closures — Pass Async Code Like Any Other Closure</title><link>https://www.rustbites.com/posts/bite-041/</link><pubDate>Tue, 24 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-041/</guid><description>&lt;p&gt;Accepting an async callback used to mean a tangle of &lt;code&gt;Fn(T) -&amp;gt; Fut where Fut: Future&lt;/code&gt;. Rust 1.85 stabilizes async closures — write &lt;code&gt;async |x| { ... }&lt;/code&gt; and accept them with &lt;code&gt;impl async Fn(T) -&amp;gt; U&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>39. Trait Upcasting — Cast dyn Trait to dyn Supertrait</title><link>https://www.rustbites.com/posts/bite-039/</link><pubDate>Mon, 23 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-039/</guid><description>&lt;p&gt;Since Rust 1.86, you can upcast a trait object to its supertrait — no workarounds needed.&lt;/p&gt;</description></item><item><title>38. #[must_use] — Never Ignore What Matters</title><link>https://www.rustbites.com/posts/bite-038/</link><pubDate>Mon, 23 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-038/</guid><description>&lt;p&gt;Rust&amp;rsquo;s &lt;code&gt;#[must_use]&lt;/code&gt; attribute turns silent bugs into compile-time warnings — making sure important return values never get accidentally ignored.&lt;/p&gt;</description></item><item><title>36. Cow&lt;str&gt; — Clone on Write</title><link>https://www.rustbites.com/posts/bite-036/</link><pubDate>Sun, 22 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-036/</guid><description>&lt;p&gt;Stop cloning strings &amp;ldquo;just in case&amp;rdquo; — &lt;code&gt;Cow&amp;lt;str&amp;gt;&lt;/code&gt; lets you borrow when you can and clone only when you must.&lt;/p&gt;</description></item><item><title>37. Option::zip</title><link>https://www.rustbites.com/posts/bite-037/</link><pubDate>Sun, 22 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-037/</guid><description>&lt;p&gt;Need to combine two &lt;code&gt;Option&lt;/code&gt; values into a pair? &lt;code&gt;Option::zip&lt;/code&gt; merges them into a single &lt;code&gt;Option&amp;lt;(A, B)&amp;gt;&lt;/code&gt; — if either is &lt;code&gt;None&lt;/code&gt;, you get &lt;code&gt;None&lt;/code&gt; back.&lt;/p&gt;</description></item><item><title>35. LazyLock</title><link>https://www.rustbites.com/posts/bite-035/</link><pubDate>Sat, 21 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-035/</guid><description>&lt;p&gt;Still pulling in &lt;code&gt;lazy_static&lt;/code&gt; or &lt;code&gt;once_cell&lt;/code&gt; just for a lazy global? &lt;code&gt;std::sync::LazyLock&lt;/code&gt; does the same thing — zero dependencies.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;sync&lt;/span&gt;::&lt;span class="n"&gt;LazyLock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;CONFIG&lt;/span&gt;: &lt;span class="nc"&gt;LazyLock&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LazyLock&lt;/span&gt;::&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Imagine this reads from a file or env
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;verbose&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// CONFIG is initialized on first access
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;flags: &lt;/span&gt;&lt;span class="si"&gt;{:?}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="no"&gt;CONFIG&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;CONFIG&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>33. std::mem::take</title><link>https://www.rustbites.com/posts/bite-033/</link><pubDate>Sat, 21 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-033/</guid><description>&lt;p&gt;Ever tried to move a value out of a &lt;code&gt;&amp;amp;mut&lt;/code&gt; reference? The borrow checker won&amp;rsquo;t let you — but &lt;code&gt;std::mem::take&lt;/code&gt; will. It swaps the value out and leaves &lt;code&gt;Default::default()&lt;/code&gt; in its place.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;mem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ferris&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mem&lt;/span&gt;::&lt;span class="n"&gt;take&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;taken&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ferris&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// left with String::default()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>34. array_windows</title><link>https://www.rustbites.com/posts/bite-034/</link><pubDate>Sat, 21 Mar 2026 09:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-034/</guid><description>&lt;p&gt;Need to look at consecutive pairs (or triples) in a slice? Stop manually indexing — &lt;code&gt;array_windows&lt;/code&gt; gives you fixed-size windows as arrays, not slices.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temps&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;18.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;21.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;19.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;23.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;22.5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Before: manual indexing 😬
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="n"&gt;temps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temps&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temps&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Δ &lt;/span&gt;&lt;span class="si"&gt;{diff:+.1}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// After: array_windows ✨
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;temps&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array_windows&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;diff&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Δ &lt;/span&gt;&lt;span class="si"&gt;{diff:+.1}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>32. iter::successors</title><link>https://www.rustbites.com/posts/bite-032/</link><pubDate>Fri, 20 Mar 2026 10:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-032/</guid><description>&lt;p&gt;Need to generate a sequence where each element depends on the previous one? &lt;code&gt;std::iter::successors&lt;/code&gt; turns any &amp;ldquo;next from previous&amp;rdquo; logic into a lazy iterator.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;iter&lt;/span&gt;::&lt;span class="n"&gt;successors&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Powers of 10 that fit in a u32
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;powers&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;successors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;checked_mul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// [1, 10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000, 100_000_000, 1_000_000_000]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;powers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>31. HashMap's entry API</title><link>https://www.rustbites.com/posts/bite-031/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-031/</guid><description>&lt;p&gt;Want to insert a value into a &lt;code&gt;HashMap&lt;/code&gt; only if the key doesn&amp;rsquo;t exist yet? Skip the double lookup — use the &lt;code&gt;entry&lt;/code&gt; API.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;collections&lt;/span&gt;::&lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;: &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;amp;&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HashMap&lt;/span&gt;::&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Instead of checking .contains_key() then inserting:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;or_insert_with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;::&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;or_insert_with&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;::&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>30. dbg! macro</title><link>https://www.rustbites.com/posts/bite-030/</link><pubDate>Thu, 19 Mar 2026 17:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-030/</guid><description>&lt;p&gt;Still using &lt;code&gt;println!&lt;/code&gt; for quick debugging? Try &lt;code&gt;dbg!&lt;/code&gt; instead — it prints the expression, its value, and the file/line number to stderr. And it returns the value, so you can wrap it around anything.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;dbg!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// prints: [src/main.rs:3] a * 2 = 4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// works with multiple values too
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;dbg!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// prints each as a tuple
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>29. Let chains</title><link>https://www.rustbites.com/posts/bite-029/</link><pubDate>Thu, 19 Mar 2026 10:00:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-029/</guid><description>&lt;p&gt;Tired of deeply nested &lt;code&gt;if let&lt;/code&gt; blocks? Rust 2024 edition brings &lt;strong&gt;let chains&lt;/strong&gt; — chain multiple &lt;code&gt;let&lt;/code&gt; patterns with &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; in a single &lt;code&gt;if&lt;/code&gt; expression.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Before: nested and hard to read
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;opt_a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;opt_b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{a}&lt;/span&gt;&lt;span class="s"&gt; + &lt;/span&gt;&lt;span class="si"&gt;{b}&lt;/span&gt;&lt;span class="s"&gt; = &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;With let chains, flatten the whole thing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;opt_a&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;opt_b&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{a}&lt;/span&gt;&lt;span class="s"&gt; + &lt;/span&gt;&lt;span class="si"&gt;{b}&lt;/span&gt;&lt;span class="s"&gt; = &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>28. Raw string</title><link>https://www.rustbites.com/posts/bite-028/</link><pubDate>Wed, 01 Feb 2023 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-028/</guid><description>&lt;p&gt;Curious to know how you can add a double quote in raw strings?&lt;/p&gt;
&lt;p&gt;No escape sequences are recognized in raw strings, so adding a backslash does not work.&lt;/p&gt;
&lt;p&gt;Use &lt;em&gt;&lt;strong&gt;###&lt;/strong&gt;&lt;/em&gt; to mark the start and the end of a raw string.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;This is a double quote &lt;/span&gt;&lt;span class="se"&gt;\&amp;#34;&lt;/span&gt;&lt;span class="s"&gt; &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// println!(r&amp;#34;This is a double quote &amp;#34; &amp;#34;); // Nope!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// println!(r&amp;#34;This is a double quote \&amp;#34; &amp;#34;); // Nope!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// And this works
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s"&gt;#&amp;#34;This is a double quote &amp;#34; &amp;#34;#&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s"&gt;###&amp;#34;This is a double quote &amp;#34; &amp;#34;###&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Closures</title><link>https://www.rustbites.com/articles/article-002/</link><pubDate>Mon, 02 Jan 2023 11:33:00 +0100</pubDate><guid>https://www.rustbites.com/articles/article-002/</guid><description>&lt;p&gt;Coming soon&amp;hellip;&lt;/p&gt;</description></item><item><title>26. Collecting into Option</title><link>https://www.rustbites.com/posts/bite-026/</link><pubDate>Sun, 01 Jan 2023 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-026/</guid><description>&lt;p&gt;Rust&amp;rsquo;s option implements &lt;strong&gt;FromIterator&lt;/strong&gt; too!&lt;/p&gt;
&lt;p&gt;Use it when you want to get &lt;strong&gt;None&lt;/strong&gt; if there is a None element and values otherwise.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Porsche&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ferrari&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maybe_cars&lt;/span&gt;: &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maybe_cars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;or values &amp;hellip;&lt;/p&gt;</description></item><item><title>27. Option's sum/product</title><link>https://www.rustbites.com/posts/bite-027/</link><pubDate>Sun, 01 Jan 2023 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-027/</guid><description>&lt;p&gt;Rust&amp;rsquo;s option implements &lt;strong&gt;Sum&lt;/strong&gt; and &lt;strong&gt;Product&lt;/strong&gt; traits too!&lt;/p&gt;
&lt;p&gt;Use it when you want to get &lt;strong&gt;None&lt;/strong&gt; if there is a None element and sum of values otherwise.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;: &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;maybe_nums&lt;/span&gt;: &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;maybe_nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;or sum of the values &amp;hellip;&lt;/p&gt;</description></item><item><title>Implementing custom iterators</title><link>https://www.rustbites.com/articles/article-001/</link><pubDate>Sun, 01 Jan 2023 11:33:00 +0100</pubDate><guid>https://www.rustbites.com/articles/article-001/</guid><description>&lt;p&gt;Iterators are a powerful feature in Rust that allow you to define how a collection of items should be processed. They are flexible, efficient, and easy to use. In this blog post, we will look at how to create custom iterators in Rust.&lt;/p&gt;</description></item><item><title>24. ..=X</title><link>https://www.rustbites.com/posts/bite-024/</link><pubDate>Sat, 24 Dec 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-024/</guid><description>&lt;p&gt;As of 1.66, it is possible to use &lt;strong&gt;..=X&lt;/strong&gt; in patterns&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..=&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Included&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;21&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Sorry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>25. Option's iterator</title><link>https://www.rustbites.com/posts/bite-025/</link><pubDate>Sat, 24 Dec 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-025/</guid><description>&lt;p&gt;Rust&amp;rsquo;s option implements an iterator!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;: &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Why is this useful? see example.&lt;/p&gt;</description></item><item><title>23. Enum's default value</title><link>https://www.rustbites.com/posts/bite-023/</link><pubDate>Tue, 06 Dec 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-023/</guid><description>&lt;p&gt;Instead of manually implementing &lt;strong&gt;Default&lt;/strong&gt; trait for an enum, you can derive it and explicitly tell which
variant should be the default one.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[derive(Default)]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;#[default]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Porsche&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ferrari&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Skoda&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Car&lt;/span&gt;::&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>22. Enum's Debug</title><link>https://www.rustbites.com/posts/bite-022/</link><pubDate>Fri, 11 Nov 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-022/</guid><description>&lt;p&gt;Use Debug trait to print enum values if needed.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[derive(Default,Debug)]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Car&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;#[default]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Porsche&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Ferrari&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Skoda&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Car&lt;/span&gt;::&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{:?}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>21. Zip longest</title><link>https://www.rustbites.com/posts/bite-021/</link><pubDate>Sat, 22 Oct 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-021/</guid><description>&lt;p&gt;Sometimes there is a need to zip two iterables of various lengths.&lt;/p&gt;
&lt;p&gt;If it is known which one is longer, then use the following approach:&lt;/p&gt;
&lt;p&gt;First one must be longer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;n2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;iter&lt;/span&gt;::&lt;span class="n"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="k"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{n1}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{n2}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Output:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 1 - 10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 2 - 20
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 3 - 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 4 - 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>20. let-else statements</title><link>https://www.rustbites.com/posts/bite-020/</link><pubDate>Sun, 11 Sep 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-020/</guid><description>&lt;p&gt;As of 1.65, it is possible to use let statement with a refutable pattern.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;: &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;panic!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Heeeelp!!!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>19. breaking from labeled blocks</title><link>https://www.rustbites.com/posts/bite-019/</link><pubDate>Thu, 18 Aug 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-019/</guid><description>&lt;p&gt;As of 1.65, it is possible to label plain block expression and terminate that block early.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;&amp;#39;block&lt;/span&gt;: &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="k"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;#39;block&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;#39;block&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>18. flatten options</title><link>https://www.rustbites.com/posts/bite-018/</link><pubDate>Wed, 13 Jul 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-018/</guid><description>&lt;p&gt;Use flatten to iterate over only Some values if you have a collection of Options.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>16. Option/Result match?!</title><link>https://www.rustbites.com/posts/bite-016/</link><pubDate>Fri, 10 Jun 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-016/</guid><description>&lt;p&gt;Try to avoid matching Option or Result.&lt;/p&gt;
&lt;p&gt;Use if let instead.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Not nice
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{x}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Better
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{x}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>14. Find index of item</title><link>https://www.rustbites.com/posts/bite-014/</link><pubDate>Wed, 20 Apr 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-014/</guid><description>&lt;p&gt;Use position to find position of an element in iterator. Returns None if the element does not exist.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;None&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>15. Scan</title><link>https://www.rustbites.com/posts/bite-015/</link><pubDate>Wed, 20 Apr 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-015/</guid><description>&lt;p&gt;Iterator adapter similar to fold (see previous bite) - holds some internal state and produces new iterator.&lt;/p&gt;
&lt;p&gt;Note that Option is yielded from the closure.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>12. Enumerate</title><link>https://www.rustbites.com/posts/bite-012/</link><pubDate>Sun, 20 Mar 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-012/</guid><description>&lt;p&gt;Use enumerate to convert iterator over (usize,item) pairs.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Skoda&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ferrari&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ford&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{idx}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{car}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Output
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 0 - Skoda
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 1 - Ferrari
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 2 - Ford
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Useful when index of item is needed.&lt;/p&gt;</description></item><item><title>13. Fold</title><link>https://www.rustbites.com/posts/bite-013/</link><pubDate>Sun, 20 Mar 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-013/</guid><description>&lt;p&gt;Iterator consumer. Allows the accumulated value to be arbitrary type. Note the different types.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u8&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;fold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;acc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>17. filter_map</title><link>https://www.rustbites.com/posts/bite-017/</link><pubDate>Sun, 20 Mar 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-017/</guid><description>&lt;p&gt;Similar to map but if allows to drop an item.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;text_nums&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;two&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;three&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;text_nums&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter_map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;::&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>11. Fuse</title><link>https://www.rustbites.com/posts/bite-011/</link><pubDate>Sat, 19 Mar 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-011/</guid><description>&lt;p&gt;Fuse is an iterator that yields None forever after the underlying iterator yields None once.
USage:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;fuse&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Why is it useful? see example in this bite.&lt;/p&gt;</description></item><item><title>10. cloned vs copied</title><link>https://www.rustbites.com/posts/bite-010/</link><pubDate>Fri, 25 Feb 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-010/</guid><description>&lt;p&gt;Rust provides built-in methods to copy or clone elements when using an iterator.&lt;/p&gt;
&lt;p&gt;Eg.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nums1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;nums2&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;copied&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;What&amp;rsquo;s the difference? and when is it useful?&lt;/p&gt;</description></item><item><title>9. Inspecting iterator</title><link>https://www.rustbites.com/posts/bite-009/</link><pubDate>Tue, 15 Feb 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-009/</guid><description>&lt;p&gt;Ever wondered how to print while iterating?&lt;/p&gt;
&lt;p&gt;Use &lt;strong&gt;inspect&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Skoda&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ferrari&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ford&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car_lenghts&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;inspect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{idx}&lt;/span&gt;&lt;span class="s"&gt; - &lt;/span&gt;&lt;span class="si"&gt;{s}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car_lenghts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>8. Drain</title><link>https://www.rustbites.com/posts/bite-008/</link><pubDate>Thu, 10 Feb 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-008/</guid><description>&lt;p&gt;Use &lt;strong&gt;drain&lt;/strong&gt; to remove specified range from a vector.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>7. iter() vs into_iter()</title><link>https://www.rustbites.com/posts/bite-007/</link><pubDate>Sat, 05 Feb 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-007/</guid><description>&lt;p&gt;What is the difference between .&lt;strong&gt;iter()&lt;/strong&gt; and &lt;strong&gt;.into_iter()&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iter&lt;/strong&gt; yields &lt;strong&gt;&amp;amp;T&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;into_iter&lt;/strong&gt; may yield any of &lt;strong&gt;T&lt;/strong&gt;, &lt;strong&gt;&amp;amp;T&lt;/strong&gt; or &lt;strong&gt;&amp;amp;mut T&lt;/strong&gt; based on context.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Skoda&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ferrari&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Ford&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{car}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;car&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cars&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;into_iter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{car}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;this works but &amp;hellip;&lt;/p&gt;</description></item><item><title>6. non-exhaustive enums</title><link>https://www.rustbites.com/posts/bite-006/</link><pubDate>Sun, 30 Jan 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-006/</guid><description>&lt;p&gt;Use &lt;strong&gt;non-exhaustive&lt;/strong&gt; attribute to indicate that enum may have more variants in future.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[non_exhaustive]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Completed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>5. Loop breaks and labels</title><link>https://www.rustbites.com/posts/bite-005/</link><pubDate>Tue, 25 Jan 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-005/</guid><description>&lt;p&gt;Breaks and labels in loops?&lt;/p&gt;
&lt;p&gt;IT is possible to use a label to specify which enclosing loop is affected.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;&amp;#39;outer&lt;/span&gt;: &lt;span class="nc"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;&amp;#39;outer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>4. Option -&gt; Result</title><link>https://www.rustbites.com/posts/bite-004/</link><pubDate>Thu, 20 Jan 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-004/</guid><description>&lt;p&gt;Convert &lt;strong&gt;Option&lt;/strong&gt; to &lt;strong&gt;Result&lt;/strong&gt; easily.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;: &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;: &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,()&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ok_or&lt;/span&gt;&lt;span class="p"&gt;(());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>3. Result -&gt; Option</title><link>https://www.rustbites.com/posts/bite-003/</link><pubDate>Sat, 15 Jan 2022 12:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-003/</guid><description>&lt;p&gt;Convert &lt;strong&gt;Result&lt;/strong&gt; to &lt;strong&gt;Option&lt;/strong&gt; easily.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;: &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;,()&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;: &lt;span class="nb"&gt;Option&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;u32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="k"&gt;u32&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>2. mysterious @</title><link>https://www.rustbites.com/posts/bite-002/</link><pubDate>Mon, 10 Jan 2022 16:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-002/</guid><description>&lt;p&gt;Use &lt;code&gt;@&lt;/code&gt; to bind a pattern to a name.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;assert_eq!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;panic!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;-too many!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>1. matches!</title><link>https://www.rustbites.com/posts/bite-001/</link><pubDate>Wed, 05 Jan 2022 16:13:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-001/</guid><description>&lt;p&gt;Need to check if an expression matches certain pattern?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;assert!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="fm"&gt;matches!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>0. Hello, rustbites!</title><link>https://www.rustbites.com/posts/bite-000/</link><pubDate>Sat, 01 Jan 2022 11:33:00 +0100</pubDate><guid>https://www.rustbites.com/posts/bite-000/</guid><description>&lt;p&gt;Hello and welcome to &lt;em&gt;rustbites.com&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, rustbites!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>About</title><link>https://www.rustbites.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rustbites.com/about/</guid><description>&lt;p&gt;Welcome to &lt;strong&gt;rustbites.com!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;rustbites is a collection of notes of one curious developer on his journey to learn Rust.&lt;/p&gt;
&lt;p&gt;The goal is to provide valuable and informative content that will help Rust developers of all skill levels improve their skills and stay up-to-date with the language.&lt;/p&gt;</description></item><item><title>Archives</title><link>https://www.rustbites.com/archives/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rustbites.com/archives/</guid><description>archives</description></item><item><title>Search</title><link>https://www.rustbites.com/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rustbites.com/search/</guid><description>search</description></item></channel></rss>