Skip to main content

cabin_lockfile/
error.rs

1use std::io;
2use std::path::PathBuf;
3
4use thiserror::Error;
5
6/// Errors produced while reading, parsing, or writing a `cabin.lock`.
7#[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    /// A `[[patch]]` entry's `kind` field carried an unsupported
47    /// value. Mirrors the closed [`crate::model::LockedPatchKind`]
48    /// enum.
49    #[error(
50        "unknown cabin.lock patch kind {value:?} for package {package:?}; supported kinds are: path"
51    )]
52    UnknownPatchKind { package: String, value: String },
53
54    /// A `[[source-replacement]]` entry's `original-kind` /
55    /// `replacement-kind` field carried an unsupported value.
56    #[error(
57        "unknown cabin.lock source locator kind {value:?}; supported kinds are: index-path, index-url"
58    )]
59    UnknownSourceLocatorKind { value: String },
60}