Skip to main content

qubit_fs/spi/
opened_directory_stream.rs

1// =============================================================================
2//    Copyright (c) 2026 Haixing Hu.
3//
4//    SPDX-License-Identifier: Apache-2.0
5//
6//    Licensed under the Apache License, Version 2.0.
7// =============================================================================
8// facade.
9//! Provider-opened synchronous directory stream envelope.
10
11use super::DirectoryStreamSpi;
12
13/// An already-open provider directory stream.
14///
15/// # Examples
16///
17/// ```rust
18/// use qubit_fs::error::FsResult;
19/// use qubit_fs::metadata::DirEntry;
20/// use qubit_fs::spi::{DirectoryStreamSpi, OpenedDirectoryStream};
21///
22/// struct EmptyStream;
23/// impl DirectoryStreamSpi for EmptyStream {
24///     fn next_entry(&mut self) -> FsResult<Option<DirEntry>> {
25///         Ok(None)
26///     }
27/// }
28/// let _stream = OpenedDirectoryStream::new(Box::new(EmptyStream));
29/// ```
30pub struct OpenedDirectoryStream {
31    /// Provider enumeration session awaiting facade validation.
32    stream: Box<dyn DirectoryStreamSpi>,
33}
34
35impl OpenedDirectoryStream {
36    /// Wraps a directory stream which the provider has fully opened.
37    ///
38    /// # Parameters
39    /// - `stream`: Provider enumeration session.
40    ///
41    /// # Returns
42    /// An opened-directory-stream envelope for the facade.
43    #[inline]
44    #[must_use]
45    pub fn new(stream: Box<dyn DirectoryStreamSpi>) -> Self {
46        Self { stream }
47    }
48
49    /// Returns the opened stream to the facade.
50    ///
51    /// # Returns
52    /// The provider enumeration session.
53    #[inline]
54    #[must_use]
55    pub(crate) fn into_stream(self) -> Box<dyn DirectoryStreamSpi> {
56        self.stream
57    }
58}