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}