Skip to main content

changeset_project/
error.rs

1use std::path::PathBuf;
2
3use thiserror::Error;
4
5#[derive(Debug, Error)]
6pub enum ProjectError {
7    #[error("IO error")]
8    Io(#[from] std::io::Error),
9
10    #[error("TOML parse error")]
11    TomlParse(#[from] toml::de::Error),
12
13    #[error("no Cargo.toml found traversing from '{start_dir}'")]
14    NotFound { start_dir: PathBuf },
15
16    #[error("failed to read manifest at '{path}'")]
17    ManifestRead {
18        path: PathBuf,
19        #[source]
20        source: std::io::Error,
21    },
22
23    #[error("failed to parse manifest at '{path}'")]
24    ManifestParse {
25        path: PathBuf,
26        #[source]
27        source: toml::de::Error,
28    },
29
30    #[error("manifest at '{path}' missing required field '{field}'")]
31    MissingField { path: PathBuf, field: &'static str },
32
33    #[error("invalid version '{version}' in package at '{path}'")]
34    InvalidVersion {
35        path: PathBuf,
36        version: String,
37        #[source]
38        source: semver::Error,
39    },
40
41    #[error("invalid glob pattern '{pattern}'")]
42    GlobPattern {
43        pattern: String,
44        #[source]
45        source: globset::Error,
46    },
47
48    #[error("failed to parse glob pattern '{pattern}'")]
49    GlobPatternParse {
50        pattern: String,
51        #[source]
52        source: glob::PatternError,
53    },
54
55    #[error("glob traversal error")]
56    GlobTraversal(#[from] glob::GlobError),
57
58    #[error("path contains invalid UTF-8: '{path}'")]
59    NonUtf8Path { path: PathBuf },
60
61    #[error("failed to create directory '{path}'")]
62    DirectoryCreate {
63        path: PathBuf,
64        #[source]
65        source: std::io::Error,
66    },
67}