simics_package/error/
mod.rs1use cargo_metadata::Target;
7use serde_json::Value;
8use std::path::PathBuf;
9
10#[derive(Debug, thiserror::Error)]
11pub enum Error {
13 #[error("No package {name} found in metadata")]
14 PackageNotFound {
16 name: String,
18 },
19 #[error("Invalid value build ID namespace {value:?} in 'package.metadata.simics.build-id-namespace = \"\"' field. Expected string.")]
20 InvalidBuildIdNamespace {
22 value: Value,
24 },
25 #[error("No package-number field found in metadata for {manifest}. Missing 'package.metadata.simics.package-number = 99999' to Cargo.toml?")]
26 PackageNumberNotFound {
28 manifest: PathBuf,
30 },
31 #[error("Invalid package number {value} in 'package.metadata.simics.package-number = 99999' field. Expected integer.")]
32 InvalidPackageNumber {
34 value: Value,
36 },
37 #[error("Invalid confidentiality {value:?} in 'package.metadata.simics.confidentiality = \"\"' field. Expected string.")]
38 InvalidConfidentiality {
40 value: Value,
42 },
43 #[error("Invalid access label {value:?} in 'package.metadata.simics.access-labels = [\"\", \"\"]' field. Expected string.")]
44 InvalidAccessLabel {
46 value: Value,
48 },
49 #[error("No cdylib target in {targets:?}")]
50 CdylibTargetNotFound {
52 targets: Vec<Target>,
54 },
55 #[error("No parent found for path {path:?}")]
56 ParentNotFound {
58 path: PathBuf,
60 },
61 #[error("No cdylib artifact found for {package:?}. Ensure the build succeeded and there is a [lib] entry in Cargo.toml with 'crate-type = [\"cdylib\"]'.")]
62 CdylibArtifactNotFound {
64 package: String,
66 },
67 #[error("Failed to convert path {path:?} to string")]
68 PathConversionError {
70 path: PathBuf,
72 },
73 #[error("{path:?} is not a directory")]
74 NotADirectory {
76 path: PathBuf,
78 },
79 #[error("Filename for {path:?} not found")]
80 FilenameNotFound {
82 path: PathBuf,
84 },
85 #[error("Simics package metadata not found in manifest at {manifest_path:?}. Ensure there is a [package.metadata.simics] entry in Cargo.toml.")]
86 PackageMetadataNotFound {
88 manifest_path: PathBuf,
90 },
91 #[error("Package metadata field {field_name} missing")]
92 PackageMetadataFieldNotFound {
94 field_name: String,
96 },
97 #[error("Package specifications is empty")]
98 PackageSpecNotFound,
100 #[error("Error writing package file to {path:?}: {source}")]
101 WritePackageError {
103 path: PathBuf,
105 source: std::io::Error,
107 },
108 #[error("Non-addon type packages are not supported")]
109 NonAddonPackage,
111 #[error(transparent)]
112 CargoMetadataError(#[from] cargo_metadata::Error),
114 #[error(transparent)]
115 ParseIntError(#[from] std::num::ParseIntError),
117 #[error(transparent)]
118 IoError(#[from] std::io::Error),
120 #[error(transparent)]
121 StripPrefixError(#[from] std::path::StripPrefixError),
123 #[error(transparent)]
124 SerdeJsonError(#[from] serde_json::Error),
126 #[error(transparent)]
127 SerdeYamlError(#[from] serde_yaml::Error),
129 #[error(transparent)]
130 Utf8Error(#[from] std::str::Utf8Error),
132 #[error(transparent)]
133 SystemTimeError(#[from] std::time::SystemTimeError),
135}
136
137pub type Result<T> = std::result::Result<T, Error>;