| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/sync/engine/syncer_error.h" |
| |
| #include <variant> |
| |
| #include "base/check_op.h" |
| #include "base/notreached.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "components/sync/engine/sync_protocol_error.h" |
| #include "net/base/net_errors.h" |
| #include "net/http/http_status_code.h" |
| |
| namespace syncer { |
| |
| SyncerError::SyncerError(Type type, ValueType value) |
| : type_(type), value_(value) {} |
| |
| // static |
| SyncerError SyncerError::Success() { |
| return SyncerError(Type::kSuccess, SuccessValueType()); |
| } |
| |
| // static |
| SyncerError SyncerError::NetworkError(int error_code) { |
| return SyncerError(Type::kNetworkError, error_code); |
| } |
| |
| // static |
| SyncerError SyncerError::HttpError(net::HttpStatusCode status_code) { |
| return SyncerError(Type::kHttpError, status_code); |
| } |
| |
| // static |
| SyncerError SyncerError::ProtocolError(SyncProtocolErrorType error_type) { |
| if (error_type == SyncProtocolErrorType::SYNC_SUCCESS) { |
| // Ideally caller should use Success(), but let's fix it here to avoid |
| // subtle bugs. |
| return Success(); |
| } |
| return SyncerError(Type::kProtocolError, error_type); |
| } |
| |
| // static |
| SyncerError SyncerError::ProtocolViolationError() { |
| return SyncerError(Type::kProtocolViolationError, |
| ProtocolViolationValueType()); |
| } |
| |
| int SyncerError::GetNetworkErrorOrDie() const { |
| CHECK_EQ(type_, Type::kNetworkError); |
| return std::get<int>(value_); |
| } |
| |
| net::HttpStatusCode SyncerError::GetHttpErrorOrDie() const { |
| CHECK_EQ(type_, Type::kHttpError); |
| return std::get<net::HttpStatusCode>(value_); |
| } |
| |
| SyncProtocolErrorType SyncerError::GetProtocolErrorOrDie() const { |
| CHECK_EQ(type_, Type::kProtocolError); |
| return std::get<SyncProtocolErrorType>(value_); |
| } |
| |
| std::string SyncerError::ToString() const { |
| switch (type_) { |
| case Type::kSuccess: |
| return "Success"; |
| case Type::kNetworkError: |
| return "Network error (" + |
| net::ErrorToShortString(GetNetworkErrorOrDie()) + ")"; |
| case Type::kHttpError: |
| return "HTTP error (" + base::NumberToString(GetHttpErrorOrDie()) + ")"; |
| case Type::kProtocolError: |
| return std::string("Protocol error (") + |
| GetSyncErrorTypeString(GetProtocolErrorOrDie()) + ")"; |
| case Type::kProtocolViolationError: |
| return "Protocol violation error"; |
| } |
| NOTREACHED(); |
| } |
| |
| } // namespace syncer |