cli/data/import_v2/
error.rs1use std::any::Any;
16
17use common_error::ext::ErrorExt;
18use common_error::status_code::StatusCode;
19use common_macro::stack_trace_debug;
20use snafu::{Location, Snafu};
21
22#[derive(Snafu)]
23#[snafu(visibility(pub))]
24#[stack_trace_debug]
25pub enum Error {
26 #[snafu(display("Snapshot not found at '{}'", uri))]
27 SnapshotNotFound {
28 uri: String,
29 #[snafu(implicit)]
30 location: Location,
31 },
32
33 #[snafu(display("Manifest version mismatch: expected {}, found {}", expected, found))]
34 ManifestVersionMismatch {
35 expected: u32,
36 found: u32,
37 #[snafu(implicit)]
38 location: Location,
39 },
40
41 #[snafu(display("Schema '{}' not found in snapshot", schema))]
42 SchemaNotInSnapshot {
43 schema: String,
44 #[snafu(implicit)]
45 location: Location,
46 },
47
48 #[snafu(display("Snapshot storage error"))]
49 SnapshotStorage {
50 #[snafu(source)]
51 error: crate::data::export_v2::error::Error,
52 #[snafu(implicit)]
53 location: Location,
54 },
55
56 #[snafu(display("Database error"))]
57 Database {
58 #[snafu(source)]
59 error: crate::error::Error,
60 #[snafu(implicit)]
61 location: Location,
62 },
63}
64
65pub type Result<T> = std::result::Result<T, Error>;
66
67impl ErrorExt for Error {
68 fn status_code(&self) -> StatusCode {
69 match self {
70 Error::SnapshotNotFound { .. } | Error::SchemaNotInSnapshot { .. } => {
71 StatusCode::InvalidArguments
72 }
73 Error::ManifestVersionMismatch { .. } => StatusCode::InvalidArguments,
74 Error::Database { error, .. } => error.status_code(),
75 Error::SnapshotStorage { error, .. } => error.status_code(),
76 }
77 }
78
79 fn as_any(&self) -> &dyn Any {
80 self
81 }
82}