VRS
A file format for sensor data.
Loading...
Searching...
No Matches
ErrorCode.h
1/*
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <map>
20#include <string>
21
22#include <fmt/format.h>
23
24#include <vrs/os/Platform.h>
25
26namespace vrs {
27
28#if IS_MAC_PLATFORM() || IS_IOS_PLATFORM()
29// http://www.cs.cmu.edu/afs/cs/user/lenzo/html/mac_errors.html
30// Largest error number is 100102 kPOSIXErrorEOPNOTSUPP
31const int kPlatformUserErrorsStart = 200000;
32#elif IS_WINDOWS_PLATFORM()
33const int kPlatformUserErrorsStart = 1 << 29; // bit 29 is set for user errors
34#elif IS_LINUX_PLATFORM() || IS_ANDROID_PLATFORM()
35const int kPlatformUserErrorsStart = 1000; // Errorno is 131
36#else
37#error "unknown platform"
38#endif
39
40const int kSimpleVRSErrorsSize = 1000;
41const int kVRSErrorsDomainSize = 100;
42const int kDomainErrorsStart = kPlatformUserErrorsStart + kSimpleVRSErrorsSize;
43
45enum ErrorCode : int {
46 SUCCESS = 0,
47
48 FAILURE = kPlatformUserErrorsStart,
49 NOT_SUPPORTED,
50 NOT_IMPLEMENTED,
51 VRSERROR_INTERNAL_ERROR,
52
53 NOT_A_VRS_FILE,
54 NO_FILE_OPEN,
55 FILE_ALREADY_OPEN,
56 FILE_NOT_FOUND,
57 INVALID_PARAMETER,
58 INVALID_REQUEST,
59 INVALID_RANGE,
60 INVALID_DISK_DATA,
61 INVALID_FILE_SPEC,
62 INVALID_URI_FORMAT,
63 INVALID_URI_VALUE,
64 READ_ERROR,
65 NOT_ENOUGH_DATA,
66 TOO_MUCH_DATA,
67 UNSUPPORTED_VRS_FILE,
68 UNSUPPORTED_DESCRIPTION_FORMAT_VERSION,
69 UNSUPPORTED_INDEX_FORMAT_VERSION,
70 INDEX_RECORD_ERROR,
71 REINDEXING_ERROR,
72 OPERATION_CANCELLED,
73 REQUESTED_FILE_HANDLER_UNAVAILABLE,
74 REQUESTED_DELEGATOR_UNAVAILABLE,
75 FILE_HANDLER_MISMATCH,
76 FILEPATH_PARSE_ERROR,
77 MULTICHUNKS_NOT_SUPPORTED,
78
79 DISKFILE_NOT_OPEN,
80 DISKFILE_FILE_NOT_FOUND,
81 DISKFILE_INVALID_OFFSET,
82 DISKFILE_NOT_ENOUGH_DATA,
83 DISKFILE_READ_ONLY,
84 DISKFILE_INVALID_STATE,
85 DISKFILE_PARTIAL_WRITE_ERROR,
86};
87
99enum class ErrorDomain : int {
100 Lz4DecompressionErrorDomain,
101 ZstdCompressionErrorDomain,
102 ZstdDecompressionErrorDomain,
103 FbVrsErrorDomain, // TODO(yinoue): convert fbcode to use a custom domain, then delete this.
104
105 // keep last, as we will add to this enum at runtime using newErrorDomain()
106 CustomDomains
107};
108
110constexpr int errorDomainToErrorCodeStart(ErrorDomain errorDomain) {
111 return kDomainErrorsStart + static_cast<int>(errorDomain) * kVRSErrorsDomainSize;
112}
113
118std::string errorCodeToMessage(int errorCode);
119
125std::string errorCodeToMessageWithCode(int errorCode);
126
130ErrorDomain newErrorDomain(const std::string& domainName);
131
139int domainErrorCode(ErrorDomain errorDomain, int64_t errorCode, const char* errorMessage);
140
143template <class T>
144int domainErrorCode(ErrorDomain errorDomain, T errorCode, const char* errorMessage) {
145 return domainErrorCode(errorDomain, static_cast<int64_t>(errorCode), errorMessage);
146}
147
152
153template <class EC>
154const std::map<EC, const char*>& getErrorCodeRegistry();
155
156template <class EC>
157ErrorDomain getErrorDomain();
158
159template <class EC>
160int domainError(EC errorCode) {
161 const std::map<EC, const char*>& registry = getErrorCodeRegistry<EC>();
162 auto iter = registry.find(errorCode);
163 if (iter != registry.end()) {
164 return domainErrorCode(getErrorDomain<EC>(), errorCode, iter->second);
165 }
166 std::string msg = fmt::format("<Unknown error code '{}'>", static_cast<int>(errorCode));
167 return domainErrorCode(getErrorDomain<EC>(), errorCode, msg.c_str());
168}
169
170} // namespace vrs
Definition AsyncDiskFileChunk.hpp:49
constexpr int errorDomainToErrorCodeStart(ErrorDomain errorDomain)
Conversion of a error domain to an int. For internal & test purposes only.
Definition ErrorCode.h:110
ErrorDomain
Core VRS error domains.
Definition ErrorCode.h:99
ErrorCode
Enum for regular VRS errors.
Definition ErrorCode.h:45
const std::map< EC, const char * > & getErrorCodeRegistry()
string errorCodeToMessage(int errorCode)
Definition ErrorCode.cpp:103
string errorCodeToMessageWithCode(int errorCode)
Definition ErrorCode.cpp:121
int domainErrorCode(ErrorDomain errorDomain, int64_t errorCode, const char *errorMessage)
Definition ErrorCode.cpp:140