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