xref: /aosp_15_r20/external/libtextclassifier/native/utils/base/status.h (revision 993b0882672172b81d12fad7a7ac0c3e5c824a12)
1*993b0882SAndroid Build Coastguard Worker /*
2*993b0882SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker  *
4*993b0882SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker  *
8*993b0882SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker  *
10*993b0882SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker  * limitations under the License.
15*993b0882SAndroid Build Coastguard Worker  */
16*993b0882SAndroid Build Coastguard Worker 
17*993b0882SAndroid Build Coastguard Worker #ifndef LIBTEXTCLASSIFIER_UTILS_BASE_STATUS_H_
18*993b0882SAndroid Build Coastguard Worker #define LIBTEXTCLASSIFIER_UTILS_BASE_STATUS_H_
19*993b0882SAndroid Build Coastguard Worker 
20*993b0882SAndroid Build Coastguard Worker #include <string>
21*993b0882SAndroid Build Coastguard Worker 
22*993b0882SAndroid Build Coastguard Worker #include "utils/base/logging.h"
23*993b0882SAndroid Build Coastguard Worker 
24*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
25*993b0882SAndroid Build Coastguard Worker 
26*993b0882SAndroid Build Coastguard Worker enum class StatusCode {
27*993b0882SAndroid Build Coastguard Worker   // Not an error; returned on success
28*993b0882SAndroid Build Coastguard Worker   OK = 0,
29*993b0882SAndroid Build Coastguard Worker 
30*993b0882SAndroid Build Coastguard Worker   // All of the following StatusCodes represent errors.
31*993b0882SAndroid Build Coastguard Worker   CANCELLED = 1,
32*993b0882SAndroid Build Coastguard Worker   UNKNOWN = 2,
33*993b0882SAndroid Build Coastguard Worker   INVALID_ARGUMENT = 3,
34*993b0882SAndroid Build Coastguard Worker   DEADLINE_EXCEEDED = 4,
35*993b0882SAndroid Build Coastguard Worker   NOT_FOUND = 5,
36*993b0882SAndroid Build Coastguard Worker   ALREADY_EXISTS = 6,
37*993b0882SAndroid Build Coastguard Worker   PERMISSION_DENIED = 7,
38*993b0882SAndroid Build Coastguard Worker   RESOURCE_EXHAUSTED = 8,
39*993b0882SAndroid Build Coastguard Worker   FAILED_PRECONDITION = 9,
40*993b0882SAndroid Build Coastguard Worker   ABORTED = 10,
41*993b0882SAndroid Build Coastguard Worker   OUT_OF_RANGE = 11,
42*993b0882SAndroid Build Coastguard Worker   UNIMPLEMENTED = 12,
43*993b0882SAndroid Build Coastguard Worker   INTERNAL = 13,
44*993b0882SAndroid Build Coastguard Worker   UNAVAILABLE = 14,
45*993b0882SAndroid Build Coastguard Worker   DATA_LOSS = 15,
46*993b0882SAndroid Build Coastguard Worker   UNAUTHENTICATED = 16
47*993b0882SAndroid Build Coastguard Worker };
48*993b0882SAndroid Build Coastguard Worker 
49*993b0882SAndroid Build Coastguard Worker // A Status is a combination of an error code and a string message (for non-OK
50*993b0882SAndroid Build Coastguard Worker // error codes).
51*993b0882SAndroid Build Coastguard Worker class Status {
52*993b0882SAndroid Build Coastguard Worker  public:
53*993b0882SAndroid Build Coastguard Worker   // Creates an OK status
54*993b0882SAndroid Build Coastguard Worker   Status();
55*993b0882SAndroid Build Coastguard Worker 
56*993b0882SAndroid Build Coastguard Worker   // Make a Status from the specified error and message.
57*993b0882SAndroid Build Coastguard Worker   Status(StatusCode error, const std::string& error_message);
58*993b0882SAndroid Build Coastguard Worker 
59*993b0882SAndroid Build Coastguard Worker   // Some pre-defined Status objects
60*993b0882SAndroid Build Coastguard Worker   static const Status& OK;
61*993b0882SAndroid Build Coastguard Worker   static const Status& UNKNOWN;
62*993b0882SAndroid Build Coastguard Worker 
63*993b0882SAndroid Build Coastguard Worker   // Accessors
ok()64*993b0882SAndroid Build Coastguard Worker   bool ok() const { return code_ == StatusCode::OK; }
error_code()65*993b0882SAndroid Build Coastguard Worker   int error_code() const { return static_cast<int>(code_); }
66*993b0882SAndroid Build Coastguard Worker 
CanonicalCode()67*993b0882SAndroid Build Coastguard Worker   StatusCode CanonicalCode() const { return code_; }
68*993b0882SAndroid Build Coastguard Worker 
error_message()69*993b0882SAndroid Build Coastguard Worker   const std::string& error_message() const { return message_; }
70*993b0882SAndroid Build Coastguard Worker 
71*993b0882SAndroid Build Coastguard Worker   // Noop function provided to allow callers to suppress compiler warnings about
72*993b0882SAndroid Build Coastguard Worker   // ignored return values.
IgnoreError()73*993b0882SAndroid Build Coastguard Worker   void IgnoreError() const {}
74*993b0882SAndroid Build Coastguard Worker 
75*993b0882SAndroid Build Coastguard Worker   bool operator==(const Status& x) const;
76*993b0882SAndroid Build Coastguard Worker   bool operator!=(const Status& x) const;
77*993b0882SAndroid Build Coastguard Worker 
78*993b0882SAndroid Build Coastguard Worker   std::string ToString() const;
79*993b0882SAndroid Build Coastguard Worker 
80*993b0882SAndroid Build Coastguard Worker  private:
81*993b0882SAndroid Build Coastguard Worker   StatusCode code_;
82*993b0882SAndroid Build Coastguard Worker   std::string message_;
83*993b0882SAndroid Build Coastguard Worker };
84*993b0882SAndroid Build Coastguard Worker 
85*993b0882SAndroid Build Coastguard Worker logging::LoggingStringStream& operator<<(logging::LoggingStringStream& stream,
86*993b0882SAndroid Build Coastguard Worker                                          const Status& status);
87*993b0882SAndroid Build Coastguard Worker 
88*993b0882SAndroid Build Coastguard Worker }  // namespace libtextclassifier3
89*993b0882SAndroid Build Coastguard Worker 
90*993b0882SAndroid Build Coastguard Worker #endif  // LIBTEXTCLASSIFIER_UTILS_BASE_STATUS_H_
91