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