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/VrsExport.h>
25#include <vrs/os/Platform.h>
26
27namespace vrs {
28
29using std::string;
30
31#if IS_APPLE_PLATFORM()
32// http://www.cs.cmu.edu/afs/cs/user/lenzo/html/mac_errors.html
33// Largest error number is 100102 kPOSIXErrorEOPNOTSUPP
34const int kPlatformUserErrorsStart = 200000;
35#elif IS_WINDOWS_PLATFORM()
36const int kPlatformUserErrorsStart = 1 << 29; // bit 29 is set for user errors
37#elif IS_LINUX_PLATFORM() || IS_ANDROID_PLATFORM()
38const int kPlatformUserErrorsStart = 1000; // Errorno is 131
39#else
40#error "unknown platform"
41#endif
42
43const int kSimpleVRSErrorsSize = 1000;
44const int kVRSErrorsDomainSize = 100;
45const int kDomainErrorsStart = kPlatformUserErrorsStart + kSimpleVRSErrorsSize;
46
48enum ErrorCode : int {
49 SUCCESS = 0,
50
51 FAILURE = kPlatformUserErrorsStart,
52 NOT_SUPPORTED,
53 NOT_IMPLEMENTED,
54 VRSERROR_INTERNAL_ERROR,
55
56 NOT_A_VRS_FILE,
57 NO_FILE_OPEN,
58 FILE_ALREADY_OPEN,
59 FILE_NOT_FOUND,
60 INVALID_PARAMETER,
61 INVALID_REQUEST,
62 INVALID_RANGE,
63 INVALID_DISK_DATA,
64 INVALID_FILE_SPEC,
65 INVALID_URI_FORMAT,
66 INVALID_URI_VALUE,
67 READ_ERROR,
68 NOT_ENOUGH_DATA,
69 TOO_MUCH_DATA,
70 UNSUPPORTED_VRS_FILE,
71 UNSUPPORTED_DESCRIPTION_FORMAT_VERSION,
72 UNSUPPORTED_INDEX_FORMAT_VERSION,
73 INDEX_RECORD_ERROR,
74 REINDEXING_ERROR,
75 OPERATION_CANCELLED,
76 REQUESTED_FILE_HANDLER_UNAVAILABLE,
77 REQUESTED_DELEGATOR_UNAVAILABLE,
78 FILE_HANDLER_MISMATCH,
79 FILEPATH_PARSE_ERROR,
80 MULTICHUNKS_NOT_SUPPORTED,
81
82 DISKFILE_NOT_OPEN,
83 DISKFILE_FILE_NOT_FOUND,
84 DISKFILE_INVALID_OFFSET,
85 DISKFILE_NOT_ENOUGH_DATA,
86 DISKFILE_READ_ONLY,
87 DISKFILE_INVALID_STATE,
88 DISKFILE_PARTIAL_WRITE_ERROR,
89};
90
102enum class ErrorDomain : int {
103 Lz4DecompressionErrorDomain,
104 ZstdCompressionErrorDomain,
105 ZstdDecompressionErrorDomain,
106 FbVrsErrorDomain, // TODO(yinoue): convert fbcode to use a custom domain, then delete this.
107
108 // keep last, as we will add to this enum at runtime using newErrorDomain()
109 CustomDomains
110};
111
113constexpr int errorDomainToErrorCodeStart(ErrorDomain errorDomain) {
114 return kDomainErrorsStart + static_cast<int>(errorDomain) * kVRSErrorsDomainSize;
115}
116
121VRS_API string errorCodeToMessage(int errorCode);
122
128VRS_API string errorCodeToMessageWithCode(int errorCode);
129
133VRS_API ErrorDomain newErrorDomain(const string& domainName);
134
142VRS_API int domainErrorCode(ErrorDomain errorDomain, int64_t errorCode, const char* errorMessage);
143
146template <class T>
147int domainErrorCode(ErrorDomain errorDomain, T errorCode, const char* errorMessage) {
148 return domainErrorCode(errorDomain, static_cast<int64_t>(errorCode), errorMessage);
149}
150
155
156template <class EC>
157const std::map<EC, const char*>& getErrorCodeRegistry();
158
159template <class EC>
160ErrorDomain getErrorDomain();
161
162template <class EC>
163int domainError(EC errorCode) {
164 const std::map<EC, const char*>& registry = getErrorCodeRegistry<EC>();
165 auto iter = registry.find(errorCode);
166 if (iter != registry.end()) {
167 return domainErrorCode(getErrorDomain<EC>(), errorCode, iter->second);
168 }
169 string msg = fmt::format("<Unknown error code '{}'>", static_cast<int>(errorCode));
170 return domainErrorCode(getErrorDomain<EC>(), errorCode, msg.c_str());
171}
172
173} // namespace vrs
Definition Compressor.cpp:113
constexpr int errorDomainToErrorCodeStart(ErrorDomain errorDomain)
Conversion of a error domain to an int. For internal & test purposes only.
Definition ErrorCode.h:113
ErrorDomain
Core VRS error domains.
Definition ErrorCode.h:102
ErrorCode
Enum for regular VRS errors.
Definition ErrorCode.h:48
const std::map< EC, const char * > & getErrorCodeRegistry()
int domainErrorCode(ErrorDomain errorDomain, int64_t errorCode, const char *errorMessage)
Definition ErrorCode.cpp:140
ErrorDomain newErrorDomain(const string &domainName)
Definition ErrorCode.cpp:125
string errorCodeToMessage(int errorCode)
Definition ErrorCode.cpp:103
string errorCodeToMessageWithCode(int errorCode)
Definition ErrorCode.cpp:121