qubit-fs 0.2.2

Provider-neutral synchronous and asynchronous filesystem abstraction for Rust
Documentation
// =============================================================================
//    Copyright (c) 2026 Haixing Hu.
//
//    SPDX-License-Identifier: Apache-2.0
//
//    Licensed under the Apache License, Version 2.0.
// =============================================================================
// facade.
//! Provider metadata response.

use crate::metadata::FileMetadata;
use crate::path::Path;

/// Provider metadata response bound to the path it describes.
///
/// # Examples
///
/// ```rust
/// use qubit_fs::metadata::{FileKind, FileMetadata};
/// use qubit_fs::path::Path;
/// use qubit_fs::spi::StatResponse;
///
/// let response = StatResponse::new(
///     Path::parse("/object")?,
///     FileMetadata::new(FileKind::File),
/// );
/// assert_eq!("/object", response.path().as_str());
/// # Ok::<(), qubit_fs::FsError>(())
/// ```
pub struct StatResponse {
    /// Logical path described by the response.
    path: Path,
    /// Provider metadata snapshot for `path`.
    metadata: FileMetadata,
}

impl StatResponse {
    /// Creates a response for `path` after provider metadata lookup.
    ///
    /// # Parameters
    /// - `path`: Logical path described by the metadata.
    /// - `metadata`: Provider metadata snapshot.
    ///
    /// # Returns
    /// A path-bound metadata response.
    #[inline]
    #[must_use]
    pub fn new(path: Path, metadata: FileMetadata) -> Self {
        Self { path, metadata }
    }

    /// Returns the logical path represented by the metadata.
    ///
    /// # Returns
    /// The response path.
    #[inline]
    #[must_use]
    pub const fn path(&self) -> &Path {
        &self.path
    }

    /// Returns the metadata snapshot.
    ///
    /// # Returns
    /// The provider metadata snapshot.
    #[inline]
    #[must_use]
    pub const fn metadata(&self) -> &FileMetadata {
        &self.metadata
    }

    /// Returns the metadata to the validating facade.
    ///
    /// # Returns
    /// The owned provider metadata snapshot.
    #[inline]
    #[must_use]
    pub(crate) fn into_metadata(self) -> FileMetadata {
        self.metadata
    }
}