1use thiserror::Error;
2
3use crate::config::InvalidFeatureEntryKind;
4use crate::model::DependencyKind;
5
6#[derive(Debug, Error, PartialEq, Eq)]
11pub enum ValidationError {
12 #[error("package name must not be empty")]
13 EmptyPackageName,
14
15 #[error("package name must not contain whitespace: {0:?}")]
16 PackageNameContainsWhitespace(String),
17
18 #[error(
19 "package name {0:?} is not valid; package names must consist only of ASCII letters, ASCII digits, `_`, `-`, and `.`, must be non-empty, must not start with `.` or `-`, and must not be `.` or `..`"
20 )]
21 UnsafePackageName(String),
22
23 #[error("target name must not be empty")]
24 EmptyTargetName,
25
26 #[error("target name must not contain whitespace: {0:?}")]
27 TargetNameContainsWhitespace(String),
28
29 #[error(
30 "target name {0:?} is not valid; target names must consist only of ASCII letters, ASCII digits, `_`, `-`, and `.`, must be non-empty, must not start with `.` or `-`, and must not be `.` or `..`"
31 )]
32 UnsafeTargetName(String),
33
34 #[error("duplicate target name: {0:?}")]
35 DuplicateTargetName(String),
36
37 #[error("duplicate dependency {name:?} in {section}", section = kind.manifest_section())]
38 DuplicateDependency { name: String, kind: DependencyKind },
39
40 #[error("duplicate system dependency: {0:?}")]
41 DuplicateSystemDependency(String),
42
43 #[error("{0} name must not be empty")]
45 EmptyConfigName(&'static str),
46
47 #[error("invalid {kind} name {value:?}")]
48 InvalidConfigName { kind: &'static str, value: String },
49
50 #[error("the feature name {0:?} is reserved")]
51 ReservedFeatureName(String),
52
53 #[error("feature {referrer:?} references unknown feature {referenced:?}")]
54 UnknownFeatureReference {
55 referrer: String,
56 referenced: String,
57 },
58
59 #[error("feature definitions contain a cycle: {}", .0.join(" -> "))]
60 FeatureCycle(Vec<String>),
61
62 #[error(
63 "invalid entry {entry:?} in feature {referrer:?}: {}",
64 reason.message()
65 )]
66 InvalidFeatureEntry {
67 referrer: String,
68 entry: String,
69 reason: InvalidFeatureEntryKind,
70 },
71
72 #[error("unknown feature {feature:?} for package {package:?}")]
73 UnknownFeature { package: String, feature: String },
74}