anyhow_std/fs/
metadata.rs

1use anyhow::Context;
2use std::ops::Deref;
3use std::path::PathBuf;
4use std::time::SystemTime;
5
6/// Wraps [std::fs::Metadata] to provide the path as error context
7#[derive(Debug, derive_more::From, derive_more::Into)]
8pub struct Metadata {
9    md: std::fs::Metadata,
10    path: PathBuf,
11}
12
13impl Metadata {
14    /// Extend [std::fs::Metadata::modified] to provide the path as error context
15    pub fn modified(&self) -> anyhow::Result<SystemTime> {
16        self.md
17            .modified()
18            .with_context(|| format!("while processing path {:?}", self.path.display()))
19    }
20
21    /// Extend [std::fs::Metadata::accessed] to provide the path as error context
22    pub fn accessed(&self) -> anyhow::Result<SystemTime> {
23        self.md
24            .accessed()
25            .with_context(|| format!("while processing path {:?}", self.path.display()))
26    }
27
28    /// Extend [std::fs::Metadata::created] to provide the path as error context
29    pub fn created(&self) -> anyhow::Result<SystemTime> {
30        self.md
31            .created()
32            .with_context(|| format!("while processing path {:?}", self.path.display()))
33    }
34}
35
36impl Deref for Metadata {
37    type Target = std::fs::Metadata;
38
39    fn deref(&self) -> &Self::Target {
40        &self.md
41    }
42}