1use std::time::Duration;
4
5use json::Deserialize;
6pub use sdk::commitment_config::CommitmentLevel;
7use serde::{de::Error, Deserializer};
8use url::Url;
9
10#[derive(Deserialize)]
12pub struct Configuration {
13 pub chain: Url,
15 pub websocket: WebsocketConf,
17 pub cache_size: usize,
21 pub commitment: CommitmentLevel,
23}
24
25#[derive(Deserialize)]
27#[serde(rename_all = "kebab-case")]
28pub struct WebsocketConf {
29 pub url: Url,
31 #[serde(deserialize_with = "deserialize_duration")]
33 pub ping_interval: Duration,
34}
35
36pub fn deserialize_duration<'de, D>(deserializer: D) -> Result<Duration, D::Error>
38where
39 D: Deserializer<'de>,
40{
41 let string = String::deserialize(deserializer)?;
42 humantime::parse_duration(&string).map_err(D::Error::custom)
43}