atagen

matrix-rust-sdk

public
Star0
Watch0
ssh://brewery@pls.lobotomise.me:33/atagen/matrix-rust-sdk.git

Blame: crates/matrix-sdk-common/src/stream.rs

7ff8adafe9e4atagen2026-10-22 12:30 UTC1
// Copyright 2025 The Matrix.org Foundation C.I.C.
7ff8adafe9e4atagen2026-10-22 12:30 UTC2
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC3
// Licensed under the Apache License, Version 2.0 (the "License");
7ff8adafe9e4atagen2026-10-22 12:30 UTC4
// you may not use this file except in compliance with the License.
7ff8adafe9e4atagen2026-10-22 12:30 UTC5
// You may obtain a copy of the License at
7ff8adafe9e4atagen2026-10-22 12:30 UTC6
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC7
//     http://www.apache.org/licenses/LICENSE-2.0
7ff8adafe9e4atagen2026-10-22 12:30 UTC8
//
7ff8adafe9e4atagen2026-10-22 12:30 UTC9
// Unless required by applicable law or agreed to in writing, software
7ff8adafe9e4atagen2026-10-22 12:30 UTC10
// distributed under the License is distributed on an "AS IS" BASIS,
7ff8adafe9e4atagen2026-10-22 12:30 UTC11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7ff8adafe9e4atagen2026-10-22 12:30 UTC12
// See the License for the specific language governing permissions and
7ff8adafe9e4atagen2026-10-22 12:30 UTC13
// limitations under the License.
7ff8adafe9e4atagen2026-10-22 12:30 UTC14
7ff8adafe9e4atagen2026-10-22 12:30 UTC15
//! Platform-specific stream utilities.
7ff8adafe9e4atagen2026-10-22 12:30 UTC16
//!
7ff8adafe9e4atagen2026-10-22 12:30 UTC17
//! This module provides a unified `BoxStream` + `StreamExt` class for working
7ff8adafe9e4atagen2026-10-22 12:30 UTC18
//! with boxed streams across different platforms. On native platforms,
7ff8adafe9e4atagen2026-10-22 12:30 UTC19
//! streams can be `Send`, but on Wasm they cannot. This module abstracts
7ff8adafe9e4atagen2026-10-22 12:30 UTC20
//! over that difference.
7ff8adafe9e4atagen2026-10-22 12:30 UTC21
7ff8adafe9e4atagen2026-10-22 12:30 UTC22
#[cfg(not(target_family = "wasm"))]
7ff8adafe9e4atagen2026-10-22 12:30 UTC23
mod sys {
7ff8adafe9e4atagen2026-10-22 12:30 UTC24
    // On native platforms, just re-export everything from futures_util
7ff8adafe9e4atagen2026-10-22 12:30 UTC25
    pub use futures_util::{StreamExt, stream::BoxStream};
7ff8adafe9e4atagen2026-10-22 12:30 UTC26
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC27
7ff8adafe9e4atagen2026-10-22 12:30 UTC28
#[cfg(target_family = "wasm")]
7ff8adafe9e4atagen2026-10-22 12:30 UTC29
mod sys {
7ff8adafe9e4atagen2026-10-22 12:30 UTC30
    use futures_core::Stream;
7ff8adafe9e4atagen2026-10-22 12:30 UTC31
    // On Wasm, BoxStream is LocalBoxStream
7ff8adafe9e4atagen2026-10-22 12:30 UTC32
    pub use futures_util::stream::LocalBoxStream as BoxStream;
7ff8adafe9e4atagen2026-10-22 12:30 UTC33
7ff8adafe9e4atagen2026-10-22 12:30 UTC34
    /// Custom `StreamExt` trait for Wasm that provides essential methods
7ff8adafe9e4atagen2026-10-22 12:30 UTC35
    /// like `.boxed()` and `.next()` without `Send` requirements.
7ff8adafe9e4atagen2026-10-22 12:30 UTC36
    pub trait StreamExt: Stream {
7ff8adafe9e4atagen2026-10-22 12:30 UTC37
        /// Box this stream using `LocalBoxStream` (no `Send` requirement).
7ff8adafe9e4atagen2026-10-22 12:30 UTC38
        fn boxed<'a>(self) -> BoxStream<'a, Self::Item>
7ff8adafe9e4atagen2026-10-22 12:30 UTC39
        where
7ff8adafe9e4atagen2026-10-22 12:30 UTC40
            Self: Sized + 'a,
7ff8adafe9e4atagen2026-10-22 12:30 UTC41
        {
7ff8adafe9e4atagen2026-10-22 12:30 UTC42
            futures_util::StreamExt::boxed_local(self)
7ff8adafe9e4atagen2026-10-22 12:30 UTC43
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC44
7ff8adafe9e4atagen2026-10-22 12:30 UTC45
        /// Get the next item from this stream.
7ff8adafe9e4atagen2026-10-22 12:30 UTC46
        fn next(&mut self) -> futures_util::stream::Next<'_, Self>
7ff8adafe9e4atagen2026-10-22 12:30 UTC47
        where
7ff8adafe9e4atagen2026-10-22 12:30 UTC48
            Self: Unpin,
7ff8adafe9e4atagen2026-10-22 12:30 UTC49
        {
7ff8adafe9e4atagen2026-10-22 12:30 UTC50
            futures_util::StreamExt::next(self)
7ff8adafe9e4atagen2026-10-22 12:30 UTC51
        }
7ff8adafe9e4atagen2026-10-22 12:30 UTC52
    }
7ff8adafe9e4atagen2026-10-22 12:30 UTC53
7ff8adafe9e4atagen2026-10-22 12:30 UTC54
    impl<S: Stream> StreamExt for S {}
7ff8adafe9e4atagen2026-10-22 12:30 UTC55
}
7ff8adafe9e4atagen2026-10-22 12:30 UTC56
7ff8adafe9e4atagen2026-10-22 12:30 UTC57
pub use sys::*;