Skip to main content

aptos_client_icp/apis/
mod.rs

1use std::error;
2use std::fmt;
3
4use crate::http::StatusCode;
5
6#[derive(Debug, Clone)]
7pub struct ResponseContent<T> {
8    pub status: StatusCode,
9    pub content: String,
10    pub entity: Option<T>,
11}
12
13#[derive(Debug)]
14pub enum Error<T> {
15    Serde(serde_json::Error),
16    Io(std::io::Error),
17    ResponseError(ResponseContent<T>),
18}
19
20impl<T> fmt::Display for Error<T> {
21    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22        let (module, e) = match self {
23            Error::Serde(e) => ("serde", e.to_string()),
24            Error::Io(e) => ("IO", e.to_string()),
25            Error::ResponseError(e) => ("response", format!("status code {:?}", e.status)),
26        };
27        write!(f, "error in {}: {}", module, e)
28    }
29}
30
31impl<T: fmt::Debug> error::Error for Error<T> {
32    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
33        Some(match self {
34            Error::Serde(e) => e,
35            Error::Io(e) => e,
36            Error::ResponseError(_) => return None,
37        })
38    }
39}
40
41impl<T> From<serde_json::Error> for Error<T> {
42    fn from(e: serde_json::Error) -> Self {
43        Error::Serde(e)
44    }
45}
46
47impl<T> From<std::io::Error> for Error<T> {
48    fn from(e: std::io::Error) -> Self {
49        Error::Io(e)
50    }
51}
52
53pub fn urlencode<T: AsRef<str>>(s: T) -> String {
54    ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
55}
56
57pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> {
58    if let serde_json::Value::Object(object) = value {
59        let mut params = vec![];
60
61        for (key, value) in object {
62            match value {
63                serde_json::Value::Object(_) => params.append(&mut parse_deep_object(
64                    &format!("{}[{}]", prefix, key),
65                    value,
66                )),
67                serde_json::Value::Array(array) => {
68                    for (i, value) in array.iter().enumerate() {
69                        params.append(&mut parse_deep_object(
70                            &format!("{}[{}][{}]", prefix, key, i),
71                            value,
72                        ));
73                    }
74                }
75                serde_json::Value::String(s) => {
76                    params.push((format!("{}[{}]", prefix, key), s.clone()))
77                }
78                _ => params.push((format!("{}[{}]", prefix, key), value.to_string())),
79            }
80        }
81
82        return params;
83    }
84
85    unimplemented!("Only objects are supported with style=deepObject")
86}
87
88pub mod accounts_api;
89pub mod blocks_api;
90pub mod events_api;
91pub mod general_api;
92pub mod tables_api;
93pub mod transactions_api;
94pub mod view_api;
95
96pub mod configuration;