18e9cee63Sopenharmony_ci// Copyright (C) 2024 Huawei Device Co., Ltd. 28e9cee63Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 38e9cee63Sopenharmony_ci// you may not use this file except in compliance with the License. 48e9cee63Sopenharmony_ci// You may obtain a copy of the License at 58e9cee63Sopenharmony_ci// 68e9cee63Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 78e9cee63Sopenharmony_ci// 88e9cee63Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 98e9cee63Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 108e9cee63Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 118e9cee63Sopenharmony_ci// See the License for the specific language governing permissions and 128e9cee63Sopenharmony_ci// limitations under the License. 138e9cee63Sopenharmony_ci 148e9cee63Sopenharmony_ciuse std::default; 158e9cee63Sopenharmony_ciuse std::error::Error; 168e9cee63Sopenharmony_ciuse std::fmt::{Debug, Display}; 178e9cee63Sopenharmony_ci 188e9cee63Sopenharmony_ciuse crate::wrapper::ffi; 198e9cee63Sopenharmony_ci 208e9cee63Sopenharmony_cipub struct HttpClientError { 218e9cee63Sopenharmony_ci code: HttpErrorCode, 228e9cee63Sopenharmony_ci msg: String, 238e9cee63Sopenharmony_ci} 248e9cee63Sopenharmony_ci 258e9cee63Sopenharmony_ciimpl HttpClientError { 268e9cee63Sopenharmony_ci pub(crate) fn from_ffi(inner: &ffi::HttpClientError) -> Self { 278e9cee63Sopenharmony_ci let code = HttpErrorCode::try_from(inner.GetErrorCode()) 288e9cee63Sopenharmony_ci .map_err(|e| {}) 298e9cee63Sopenharmony_ci .unwrap_or_default(); 308e9cee63Sopenharmony_ci let msg = inner.GetErrorMessage().to_string(); 318e9cee63Sopenharmony_ci Self { code, msg } 328e9cee63Sopenharmony_ci } 338e9cee63Sopenharmony_ci 348e9cee63Sopenharmony_ci pub fn code(&self) -> &HttpErrorCode { 358e9cee63Sopenharmony_ci &self.code 368e9cee63Sopenharmony_ci } 378e9cee63Sopenharmony_ci 388e9cee63Sopenharmony_ci pub fn msg(&self) -> &str { 398e9cee63Sopenharmony_ci &self.msg 408e9cee63Sopenharmony_ci } 418e9cee63Sopenharmony_ci} 428e9cee63Sopenharmony_ci 438e9cee63Sopenharmony_ciimpl Error for HttpClientError {} 448e9cee63Sopenharmony_ci 458e9cee63Sopenharmony_ciimpl Display for HttpClientError { 468e9cee63Sopenharmony_ci fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 478e9cee63Sopenharmony_ci write!(f, "{:?}", self) 488e9cee63Sopenharmony_ci } 498e9cee63Sopenharmony_ci} 508e9cee63Sopenharmony_ci 518e9cee63Sopenharmony_ciimpl Debug for HttpClientError { 528e9cee63Sopenharmony_ci fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 538e9cee63Sopenharmony_ci write!( 548e9cee63Sopenharmony_ci f, 558e9cee63Sopenharmony_ci "HttpClientError: code {:?} msg {}", 568e9cee63Sopenharmony_ci self.code(), 578e9cee63Sopenharmony_ci self.msg() 588e9cee63Sopenharmony_ci ) 598e9cee63Sopenharmony_ci } 608e9cee63Sopenharmony_ci} 618e9cee63Sopenharmony_ci 628e9cee63Sopenharmony_ci#[derive(Debug, Default)] 638e9cee63Sopenharmony_cipub enum HttpErrorCode { 648e9cee63Sopenharmony_ci HttpNoneErr, 658e9cee63Sopenharmony_ci HttpPermissionDeniedCode = 201, 668e9cee63Sopenharmony_ci HttpParseErrorCode = 401, 678e9cee63Sopenharmony_ci HttpErrorCodeBase = 2300000, 688e9cee63Sopenharmony_ci HttpUnsupportedProtocol, 698e9cee63Sopenharmony_ci HttpFailedInit, 708e9cee63Sopenharmony_ci HttpUrlMalformat, 718e9cee63Sopenharmony_ci HttpCouldntResolveProxy = 2300005, 728e9cee63Sopenharmony_ci HttpCouldntResolveHost, 738e9cee63Sopenharmony_ci HttpCouldntConnect, 748e9cee63Sopenharmony_ci HttpWeirdServerReply, 758e9cee63Sopenharmony_ci HttpRemoteAccessDenied, 768e9cee63Sopenharmony_ci HttpHttp2Error = 2300016, 778e9cee63Sopenharmony_ci HttpPartialFile = 2300018, 788e9cee63Sopenharmony_ci HttpWriteError = 2300023, 798e9cee63Sopenharmony_ci HttpUploadFailed = 2300025, 808e9cee63Sopenharmony_ci HttpReadError = 2300026, 818e9cee63Sopenharmony_ci HttpOutOfMemory, 828e9cee63Sopenharmony_ci HttpOperationTimedout, 838e9cee63Sopenharmony_ci HttpPostError = 2300034, 848e9cee63Sopenharmony_ci HttpTaskCanceled = 2300042, 858e9cee63Sopenharmony_ci HttpTooManyRedirects = 2300047, 868e9cee63Sopenharmony_ci HttpGotNothing = 2300052, 878e9cee63Sopenharmony_ci HttpSendError = 2300055, 888e9cee63Sopenharmony_ci HttpRecvError, 898e9cee63Sopenharmony_ci HttpSslCertproblem = 2300058, 908e9cee63Sopenharmony_ci HttpSslCipher, 918e9cee63Sopenharmony_ci HttpPeerFailedVerification, 928e9cee63Sopenharmony_ci HttpBadContentEncoding, 938e9cee63Sopenharmony_ci HttpFilesizeExceeded = 2300063, 948e9cee63Sopenharmony_ci HttpRemoteDiskFull = 2300070, 958e9cee63Sopenharmony_ci HttpRemoteFileExists = 2300073, 968e9cee63Sopenharmony_ci HttpSslCacertBadfile = 2300077, 978e9cee63Sopenharmony_ci HttpRemoteFileNotFound, 988e9cee63Sopenharmony_ci HttpSslPinnedpubkeynotmatch = 2300090, 998e9cee63Sopenharmony_ci HttpAuthError = 2300094, 1008e9cee63Sopenharmony_ci #[default] 1018e9cee63Sopenharmony_ci HttpUnknownOtherError = 2300999, 1028e9cee63Sopenharmony_ci} 103