aptos_client_icp/apis/
mod.rs1use 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;