Skip to main content

cli/data/import_v2/
error.rs

1// Copyright 2023 Greptime Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use 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}