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(
49 "Importing data from full snapshots is not implemented yet (snapshot has {} chunk(s))",
50 chunk_count
51 ))]
52 FullSnapshotImportNotSupported {
53 chunk_count: usize,
54 #[snafu(implicit)]
55 location: Location,
56 },
57
58 #[snafu(display("Snapshot storage error"))]
59 SnapshotStorage {
60 #[snafu(source)]
61 error: crate::data::export_v2::error::Error,
62 #[snafu(implicit)]
63 location: Location,
64 },
65
66 #[snafu(display("Database error"))]
67 Database {
68 #[snafu(source)]
69 error: crate::error::Error,
70 #[snafu(implicit)]
71 location: Location,
72 },
73}
74
75pub type Result<T> = std::result::Result<T, Error>;
76
77impl ErrorExt for Error {
78 fn status_code(&self) -> StatusCode {
79 match self {
80 Error::SnapshotNotFound { .. }
81 | Error::SchemaNotInSnapshot { .. }
82 | Error::ManifestVersionMismatch { .. }
83 | Error::FullSnapshotImportNotSupported { .. } => StatusCode::InvalidArguments,
84 Error::Database { error, .. } => error.status_code(),
85 Error::SnapshotStorage { error, .. } => error.status_code(),
86 }
87 }
88
89 fn as_any(&self) -> &dyn Any {
90 self
91 }
92}