huaweicloud_sdk_rust_obs/
error.rs1use reqwest::StatusCode;
2use serde::Deserialize;
3use thiserror::Error;
4
5use crate::model::ErrorResponse;
6
7#[derive(Error, Debug)]
8pub enum ObsError {
9 #[error("request client build fail")]
10 Request(#[from] reqwest::Error),
11
12 #[error("ak or sk not provided")]
13 Security,
14
15 #[error("operation is not valid, status:{status:?}, message:{message:?}")]
16 Response { status: StatusCode, message: String },
17
18 #[error("parse or convert json error")]
19 ParseOrConvert,
20
21 #[error("next position error")]
22 NextPosition,
23
24 #[error("serialize error")]
25 Serialize(#[from] serde_xml_rs::Error),
26 #[error("unknown data store error")]
27 Unknown,
28}
29
30pub fn status_to_response<'de, T>(status: StatusCode, text: String) -> Result<T, ObsError>
31where
32 T: Deserialize<'de>,
33{
34 match status {
35 StatusCode::OK => {
36 let r: T = serde_xml_rs::from_str(&text)?;
37 Ok(r)
38 }
39 StatusCode::FORBIDDEN => {
40 let er: ErrorResponse = serde_xml_rs::from_str(&text)?;
41 Err(ObsError::Response {
42 status: StatusCode::FORBIDDEN,
43 message: er.message,
44 })
45 }
46 _ => Err(ObsError::Unknown),
47 }
48}