Welcome to mirror list, hosted at ThFree Co, Russian Federation.

err.rs « src - github.com/windirstat/mft.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 78076fbd6091d3a0f538acb4accc0a3f92f749b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use snafu::{Backtrace, Snafu};
use std::path::PathBuf;
use std::{io, result};

pub type Result<T> = result::Result<T, Error>;

#[derive(Debug, Snafu)]
#[snafu(visibility(pub(crate)))]
pub enum Error {
    #[snafu(display("An I/O error has occurred: {}", source))]
    IoError {
        source: std::io::Error,
        backtrace: Backtrace,
    },
    #[snafu(display("Failed to open file {}: {}", path.display(), source))]
    FailedToOpenFile {
        path: PathBuf,
        source: std::io::Error,
    },
    #[snafu(display("Error while decoding name in filename attribute"))]
    InvalidFilename,
    #[snafu(display(
        "Bad signature: {:x?}, expected one of [b\"FILE\", b\"BAAD\", b\"0000\"]",
        bad_sig
    ))]
    InvalidEntrySignature { bad_sig: Vec<u8> },
    #[snafu(display("Unknown `AttributeType`: {:04X}", attribute_type))]
    UnknownAttributeType { attribute_type: u32 },
    #[snafu(display("Unknown filename namespace {}", namespace))]
    UnknownNamespace { namespace: u8 },
    #[snafu(display("Unhandled resident flag: {} (offset: {})", flag, offset))]
    UnhandledResidentFlag { flag: u8, offset: u64 },
    #[snafu(display(
        "Fixup bytes do not match bytes at end of stride {} {:x?}: {:x?}",
        stride_number,
        end_of_sector_bytes,
        fixup_bytes
    ))]
    FailedToApplyFixup {
        stride_number: usize,
        end_of_sector_bytes: Vec<u8>,
        fixup_bytes: Vec<u8>,
    },
    #[snafu(display("Failed to read MftReference: `{}`", source))]
    FailedToReadMftReference { source: winstructs::err::Error },
    #[snafu(display("Failed to read WindowsTime: `{}`", source))]
    FailedToReadWindowsTime { source: winstructs::err::Error },
    #[snafu(display("Failed to read GUID: `{}`", source))]
    FailedToReadGuid { source: winstructs::err::Error },
    #[snafu(display("An unexpected error has occurred: {}", detail))]
    Any { detail: String },
}

impl From<io::Error> for Error {
    fn from(err: io::Error) -> Self {
        Error::IoError {
            source: err,
            backtrace: Backtrace::new(),
        }
    }
}