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