object_store_opendal/service/
error.rs

1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements.  See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.  The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License.  You may obtain a copy of the License at
8//
9//   http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied.  See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18use opendal::Error;
19use opendal::ErrorKind;
20
21pub(crate) fn parse_error(err: object_store::Error) -> Error {
22    match err {
23        object_store::Error::NotFound { .. } => {
24            Error::new(ErrorKind::NotFound, "path not found").set_source(err)
25        }
26
27        object_store::Error::AlreadyExists { .. } => {
28            Error::new(ErrorKind::AlreadyExists, "path already exists").set_source(err)
29        }
30
31        object_store::Error::PermissionDenied { .. }
32        | object_store::Error::Unauthenticated { .. } => {
33            Error::new(ErrorKind::PermissionDenied, "permission denied").set_source(err)
34        }
35
36        object_store::Error::InvalidPath { .. } => {
37            Error::new(ErrorKind::NotFound, "invalid path").set_source(err)
38        }
39
40        object_store::Error::NotSupported { .. } => {
41            Error::new(ErrorKind::Unsupported, "operation not supported").set_source(err)
42        }
43
44        object_store::Error::Precondition { .. } => {
45            Error::new(ErrorKind::ConditionNotMatch, "precondition not met").set_source(err)
46        }
47
48        object_store::Error::Generic { store, .. } => {
49            Error::new(ErrorKind::Unexpected, format!("{store} operation failed")).set_source(err)
50        }
51
52        _ => Error::new(ErrorKind::Unexpected, "unknown error").set_source(err),
53    }
54}