1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
/************************************************************************************************** * * * This Source Code Form is subject to the terms of the Mozilla Public * * License, v. 2.0. If a copy of the MPL was not distributed with this * * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * * **************************************************************************************************/ // ======================================== Configuration ======================================= \\ #![no_std] // ======================================== Documentation ======================================= \\ //! Deprecated in favor of [`futures-micro`](https://github.com/irrustible/futures-micro) and //! [`futures-lite`](https://github.com/stjepang/futures-lite). // =========================================== Imports ========================================== \\ use core::future::Future; use core::pin::Pin; use core::task::{Context, Poll}; use pin_project_lite::pin_project; // ============================================ Types =========================================== \\ pin_project! { #[derive(Debug)] #[deprecated(since = "1.2.0", note = "please use `futures-micro` or `futures-lite` instead")] /// Deprecated in favor of [`futures-micro`](https://github.com/irrustible/futures-micro) and /// [`futures-lite`](https://github.com/stjepang/futures-lite). pub struct Race<Left, Right> where Left: Future, Right: Future<Output = Left::Output>, { #[pin] left: Left, #[pin] right: Right, } } // ========================================= Interfaces ========================================= \\ #[deprecated(since = "1.2.0", note = "please use `futures-micro` or `futures-lite` instead")] /// Deprecated in favor of [`futures-micro`](https://github.com/irrustible/futures-micro) and /// [`futures-lite`](https://github.com/stjepang/futures-lite). pub trait RaceExt: Future { #[deprecated(since = "1.2.0", note = "please use `futures-micro` or `futures-lite` instead")] /// Deprecated in favor of [`futures-micro`](https://github.com/irrustible/futures-micro) and /// [`futures-lite`](https://github.com/stjepang/futures-lite). fn race<With>(self, with: With) -> Race<Self, With> where Self: Sized, With: Future<Output = Self::Output>, { Race { left: self, right: with, } } } impl<Fut: Future> RaceExt for Fut {} // ========================================= impl Future ======================================== \\ impl<Left, Right> Future for Race<Left, Right> where Left: Future, Right: Future<Output = Left::Output>, { type Output = Left::Output; fn poll(self: Pin<&mut Self>, ctx: &mut Context) -> Poll<Self::Output> { let this = self.project(); if let poll @ Poll::Ready(_) = this.left.poll(ctx) { return poll; } if let poll @ Poll::Ready(_) = this.right.poll(ctx) { return poll; } Poll::Pending } }