1use std::io;
2use std::path::PathBuf;
3
4use thiserror::Error;
5
6#[derive(Debug, Error)]
8pub enum LockfileError {
9 #[error("failed to read {path}: {source}", path = path.display())]
10 Io {
11 path: PathBuf,
12 #[source]
13 source: io::Error,
14 },
15
16 #[error("failed to parse cabin.lock: {0}")]
17 Toml(#[from] toml::de::Error),
18
19 #[error("failed to serialize cabin.lock: {0}")]
20 TomlSer(#[from] std::fmt::Error),
21
22 #[error("unsupported cabin.lock version {version}; expected {expected}")]
23 UnsupportedVersion { version: u32, expected: u32 },
24
25 #[error("duplicate package entry in cabin.lock: {name:?}")]
26 DuplicatePackage { name: String },
27
28 #[error(
29 "invalid cabin.lock package {name:?}: version {value:?} is not valid SemVer ({source})"
30 )]
31 InvalidVersion {
32 name: String,
33 value: String,
34 #[source]
35 source: semver::Error,
36 },
37
38 #[error("invalid cabin.lock package name {name:?}: {message}")]
39 InvalidPackageName { name: String, message: String },
40
41 #[error(
42 "unknown source {value:?} for cabin.lock package {name:?}; only \"index\" is supported"
43 )]
44 UnknownSource { name: String, value: String },
45
46 #[error(
50 "unknown cabin.lock patch kind {value:?} for package {package:?}; supported kinds are: path"
51 )]
52 UnknownPatchKind { package: String, value: String },
53
54 #[error(
57 "unknown cabin.lock source locator kind {value:?}; supported kinds are: index-path, index-url"
58 )]
59 UnknownSourceLocatorKind { value: String },
60}