parallel_disk_usage/
runtime_error.rs1use derive_more::{Display, Error};
2use std::{convert::Infallible, process::ExitCode};
3
4#[derive(Debug, Display, Error)]
6#[non_exhaustive]
7pub enum RuntimeError {
8 #[display("SerializationFailure: {_0}")]
11 SerializationFailure(serde_json::Error),
12 #[display("DeserializationFailure: {_0}")]
15 DeserializationFailure(serde_json::Error),
16 #[display("JsonInputArgConflict: Arguments exist alongside --json-input")]
18 JsonInputArgConflict,
19 #[display("InvalidInputReflection: {_0}")]
21 InvalidInputReflection(#[error(not(source))] String),
22 #[display("UnsupportedFeature: {_0}")]
24 UnsupportedFeature(UnsupportedFeature),
25}
26
27#[derive(Debug, Display, Error)]
29#[non_exhaustive]
30pub enum UnsupportedFeature {
31 #[cfg(not(unix))]
33 #[display("Feature --deduplicate-hardlinks is not available on this platform")]
34 DeduplicateHardlink,
35}
36
37impl From<Infallible> for RuntimeError {
38 fn from(value: Infallible) -> Self {
39 match value {}
40 }
41}
42
43impl RuntimeError {
44 pub fn code(&self) -> ExitCode {
46 ExitCode::from(match self {
47 RuntimeError::SerializationFailure(_) => 2,
48 RuntimeError::DeserializationFailure(_) => 3,
49 RuntimeError::JsonInputArgConflict => 4,
50 RuntimeError::InvalidInputReflection(_) => 5,
51 RuntimeError::UnsupportedFeature(_) => 6,
52 })
53 }
54}